Bună ziua.
În acest articol, vreau să descriu procesul de asamblare a primului meu robot pe Arduino. Materialul va fi util altor începători ca mine, care doresc să construiască un fel de „carucior autodrăgător”. Articolul prezintă etapele procesului, alături de adăugările mele referitoare la diferitele nuanțe. Linkul către codul final (probabil nu cel mai ideal) este oferit la sfârșitul articolului.

Pe cât posibil, am implicat și pe fiul meu (8 ani). Ce am reușit să facem împreună și ce nu — pentru asta am dedicat o parte a articolului, poate va fi de folos cuiva.
Descriere generală a robotului
În primul rând, câteva cuvinte despre robotul în sine (ideea). Nu aveam chef să construiesc ceva tipic de la bun început. În același timp, setul de componente era destul de standard — șasiu, motoare, senzor ultrasonic, senzor de linie, LED-uri, buzzer. Inițial, din acest „set de supe” a fost conceput un robot care își apără teritoriul. Acesta se îndreaptă către infractorul care a trecut linia cercului și apoi se întoarce în centru. Totuși, în această variantă era nevoie de o linie desenată, plus matematică suplimentară pentru a rămâne constant în cerc.
Așadar, după câteva reflecții, am modificat puțin ideea și am decis să construiesc un robot „vânător”. La început, acesta se învârte în jurul axei sale, căutând o țintă apropiată (o persoană). Dacă „victima” este descoperită, „vânătorul” activează stroboscopul și sirena, și începe să se îndrepte spre ea. Când persoana se îndepărtează, robotul alege o nouă țintă și o urmărește, și așa mai departe. Acest robot nu are nevoie de un cerc limitat și poate funcționa pe un teren deschis.
După cum vedeți, acest lucru amintește mult de jocul „de-a v-ați ascunselea”. Deși, în final, robotul nu a ieșit destul de agil, interacționează sincer cu oamenii din jurul său. În special, acest lucru le place copiilor (uneori, totuși, pare că ei îl vor călca, și inima îmi sare…). Cred că acesta este o soluție bună pentru popularizarea construcțiilor tehnice.
Structura robotului
Așadar, ne-am decis asupra ideii, acum să trecem la configurare. Lista elementelor se formează în funcție de ceea ce trebuie să știe robotul. Aici totul este destul de evident, așa că să aruncăm o privire asupra numerotării:

Creierul robotului este o placă Arduino Uno (1); aceasta a fost inclusă în setul comandat din China. Pentru nevoile noastre este suficientă (ne orientăm după numărul de pini utilizați). Din același set am luat un șasiu gata construit (2), pe care se fixează două roți motrice (3) și una din spate (liber rotativă) (4). De asemenea, setul a inclus un compartiment pentru baterii gata pregătit (5). În fața robotului se află un senzor ultrasonic (HC-SR04) (6), iar în spate se află un driver pentru motoare (L298N) (7), în centru - un LED intermitent (8), iar puțin mai în lateral - un buzzer (9).
În etapa de asamblare ne uităm la:
— să se încadreze totul
— să fie echilibrat
— să fie aranjat rațional
Parțial, acest lucru a fost realizat deja de colegii noștri chinezi. Astfel, compartimentul greu pentru baterii este plasat în centru, iar roțile motrice se află aproximativ sub el. Toate celelalte plăci sunt ușoare, le putem plasa pe periferie.
Detalii:
- În șasiul din set există multe găuri fabricate, dar nu am reușit să îmi dau seama care este logica lor. Motoarele și blocul de acumulator s-au fixat fără probleme, iar apoi a început "adaptarea" prin forarea de noi găuri pentru a fixa fiecare placă.
- Sunt foarte util suporturile din alamă și restul echipamentelor din rezerve (uneori a trebuit să improvizez).
- Am trecut cablurile fiecărei plăci prin cleme (iarăși, le-am găsit în rezerve). Foarte convenabil, toate firele sunt aranjate frumos și nu atârnă.
Unități separate
Acum voi trece prin unitățile și voi povesti personal despre fiecare.
Compartimentul pentru baterii
Este clar că robotul trebuie să aibă o sursă bună de energie. Opțiunile pot fi diverse, eu am ales varianta cu 4 baterii AA. În total, acestea oferă aproximativ 5V, iar această tensiune poate fi aplicată direct pe pinul 5V al plăcii Arduino (o ocolind pe stabilizator).
Desigur, am avut o oarecare ezitare, dar această soluție este complet funcțională.
Având în vedere că alimentarea este necesară peste tot, pentru comoditate am realizat în centrul robotului două conectori: unul „împărțește” masa (în dreapta), iar celălalt - 5V (în stânga).

Motoarele și driverul
Mai întâi despre montarea motoarelor. Montarea este de fabrică, dar realizată cu toleranțe mari. Cu alte cuvinte, motoarele se pot „mișca” câțiva milimetri stânga-dreapta. Pentru sarcina noastră, acest lucru nu este critic, dar în alte situații poate afecta (robotul va începe să se abată). Ca măsură de precauție, am aliniat motoarele perfect paralel și le-am fixat cu lipici.

Pentru a controla motoarele, așa cum am menționat anterior, se folosește driverul L298N. Conform documentației, acesta are trei pinii pentru fiecare motor: unul pentru modificarea vitezei și doi pentru direcția de rotație. Aici există un aspect important. Se pare că, dacă tensiunea de alimentare este de 5 V, atunci reglarea vitezei pur și simplu nu funcționează! Adică fie nu se rotește deloc, fie se rotește la maxim. O astfel de particularitate, din cauza căreia am „pierdut” câteva seri. Până la urmă, am găsit o mențiune undeva pe un forum.
În general, aveam nevoie de o viteză mică de rotație pentru întoarcerea robotului — pentru a avea timp să scaneze spațiul. Dar, deoarece nu am reușit cu această idee, a trebuit să fac altceva: o mică rotire — oprire — rotire — oprire și așa mai departe. Din nou, nu atât de elegant, dar funcțional.
Aici vreau să adaug că, după fiecare urmărire, robotul alege o direcție aleatorie pentru o nouă rotație (în sensul acelor de ceasornic sau invers).
Senzorul ultrasonic

O altă „ciudățenie” unde a trebuit să caut o soluție de compromis. Senzorul ultrasonic oferă cifre instabile în fața obstacolelor reale. De fapt, acest lucru era de așteptat. Funcționează perfect la competiții, unde există suprafețe netede, uniforme și perpendiculare, dar dacă în fața lui „se agită” picioarele cuiva — aici trebuie să introduci un proces suplimentar.
Ca un astfel de proces, am instalat pe trei măsurători. Pe baza testelor efectuate pe copii reali (în timpul testelor, niciun copil nu a fost rănit!), s-a dovedit că este suficient pentru normalizarea datelor. Fizica este simplă: avem semnale reflectate de obiectele necesare (care oferă distanța dorită) și cele reflectate de obiecte mai îndepărtate, de exemplu, pereți. Cele din urmă reprezintă zgomote aleatorii în măsurători, cum ar fi 45, 46, 230, 46, 46, 45, 45, 310, 46… Exact acestea sunt filtrate de filtrul median.
După toată această procesare, obținem distanța până la cel mai apropiat obiect. Dacă aceasta este mai mică decât o anumită valoare limită, atunci activăm alarma și ne îndreptăm direct către „infractor”.
Lumina intermitentă și sirena
Cu siguranță, cele mai simple elemente din toate cele enumerate. Le puteți vedea în fotografiile de mai sus. Nu are rost să discut despre hardware, așa că acum vom trece la cod.
Programul de control
Nu văd sensul în a detalia codul, pentru cine este interesat — linkul este la finalul articolului, acolo totul este suficient de clar. Dar ar fi bine să explicăm structura generală.
Primul lucru la care a trebuit să reflectez: robotul este un dispozitiv în timp real. Mai exact, trebuie să-mi amintesc, deoarece și înainte, și acum sunt tot implicat în electronică. Așadar, să uităm imediat de apelurile delay(), pe care le iubesc foarte mult în schițele de exemplu, și care pur și simplu „îngheață” programul pentru intervalul de timp specificat. În locul acesta, așa cum sugerează oamenii cu experiență, introducem temporizatoare pentru fiecare bloc. A trecut intervalul necesar — am efectuat acțiunea (am crescut luminozitatea LED-ului, am pornit motorul și așa mai departe).
Temporizatoarele pot fi interconectate. De exemplu, buzzerul funcționează sincronizat cu lumina intermitentă. Aceasta simplifică un pic programul.
Desigur, împărțim totul în funcții separate (lumina intermitentă, sunet, întoarcere, mișcare înainte și așa mai departe). Dacă nu facem așa, apoi va fi greu să ne dăm seama ce este de unde și încotro.
Nuantele pedagogiei
Tot ce am descris mai sus am făcut în timpul liber seara. Într-un ritm relaxat, am petrecut aproximativ trei săptămâni lucrând la robot. Aici s-ar putea și încheia, dar am promis să vă povestesc și despre lucru cu copilul. Ce este realizabil la această vârstă?
Lucrul conform instrucțiunii
Fiecare detaliu l-am verificat mai întâi separat — LED-uri, buzzer, motoare, senzori etc. Există o mulțime de exemple gata făcute — unele chiar în mediu de dezvoltare, altele pot fi găsite pe internet. Acest lucru, fără îndoială, este reconfortant. Luăm codul, conectăm detaliul, ne asigurăm că funcționează, apoi începem deja să facem modificări pentru sarcina noastră. Conexiunile conform schemei și sub anumite controale de ale mele le face copilul singur. Este bine. Trebuie să înveți să lucrezi corect conform instrucțiunii.
Ordinea de lucru („de la specific la general”)
Acesta este un punct complex. Trebuie să ne obișnuim cu faptul că un proiect mare ("a face un robot") este format din sarcini mai mici ("a conecta un senzor", "a conecta motoarele"…), iar acestea, la rândul lor, constau în pași și mai mici ("a găsi un program", "a conecta placa", "a încărca firmware-ul"…). Finalizând sarcini de bază, mai clare, închidem sarcini intermediare, iar din acestea se compilează rezultatul general. Am explicat, dar cred că înțelegerea nu va veni prea curând. Probabil undeva pe la adolescență.
Montaj
Găurirea, filetele, șuruburile, piulițele, lipirea și mirosul de rășină – cum ar putea lipsi asta? Copilul a obținut abilitatea de bază "Lucru cu solder" – am reușit să lipim câteva conexiuni (am ajutat puțin, nu ascund). Nu uitați de explicațiile pentru siguranța în muncă.
Lucrul pe calculator
Programul pentru robot l-am scris eu, dar am reușit să obțin totuși câteva rezultate complementare.
În primul rând: engleză. La școală abia au început, așa că am explicat cu greutate ce înseamnă pishalka, migalka, yarkost și alte transcrieri. Am înțeles măcar asta. Am ales să nu folosesc cuvinte native în engleză, deoarece nu am ajuns încă la acest nivel.
În al doilea rând: lucru eficient. Am învățat combinații de taste rapide, cum să executăm operatiuni standard rapid. Perioadic, când scriam programul, ne schimbam locurile cu fiul meu, iar eu îi spuneam ce trebuie să facă (înlocuiri, căutări etc.). A fost necesar să repet din nou și din nou: "selectează cu dublu clic", "ține apăsat Shift", "ține apăsat Ctrl" și așa mai departe. Procesul de învățare nu este rapid aici, dar cred că abilitățile vor deveni treptat reflexe.
Text ascunsPuteți spune că cele descrise mai sus sunt aproape evidente. Dar, sincer, în această toamnă am avut ocazia să predau informatica în clasele a 9-a la o școală. Este teribil. Elevii nu știu lucruri atât de elementare ca Ctrl + Z, Ctrl + C și Ctrl + V, selectarea textului cu Shift apăsat sau dublu clic pe cuvânt și multe altele. Asta în condițiile în care aveau deja al treilea an de studiu în informatică… Trageți concluziile singuri.
În al treilea rând: tastarea rapidă. Am lăsat copilul să tipărească comentarii în cod (să se antreneze). Am aranjat imediat mâinile corect, astfel încât degetele să își amintească treptat poziția tastelor.
După cum vedeți, noi abia am început. Abilitățile și cunoștințele le vom perfecționa în continuare, vor fi utile în viață.
Apropo, despre perspective...
Dezvoltarea ulterioară
Robotul este gata, se deplasează, clipește și piuie. Ce facem acum? Încântați de realizare, plănuim să lucrăm la el în continuare. Avem în vedere să creăm un sistem de control de la distanță - similar celui de pe un rover lunar. Ar fi interesant să controlăm mișcarea robotului de la un „pult” care se află într-un alt loc. Dar aceasta este deja o altă poveste…
Și, la final, eroii acestui articol (video la clic):
Vă mulțumesc pentru atenție!
→
Sursa: habr.com
