Ciao.
In questo articolo voglio descrivere il processo di costruzione del mio primo robot con Arduino. Il materiale sarà utile ad altri principianti come me che desiderano realizzare un qualche tipo di "carrello automatico". L'articolo rappresenta una descrizione delle fasi di lavoro con i miei suggerimenti su vari dettagli. Il link al codice finale (probabilmente non il più perfetto) è fornito alla fine dell'articolo.

Quando possibile, ho coinvolto mio figlio (8 anni). Ho dedicato una parte dell'articolo a cosa è riuscito a fare con me e cosa no; potrebbe tornare utile a qualcuno.
Descrizione generale del robot
Iniziamo con alcune parole sul robot (idea). All'inizio non volevo assemblare qualcosa di tipico. Allo stesso tempo, il set di componenti era piuttosto standard: chassis, motori, sensore ultrasonico, sensore di linea, LED, buzzer. Da questo "mix" è stato ideato un robot che protegge il suo territorio. Avanza verso l'invasore che ha attraversato la linea del cerchio e poi torna al centro. Tuttavia, in questa versione era necessaria una linea tracciata, oltre a una matematica extra per rimanere costantemente nel cerchio.
Dopo attenta riflessione, ho cambiato leggermente idea e ho deciso di costruire un robot "cacciatore". All'avvio, si gira su se stesso, scegliendo un bersaglio vicino (una persona). Se la "vittima" viene individuata, il "cacciatore" accende la luce lampeggiante e la sirena e inizia a muoversi verso di essa. Quando la persona si allontana, il robot sceglie un nuovo obiettivo e lo insegue, e così via. Questo robot non ha bisogno di un'area limitata e può operare su un territorio aperto.
Come potete vedere, ricorda molto il gioco del "guardie e ladri". Anche se il robot non è diventato particolarmente agile, interagisce onestamente con le persone che lo circondano. Questo piace molto ai bambini (a volte, però, sembra che stiano per schiacciarlo, e il cuore batte forte…). Penso che sia una buona soluzione per promuovere la costruzione tecnica.
Struttura del robot
Quindi, abbiamo definito l'idea, passiamo alla composizione. L'elenco degli elementi è formato da ciò che il robot deve saper fare. Qui è tutto piuttosto chiaro, quindi diamo subito un'occhiata alla numerazione:

Il "cervello" del robot è la scheda Arduino Uno (1), che era inclusa nel kit ordinato dalla Cina. Per le nostre esigenze è più che sufficiente (considerando il numero di pin utilizzabili). Dallo stesso kit abbiamo utilizzato un telaio preassemblato (2), su cui si fissano due ruote motrici (3) e una ruota posteriore (liberamente rotante) (4). Nel kit era incluso anche un compartimento per le batterie (5). Nella parte anteriore del robot c'è un sensore ultrasonico (HC-SR04) (6), sul retro si trova il driver dei motori (L298N) (7), al centro c'è un LED lampeggiante (8) e un po' di lato c'è un buzzer (9).
Nella fase di assemblaggio verifichiamo:
— che tutto ci stia
— che sia equilibrato
— che sia disposto in modo razionale
Parte di questo è già stato fatto dai nostri colleghi cinesi. Infatti, il pesante compartimento delle batterie è posizionato al centro e le ruote motrici si trovano più o meno sotto di esso. Tutti gli altri circuiti sono leggeri e possono essere disposti lungo il perimetro.
Dettagli:
- Nel telaio del kit ci sono molti fori di fabbrica, ma non sono riuscito a capire la loro logica. I motori e il blocco delle batterie si sono fissati senza problemi, poi è iniziata la "fresatura" con la foratura di nuovi fori per fissare tale o tal'altra scheda.
- Le support in ottone e gli altri fissaggi delle scorte sono stati molto utili (a volte ho dovuto arrangiarmi).
- Le spine di ogni scheda passano attraverso i morsetti (anche questi trovati nelle scorte). È molto comodo, tutti i cavi sono disposti ordinatamente e non oscillano.
Blocchi separati
Ora passerò in rassegna i blocchi e parlerò di ciascuno personalmente.
Scomparto per batterie
È chiaro che il robot deve avere una buona fonte di energia. Le opzioni possono essere diverse; ho scelto quella con 4 batterie AA. In totale forniscono circa 5 V, e questa tensione può essere direttamente collegata al pin 5V della scheda Arduino (saltando il regolatore).
Certo, avevo un po' di cautela, ma questa soluzione è abbastanza funzionante.
Poiché l'alimentazione è necessaria ovunque, ho creato al centro del robot due prese: una fornisce il terreno (a destra) e l'altra 5 V (a sinistra).

Motori e driver
Iniziamo con il montaggio dei motori. Il montaggio è di fabbrica, ma realizzato con ampi tolleranze. In altre parole, i motori possono "oscillare" di qualche millimetro a sinistra e a destra. Per il nostro compito non è critico, ma in alcune situazioni potrebbe influire (il robot inizierà a deviare). Per sicurezza, ho allineato i motori in modo preciso e li ho fissati con la colla.

Per controllare i motori, come ho scritto sopra, si utilizza il driver L298N. Secondo la documentazione, ha tre pin per ciascun motore: uno per modificare la velocità e una coppia di pin per la direzione di rotazione. Qui c'è un punto importante. Si scopre che se la tensione di alimentazione è di 5 V, la regolazione della velocità semplicemente non funziona! Ovvero, o non si muove affatto, o va al massimo. È una particolarità che mi ha fatto "perdere" un paio di sere. Alla fine, ho trovato un riferimento in uno dei forum.
In generale, avevo bisogno di una bassa velocità di rotazione per girare il robot — in modo che avesse il tempo per scansionare lo spazio. Tuttavia, poiché nulla è andato secondo i piani, ho dovuto procedere diversamente: piccola rotazione — fermata — rotazione — fermata, e così via. Di nuovo, non è così elegante, ma funziona.
Aggiungo anche che dopo ogni inseguimento, il robot sceglie una direzione casuale per il nuovo turno (in senso orario o antiorario).
Sensore ad ultrasuoni

Un altro dispositivo dove ho dovuto cercare una soluzione compromissoria. Il sensore ad ultrasuoni fornisce cifre instabili in presenza di ostacoli reali. Questo era prevedibile. Funziona perfettamente in competizioni dove ci sono superfici lisce, uniformi e perpendicolari, ma se davanti a lui ci sono 'gambette' di qualcuno che passano — è necessario implementare un ulteriore trattamento.
Come trattamento ho messo per tre conteggi. Basato sui test condotti su bambini reali (durante i test nessun bambino ha subito danni!), si è rivelato più che sufficiente per la normalizzazione dei dati. La fisica qui è semplice: abbiamo segnali riflessi da oggetti richiesti (che forniscono la distanza necessaria) e riflessi da oggetti più lontani, come muri. Questi ultimi rappresentano picchi casuali nelle misurazioni del tipo 45, 46, 230, 46, 46, 45, 45, 310, 46… È proprio il loro filtro mediano che li esclude.
Dopo tutta l'elaborazione otteniamo una distanza fino all'oggetto più vicino. Se è inferiore a una certa soglia, attiviamo l'allerta e ci dirigiamo direttamente verso il 'trasgressore'.
Luce lampeggiante e sirena
Probabilmente, gli elementi più semplici di tutto ciò che è stato menzionato. Sono visibili nelle foto sopra. Non c'è molto da dire sull'hardware, quindi ora passiamo al codice.
Programma di controllo
Non vedo motivo di parlare dettagliatamente del codice, chi è interessato può trovare il link alla fine dell'articolo, è tutto abbastanza leggibile. Ma sarebbe utile spiegare la struttura generale.
La prima cosa da considerare è che un robot è un dispositivo in tempo reale. Più precisamente, è qualcosa di cui ricordarsi, perché anche in passato mi sono occupato di elettronica. Quindi, dimentichiamo subito di usare delay(), che è molto amato nei progetti esemplificativi, e che semplicemente «congela» il programma per un intervallo di tempo specificato. Invece, come suggeriscono gli esperti, inseriamo dei timer per ogni blocco. Quando è trascorso il tempo richiesto, eseguiamo l'azione (aumentiamo la luminosità del LED, attiviamo il motore e così via).
I timer possono essere interconnessi. Ad esempio, il buzzer funziona sincronicamente con il lampeggiatore. Questo semplifica leggermente il programma.
Naturalmente, suddividiamo tutto in funzioni separate (lampeggiatore, suono, rotazione, movimento in avanti e così via). Se non lo facciamo, poi non sarà facile capire cosa viene da dove e dove va.
Aspetti pedagogici
Tutto ciò che ho descritto sopra l'ho fatto nel tempo libero durante le serate. Con calma, ho impiegato circa tre settimane per costruire il robot. A questo punto potrei anche fermarmi, ma vi ho promesso di parlarvi del lavoro con i bambini. Cosa è fattibile a questa età?
Lavorare seguendo le istruzioni
Iniziamo verificando ogni componente singolarmente: LED, altoparlanti, motori, sensori, ecc. Ci sono molti esempi pronti - alcuni direttamente nell'ambiente di sviluppo, altri disponibili online. Questo è senza dubbio incoraggiante. Prendiamo il codice, colleghiamo il componente e verifichiamo che funzioni, poi iniziamo a modificarlo per il nostro scopo. Con la mia supervisione, il bambino realizza i collegamenti seguendo lo schema. Questo è positivo. È importante saper lavorare anche seguendo le istruzioni.
Ordine di lavoro ("dal particolare al generale")
Questo è un punto difficile. Bisogna abituarsi all'idea che un grande progetto ("costruire un robot") è composto da compiti più piccoli ("collegare un sensore", "collegare i motori"...), e questi, a loro volta, si suddividono in passaggi ancora più piccoli ("trovare un programma", "collegare la scheda", "caricare il firmware"...). Risolvendo compiti relativamente chiari di basso livello, chiudiamo i compiti di livello medio, dai quali si ottiene il risultato complessivo. Ho spiegato, ma penso che la consapevolezza non arriverà presto. Forse arriverà intorno all'età adolescenziale.
Montaggio
Perforazione, filettatura, viti, dadi, saldatura e l'odore della resina — come si può farne a meno? Il bambino ha acquisito la competenza di base 'Lavorare con il saldatore' — è riuscito a saldare alcune connessioni (ho dato una leggera mano, non lo negherò). Non dimenticate di spiegare le norme di sicurezza.
Lavorare al computer
Il programma per il robot l'ho scritto io, ma sono comunque riuscito a ottenere alcuni risultati imprevisti.
Primo: l'inglese. All'asilo hanno appena cominciato, quindi noi abbiamo 'faticato' a capire cosa significano pishalka, migalka, yarkost e altro traslitterato. Almeno abbiamo capito questo. Ho scelto di non usare parole inglesi native, poiché non eravamo ancora a quel livello.
Secondo: lavoro efficace. Abbiamo imparato scorciatoie da tastiera e come eseguire rapidamente operazioni standard. Periodicamente, mentre scrivevamo il programma, ci scambiavamo i posti, e io dicevo cosa dovevamo fare (sostituzione, ricerca, ecc.). Dovevo ripetere più e più volte: 'seleziona con un doppio clic', 'tieni premuto Shift', 'tieni premuto Ctrl' e così via. Il processo di apprendimento non è veloce, ma penso che le competenze si registreranno gradualmente 'nella memoria'.
Testo nascostoSi può dire che quanto descritto sopra sia quasi ovvio. Ma, ad essere sinceri, quest'autunno ho insegnato informatica alle classi della nona in una scuola. È un disastro. Gli studenti non conoscono cose così elementari come Ctrl + Z, Ctrl + C e Ctrl + V, evidenziare il testo tenendo premuto Shift o facendo doppio clic su una parola e così via. Questo nonostante fosse il loro terzo anno di studio di informatica… Fate voi stessi le conclusioni.
Terzo punto: la digitazione cieca. Ho affidato a un bambino la responsabilità di digitare i commenti nel codice (può allenarsi). Abbiamo subito sistemato le mani correttamente, così che le dita potessero abituarsi gradualmente alla posizione dei tasti.
Come potete vedere, siamo ancora solo all'inizio. Continueremo a perfezionare le abilità e le conoscenze, che ci saranno utili nella vita.
A proposito, riguardo al futuro…
Sviluppo futuro
Il robot è fatto, si muove, lampeggia e emette suoni. E adesso? Ispirati da quanto raggiunto, abbiamo in programma di continuare a migliorarlo. Abbiamo idea di creare un controllo remoto, come un rover. Sarebbe interessante controllare il movimento del robot da un presunto telecomando, mentre si muove in un posto completamente diverso. Ma questa è già un'altra storia…
Alla fine, ecco i veri protagonisti di questo articolo (video cliccabile):
Grazie per l'attenzione!
→
Fonte: habr.com
