Continuano ad arrivarmi stupende evoluzioni del Robot Beginner Kit realizzate da appassionati di Arduino della robotica e di questo Blog:
oggi la variante che ti presento è quella realizzata da Claudio, un appassionato della robotica che ha realizzato una versione sonora del Robot Beginner Kit ed ha voluto condividere il suo lavoro.
L’elettronica del Robot Beginner Kit di Claudio
Claudio ha realizzato un assemblaggio del Robot Beginner Kit differente da quello che hai trovato sul blog, ha invertito la posizione dei componenti inserendo tutta l’elettronica sul primo ripiano del Robot Beginner Kit
una soluzione davvero interessante, in questo modo ti resta a disposizione tutto il piano superiore per aggiungerci altri kit, componenti ed espansioni, in particolare Claudio ha utilizzato il ripiano in alto per ospitare la batteria:
La vera variante del Robot Beginner Kit realizzato da Claudio è l’aggiunta del sonoro ossia di una melodia.
Se vuoi realizzare questa variante puoi seguire lo schema che Claudio mi ha inviato relativo a come collegare un altoparlante ad Arduino:
con
- n.1 resistenza da 180ohm
- n.1 condensatore elettrolitico da 2,2microFarad
- n.1 diodo tipo 1N4007
- n.1 transistor tipo BC547
- n.1 altoparlante da 8ohm 10Watt
collegati come nello schema e connessi al pin 8 di Arduino ed al pin negativo ( Gnd ) puoi dotare il tuo Robot Beginner Kit di una melodia.
Lo sketch del Robot Beginner Kit con Melodia
Ecco lo sketch che mi ha inviato Claudio:
/* Melody Plays a melody circuit: * 8-ohm speaker on digital pin 8 created 21 Jan 2010 modified 30 Aug 2011 by Tom Igoe This example code is in the public domain. http://arduino.cc/en/Tutorial/Tone */ #include "pitches.h" // notes in the melody: int melody[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; // note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; #define PWMA 3 #define PWMB 9 #define AIN1 4 #define AIN2 7 #define BIN1 10 #define BIN2 12 #define STBY 2 #define SENSIBILITA 200 int SHIR = A5; void melodia() { // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(8, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(8); } } void setup() { pinMode( STBY,OUTPUT ); pinMode( PWMA,OUTPUT ); pinMode( PWMB,OUTPUT ); pinMode( AIN1,OUTPUT ); pinMode( AIN2,OUTPUT ); pinMode( BIN1,OUTPUT ); pinMode( BIN2,OUTPUT ); pinMode( SHIR,INPUT ); digitalWrite( STBY,HIGH ); } void loop() { int dist = analogRead(SHIR); if ( dist > SENSIBILITA ) { gira(); } else { avanti(); } } void avanti() { digitalWrite( AIN1,HIGH ); digitalWrite( AIN2,LOW ); digitalWrite( BIN1,HIGH ); digitalWrite( BIN2,LOW ); analogWrite( PWMA,100 ); analogWrite( PWMB,100 ); } void indietro() { melodia(); digitalWrite( AIN1,LOW ); digitalWrite( AIN2,HIGH ); digitalWrite( BIN1,LOW ); digitalWrite( BIN2,HIGH ); analogWrite( PWMA,100 ); analogWrite( PWMB,100 ); } void alt() { analogWrite( PWMA,50 ); analogWrite( PWMB,50 ); digitalWrite( AIN1,LOW ); digitalWrite( AIN2,LOW ); digitalWrite( BIN1,LOW ); digitalWrite( BIN2,LOW ); } void gira() { // STOP x 1/2 sec alt(); delay( 500 ); // INDIETRO x 1/2 secondo indietro(); delay( 500 ); // STOP x 1/2 sec alt(); delay( 500 ); // Gira digitalWrite( AIN1,LOW ); digitalWrite( AIN2,HIGH ); digitalWrite( BIN1,HIGH ); digitalWrite( BIN2,LOW ); analogWrite( PWMA,100 ); analogWrite( PWMB,100 ); delay( 200 ); }
gran parte dello sketch è quello che puoi trovare nell’articolo Robot Beginner Kit – il primo sketch a cui è stata aggiunta una funzione melodia() e alcune variabili che lo sketch utilizza per eseguire la melodia.
La linea 16: include un altro sketch che ti basta posizionare nella medesima cartella in cui metti lo sketch principale e che contiene le note che puoi utilizzare per la melodia, lo riporto alla fine della descrizione del primo sketch per non crearti confusione;
linea 19: definisci la melodia che è composta da una sequenza di note definite nel file pitches.h ( vedi sotto );
linea 22: definisci i tempi di durata della nota, 4 per un quarto di nota o un 8 ottava di nota;
linea 36: imposta una funzione melodia che invocata dallo sketch emette la melodia attraverso il pin 8 di Arduino;
linea 38: definisci un ciclo for da 0 a 7 ( < 8 ) cioè la lunghezza della melodia definita alla linea 19;
linea 43: calcoli la durata in millesimi della nota, la notazione noteDuration[thisNote] restituisce la durata della nota definita alla linea 22 per ciascun indice thisNote del ciclo for;
linea 44: usa la funzione arduino tone(pin,nota,durata) per emettere la nota (definita come secondo parametro) per la lunghezza (definita come terzo parametro) attraverso il pin 8 (definito come primo parametro);
linea 48: calcola la pausa tra una nota e la successiva come il 30% in più del tempo di durata della nota, se la tua melodia non avesse una tale regolarità ossia non tutte le pause potessero essere calcolate come il 30% in più della durata della nota avresti dovuto definire un terzo array simile a quello della linea 22 ma con i tempi di pausa per ciascuna nota;
linea 49: esegui la pausa prima di continuare con il ciclo for ed eseguire la nota successiva;
linea 51: con la funzione noTone(pin) interrompi l’emissione della nota sulpin definito come parametro, nel caso dello sketch che stai scrivendo sarà il pin 8.
Ora che sai come funziona la funzione melodia() puoi inserirla nel codice del Robot Beginner Kit nel punto in cui vuoi che venga eseguita, Claudio ha pensato di inserirla ogni volta che il Robot Beginner Kit rileva un ostacolo, per cui ha inserito il richiamo alla funzione melodia() alla linea 93 prima di eseguire la manovra indietro().
Ti riporto anche il file pitch.h che devi inserire come file nella medesima cartella dello sketch principale:
/************************************************* * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Mi raccomando che il file si chiami pitch.h altrimenti alla linea 16 l’include fallisce con l’errore “No such file or directory”:
se vuoi comprendere meglio la funzione tone(pin) puoi leggere il tutorial sul sito ufficiale arduino
Il video del Robot Beginner Kit di Claudio
claudio ha realizzato anche un video che ho montato e ti mostro:
Buon divertimento !!!
11 commenti
Vai al modulo dei commenti
ciao mauro, troppo onore! presentazione molto professionale,ti ringrazio ancora perche’ e’ grazie ai tuoi articoli e tutorial(molto ben spiegati),mi hai fatto tornare la voglia di riprendere lo stagnatore e fare quacosa. grazie ancora
Ciao,
vorrei iniziare a cimentarmi nella costruzione di un primo robot.
Premetto di essere del tutto neofita e che di fatto la mia istruzione ha radici diverse e lontane dal mondo dell’elettronica e della robotica (sono laureato in chimico e in economia), ciò malgrado mi sono appassionato a questo mondo ed ho comprato alcuni libri su arduino e a brevissimo mi arriverà il kit arduino di secondo livello, acquistato dal sito robot domestici.
Fatta la premessa a chi posso chiedere per avere dei consigli/aiuti?
Ho già delle idee che vorrei sottoporre.
Autore
Ciao Stefano,
neanch’io ho un passato da studente di elettronica.
Iniziare dai libri è un’ottima idea, poi nel Blog troverai tanti esempi e buoni esercizi da seguire.
Quando hai bisogno di aiuto cerca un articolo che tratti l’argomento o il progetto più simile al tuo, sperimenta e comprendi lo sketch illustrato, se nonostante questo incontri delle difficoltà commenta quell’articolo ed io cercherò di aiutarti.
Mauro
Grazie mille per la disponibilità.
ho già letto la guida ufficiale arduino, e sto studiando “Make an Arduino-Controlled Robot” di Michael Margolis.
La mia idea è di costruire un robot dotato di 4 ruote motrici che in carenza di illuminazione accende dei led, dotato di videocamera e di alcuni sensori.
La cosa più difficile sarà la possibilità di inviare i dati al cellulare e poterlo guidare dallo stesso.
Hai qualche dritta da consigliare?
ps se esiste un luogo dove pubblicare questa discussione in modo più attagliato nn devi fare altro che indicarmelo, grazie anticipatamente
Autore
Ciao Stefano,
ottima lettura, prova anche a dare un occhio al mio progetto Leonardo Wi Rover5 potrebbe ispirati per la parte di connessione da smartphone o tablet.
Mauro
Caro Mauro,
finalmente ho iniziato i lavori, ho montato la platform di dfrobot 4wd, saldato la scheda adafruit motor shield (saldature penose ma migliorerò), assemblato tutto anche se mi mancano alcuni sensori che comprerò presto (QTR -RC sensoria riflessione).
Ho scaricato le librerie dal sito, ma appena provo a inviare lo sketch con il cavo mi dice:
avrdude: stk500_getsync (): not in sync: resp= 0x00
Non so che fare!!!
Help
Autore
Ciao Stefano,
l’errore sembra indicare che arduino non viene riconosciuto, prova a verificare che i driver siano installati sul PC.
Mauro
Ciao Mauro,
complimenti per il sito, e’ veramente ben fatto e i commenti per ogni linea di codice sono una benedizione a volte! Come molti, sono un neofita di elettronica, ma sto facendo un progetto per la mia universita’ in cui devo progettare un rover che eviti ostacoli e navighi autonomamente. Per evitare ostacoli ho creato qualcosa di simile, con un arduino UNO, un motor shield, un ultrasonico HC-SR04. Solo che vorrei fare in modo che ogni volta che il rover incotra un ostacolo, si fermi , il servo su cui e’ montato il sensore giri a destra e sinistra e decida di andare dalla parte migliore.
So che c’e’ una marea di esempi di rover simili, ma non riesco a far funzionare il mio, sicuramente perche’ mi sfugge qualcosa di fondamentale e banale. Ho controllato se nel tuo sito ci sono tutorial o progetti simili ma non ho trovato nulla; e’ cosi’ o mi sbaglio?
grazie
ciao
Simone
Autore
Ciao Simone,
ho già realizzato quello che desideri in uno degli esempi con il Beginner Kit che trovi sul blog.
Anche se prima di copiare la soluzione ti consiglierei di provarci da solo, sei sulla buona strada con il ragionamento, che è la parte fondamentale, ti basta tradurre quello che hai descritto a parole in comandi per arduino.
dove ha attaccato la batteria da 12v? nel senso dove la connette ad arduino??
Autore
Ciao Simone,
la collega al connettore di ingresso di Arduino.