Il progetto che ti presento oggi è il Robot Beginner Kit inseguitore di Michele, un allievo del mio ultimo corso che ha voluto condividere la sua evoluzione del Robot Beginner Kit.
L’evoluzione relaizzata di Michele si aggiunge alle altre evoluzioni del robot realizzate e condivise da tanti appassionati di robotica e di arduino.
La particolarità di questa evoluzione è che usa componenti semplicissimi come le fotoresistenze che trasformano il beginner kit nel Robot Beginner Kit inseguitore.
Cosa insegue il Robot Beginner Kit inseguitore ?
Il Robot Beginner Kit inseguitore è programmato per seguire la fonte luminosa che colpisce le sue fotocellule.
Il progetto è stato realizzato in una prima versione dotata di due fotoresistenze ed in grado di girare seguendo la luce.
Come funzione il Robot
Per comprendere il principio su cui è stato realizzato il Robot Beginner Kit inseguitore puoi leggere l’articolo dedicato all’inseguitore solare, trattato in una delle lezioni del corso avanzato e usato da Michele per realizzare il progetto.
… Letto ? ….
Se hai letto l’articolo sai che le due fotoresistenze devono essere posizionate a 90° l’una rispetto all’altra in modo da catturare la luce in modo uniforme su entrambe solo quando la fonte luminosa è perpendicolare.
L’evoluzione di questo principio fatta da Michele riguarda il controllo dei motori in modo che la rotazione del robot avvenga facendo ruotare in senso inverso le ruote del Robot Beginner Kit inseguitore invece di spostare il servomotore.
Schema di collegamento delle fotoresistenze
Entrambe le fotoresistenze sono state collegate come nello schema seguente:
e collegate a loro volta al pin A5 di arduino.
Lo sketch di Michele
Michele mi ha inviato anche lo sketch che ha realizzato per il progetto perché potessi condividerlo:
#define PWMA 5 #define PWMB 6 #define AIN1 1 #define AIN2 2 #define BIN1 8 #define BIN2 9 #define STBY 0 int sensore = A5; int vel = 60; int centrale = 512; int tolleranza = 50; void setup() { pinMode( STBY, OUTPUT ); pinMode( PWMA, OUTPUT ); pinMode( PWMB, OUTPUT ); pinMode( AIN1, OUTPUT ); pinMode( AIN2, OUTPUT ); pinMode( BIN1, OUTPUT ); pinMode( BIN2, OUTPUT ); pinMode( sensore, INPUT ); digitalWrite( STBY, HIGH ); analogWrite( PWMA, vel ); analogWrite( PWMB, vel ); } void loop() { int dist = analogRead(sensore); if ( dist < (centrale-tolleranza) ) { girasx(); } else if (dist > (centrale+tolleranza)) { giradx(); } else { alt(); } delay(30); } void avanti() { digitalWrite( AIN1, LOW ); digitalWrite( AIN2, HIGH ); digitalWrite( BIN1, LOW ); digitalWrite( BIN2, HIGH ); } void alt() { digitalWrite( AIN1, LOW ); digitalWrite( AIN2, LOW ); digitalWrite( BIN1, LOW ); digitalWrite( BIN2, LOW ); } void giradx() { digitalWrite( AIN1, LOW ); digitalWrite( AIN2, HIGH ); digitalWrite( BIN1, HIGH ); digitalWrite( BIN2, LOW ); } void girasx() { digitalWrite( AIN1, HIGH ); digitalWrite( AIN2, LOW ); digitalWrite( BIN1, LOW ); digitalWrite( BIN2, HIGH ); }
gran parte dello sketch è identico a quello presentato per il Robot Beginner Kit che ti invito a leggere per trovare la descrizione minuziosa dello sketch.
Commenterò in quaeto articolo solo i cambiamenti tra lo sketch originale del Robot Beginner Kit e quello scritto da Michele.
La linee 08-11: definisci alcune variabili utili alo sketch:
- sensore: imposta il pin a cui hai collegato il pin centrale alle due fotoresistenze;
- vel: imposta una velocità costante
- centrale: definisce la soglia di valori che ti aspetti dalle fotoresistenze quando ricevono la medesima quantità di luce
- tolleranza: indica un valore di tolleranza che sottrarrai o sommerai al valore centrale delle fotoresistenze perchè nella pratica un valore così preciso come 512 sarà difficile da ottenere;
linee 15-22: per ciascun pin definito imposta la modalità di INPUT o OUTPUT di funzionamento;
linee 24-25: definisci ed imposta la velocità di rotazione dei motori. In questo sketch Michele ha deciso di impostare nella fase di setup() la velocità costante e non vuole che essa cambi in fase di movimento;
linea 31: leggi il sensore analogico con il comando analogRead() e imposta il valore letto nella variabile dist;
linea 32: valuta se il valore letto dalle resistenze è inferiore alla differenza tra il punto centrale e la tolleranza;
linea 33: se la verifica eseguita alla linea 32 è confermata richiama la funzione girasx() che sposta a sinistra il Robot Beginner Kit inseguitore;
linea 35: controlla se il valore letto è maggiore della somma tra il punto centrale e la tolleranza;
linea 36: in tal caso ruota a destra richiamando la funzione giradx();
linee 37-39: se tutte le condizioni presenti alle linee 32 e 35 non sono verificate esegue la funzione alt() che, ironia nel nome, ferma il robot;
linea 40: attendi un tempo di 30 millisecondi prima di rieseguire la verifica dei valori rilevati dalle resistenze;
linee 43-72: le differenze rispetto al Robot Beginner Kit riguardano la completa mancanza delle accelerazioni e lo sdoppiamento della funzione gira() in girasx() e giradx();
Il video del Robot Beginner Kit inseguitore
Quando Michele ha portato la sua realizzazione al corso abbiamo realizzato un piccolo video:
11 commenti
1 ping
Vai al modulo dei commenti
ma che bel robottino 🙂
Ed è pronta la versione a 3 fotoresistenze con i 2 potenziometri per regolare le soglie.
Autore
Grazie Michele !!!
quando avrai pronto foto, sketch, descrizione del progetto e della regolazione soglie mandami tutto con anche il video in cui regoli le soglie che pubblico tutto davvero volentieri.
Salve ho eseguito una modifica dello sketch per adattarlo alla mia motor shield adafruit, il risultato è che il robot ruota seguendo la luce ma in modo scattoso. Volevo chiedere un parere per modificarlo in modo che il movimento sia più fluido. Questo è lo sketch:
[ codice rimosso in automatico ]
Autore
Ciao Marano, purtroppo come hai letto in fondo ad ogni articolo non è possibile incollare codice nei commenti.
Il miglior modo per sapere se ciò che hai scritto é corretto é provarlo sul tuo robot 🙂
ma a cosa serve la void avanti, se non viene mai eseguita nel loop, praticamente non va mai avanti dritto
Autore
Ciao Francesco,
trattandosi di una evoluzione del Robot beginner originale originale, l’autore ha preferito lasciare anche le funzioni che non utilizza.
Ciao, scusate la latitanza dovuta a problemi personali e a pressanti impegni lavorativi.
la funzione avanti c’è per 2 motivi:
1) per far vedere come si fa a far andare dritto il robottino
2) perché se vuoi puoi sostituire alt() con avanti() e, invece di avere il robottino che gira sul posto, puoi portarti il robottino in giro per casa 🙂
Autore
Grande Michele, sempre super preciso.
ciao, volevo chiederti se era possibile ricevere una foto dello schema di montaggio completo ed anche il programma grazie.
Autore
Ciao Enrico,
lascio il commento on-line in modo che l’autore del progetto possa fornirti ciò che ti occorre.
In questo articolo hai più informazioni: https://www.mauroalfieri.it/elettronica/robot-beginner-kit-fotoresistenze.html
per quanto riguarda lo schema di montaggio del robot lo trovi nel robot beginner kit ed è descritto benissimo in altri articoli di Mauro che illustra benissimo sia il montaggio che l’elettronica
[…] Robot Beginner Kit inseguitore […]