Indice |
Presentazione del lavoro
Un piccolo robot rappresenta un'applicazione molto istruttiva per chi desidera testare la sua passione per l'elettronica, la meccanica e la programmazione. Sono molti i ragazzini che, con caparbietà, affrontano l'avventura di una sua costruzione, spesso partendo da conoscenze che, a chi ha qualche anno in più, appaiono troppo acerbe. Ma i ragazzi determinati non si lasciano scoraggiare e con la tenacia, la forza, l'energia, la fantasia e la vitalità che li caratterizza, arrivano, sorprendentemente in poco tempo, al loro obiettivo. E' il caso di pierinter, presentatosi pochi mesi fa come un ragazzo a digiuno di nozioni teoriche, ma deciso ad alimentare la passione che sentiva dentro. Presentiamo allora in Home page il risultato del suo lavoro, spedito quasi con timore, ma con orgoglio, in un post del forum. Si tratta di una realizzazione che non ha, ovviamente, particolari pretese tecniche, ma che vuole essere la dimostrazione delle potenzialità che ci sono nei nostri ragazzi.
Il mio robottino
Ciao a tutti.
Finalmente sono riuscito a completare il mio primo robot totalmente autocostruito, e ho deciso di condividere con voi questo progetto. Ai più esperti sembrerà scontato, come è ovvio, ma credo che possa essere d'aiuto a molte persone, in quanto può dare un'idea di come procedere. Quindi spiegherò nei dettagli il mio lavoro :-) (un'idea eh:), poi dovete fare voi)
Guardate prima la sua foto:
Bene, se avete continuato a leggere vuol dire che siete almeno un po' interessati,
QUINDI iniziamo :
il robot è un semplice robot con due switch davanti che fungono da sensori meccanici per rilevare la presenza di ostacoli ( banalmente= quando vengono schiacciati è perché c'è un ostacolo:-) !!)
inizio a proporvi lo schema, realizzato con eagle
non spaventatevi, è fatto abbastanza male lo so, ma ora cerchiamo di analizzarlo con calma, pezzo per pezzo.
allora:
partiamo dall alimentazione
Ho deciso di usare un porta batterie che contiene 6 stilo, le classiche AA. potete scegliere voi se utilizzare stilo normali (1.5 V ognuna: 1.5 x 6 = 9 V totali) o ricaricabili (1,2 ognuna ---> 1,2 x 6 = 7.2 V totali) cambierà solo la velocità del robot ( più tensione ai motori, più vanno veloci, ma NON ESAGERATE !! :-)
ah, le pile devono essere TIPO SUI 2000/2500 mAH, altrimenti durano niente :)
ok, io ho deciso di usare le ricaricabili, quindi in entrata ho 7,2 volt, bene!
questi 7,2 V vanno sia ad alimentare i motori, sia devono alimetare la logica del nostro circuito. Come si vede dallo schema il circuito fa uso di un pic e di un integrato, e noi ben sappiamo che questi lavorano con una tensione di 5 volt. da dove li prendiamo questi 5 V ?
ecco qui! vi faccio vedere in linea di massima il mio schema
ci viene incontro il nostro lt1085, un regolatore di tensione che stabilizza la tensione a 5 volt precisi. Ma andiamo con calma.
Partendo da sinistra vediamo due piedini, denominati alimentazione 1 e alimentazione 2.
Cosa sono? Semplice, sono i due piedini su cui mettere i due fili uscenti dal vano batterie :) (solitamente filo rosso positivo, filo nero negativo, controllate con il tester ). Bene.
Il successivo simbolo sembra stano, ma invece è un semplice interruttore a tre piedini, ma noi ne utilizziamo solo due.
Serve quindi per interrompere l'alimentazione e far si che il robot quindi si fermi.
Dopo l'interruttore, ( e prima del diodo), possiamo prendere la tensione per alimentare i motori che chiamiamo +V il diodo D1 serve solamente per evitare che un eventuale inversione di polarità danneggi gli stadi successivi.
Dopo il diodo troviamo 2 condensatori, un integrato a tre piedini, e altri due condensatori.
Io ho utilizzato per i condensatori elettrolitici (C1,C4 per intenderci) due condensatori da 1000 uF,25 V. mentre per gli altri due,due condensatori da 100 nF. sono valori che ho usato io, quindi non sono ottimali però dalle mie prove il tutto funzionava solo con questi valori di condensatori.
Ovviamente potete provare a cambiarli , a voi le prove !:)
Ora veniamo al primo integrato,l ' LT1085.
Sebbene esistano diversi integrati che svolgono la stessa funzione, cioè stabilizzare la tensione a 5 V ( vedi lm7805) ho optato per questo perché è in grado di far passare fino a 3 A , e inoltre ( e sopratutto) ha una bassa tensione di drop out. Vi spiego meglio, senza entrare nei dettagli tecnici : ad esempio l' lm7805 per stabilizzare a 5 V ha bisogno di avere in ingresso una tensione almeno superiore a 7-8 V. dato che la nostra alimentazione varia tra i 7 e i 9 V, questi valori non sono accettabili, tenendo in considerazione anche che le pile si scaricano! l'LT1085 ha un low drop out. Che significa? Significa che in ingresso non necessita di una tensione così alta per funzionare a dovere, ma gli basta una tensione minore dei 7-8 V richiesti dall 7805, e questo per noi è importante!
per ulteriori informazioni vi rimando al datasheet
Ora abbiamo chiarito la funzione del nostro 1085 e sappiamo che in uscita ad esso abbiamo i nostri 5 volt, utili ad alimentare la logica del nostro robottino.
parliamo ora un po della logica. Il cervello è il pic,in particolare nel mio caso il
pic 16f876a
In sostanza il pic è un dispositivo totalmente programmabile via pc utilizzando un opportuno linguaggio di programmazione che può essere l'assembler, il c , o il basic.
Per il mio scopo io ho utlizzato il basic, il più semplice e il più vicino alla lingua parlata (a dir la verità più vicino all inglese che alla NOSTRA lingua parlata, come vedrete dopo :-)
Per poter programmare il pic bisogna quindi avere ( o autocostruirsi , se ne siete capaci ) un programmatore ( !) e un software per programmare . Io ho usato Mikrobasic, gratuito, reperibile qui
Guardiamo un po' di immagini del pic
Questa è la piedinatura
Ok, dopo aver dato un occhiata a com'è il pic, riprendiamo lo schema iniziale.
Qui sembra tutto difficile, ma pensate di eliminare tutti quei rettangoli con dei cerchietti dietro che sono delle semplici morsettiere. Vi rimangono pochi pin. Vediamoli
- VDD (pin 20)----> va collegato direttamente ai 5 volt
- VSS (pin 8,19)---> van collegati direttamente a massa
- MCLR(pin1)---> va collegato ai 5 volt attraverso una resistenza da 4,7kohm
- OSC1/OSC2(pin 9,10)---> tra il pin 9 e 10 va collegato un quarzo ( io ho usato un quarzo da 4 MHz), e entrambi i piedini vanno collegati poi a massa attraverso un condensatore da 22pF, come si vede dallo schema.
Ok.
Lasciate perdere i piedini che iniziano con RA,RC,(guardate la piedinatura) a noi interessano solo quelli che iniziano con RB e che insieme ( sono 8) costituiscono la cosiddetta PORTB. Vi basti sapere che ognuno di questi piedini può essere utilizzato come input o come output, e nel nostro specifico caso da RB0 a RB5 li utilizziamo come output, mentre RB6 e RB7 come input.
Gli input sono gli ingressi,sono quelli che andranno collegati agli switch.
Gli output sono quelli che andranno a pilotare il prossimo integrato, l' L293d.
L293d
è un circuito integrato indispensabile per poter pilotare i nostri motori, e dopo vi spiegherò il perché. Ora sfogliatevi il datasheet
prima di spiegare a cosa serve questo integrato guardiamo la piedinatura.
Ci sono:
- 2 ingressi di ENABLE , uno per lato
- 4 ingressi, due per lato
- 4 uscite, due per lato
- 4 piedini di massa,due per lato
- 2 ingressi per la tensione positiva chiamati Vs e Vss.
Allora vediamo di spiegare il funzionamento di questo strano integrato : esso contiene al suo interno due ponti H. Se non sapete cosa sia un ponte h provate a fare una veloce ricerca su google, ma io provo lo stesso a spiegarvelo.
Guardiamo i piedini di input(IN1,IN2,IN3,IN4) sullo schema,sono collegati rispettivamente ( anche se è un po incasinato effettivamente ) a RB0,RB1,RB2,RB3, che come abbiamo detto prima sono configurati come uscite.
Un ' uscita del pic può assumere due stati, 0 e 1. 0 equivale a 0volt, 1 equivale a 5 volt. non sono ammessi valori intermedi o superiori a 5 volt.Questa è una regola importante da tenere a mente.
E questo per quanto riguarda la tensione.
Vi starete forse chiedendo se non possiamo attaccare direttamente i motori al pic per farli funzionare… e la risposta è NO.!
I motori assorbono corrente, generalmente intorno ai 600mA -1A.
Il pic è in grado di fornire al massimo 20 mA ... e quindi come facciamo a pilotare con un pic i motori? Ed ecco qui che entra in gioco l'l293d!
Noi collegando ad esempio l'ingresso IN1 con RB0 del pic, se quest ultimo va a 5 volt,chiaramente anche IN1 va a 5 volt. e quando l'ingresso va a livello logico 1 (5volt) l'uscita(out1 ) si porta anch essa a livello alto, fornendo una tensione positiva( che dipende da Vs, come vediamo tra poco) ma con una corrente massima che arriva fino ad 1 ampere!. ora si che possiamo far girare i nostri motori !
QUINDI
- OUT1 e OUT2 pilotano un motore
- OUT3 e OUT4 pilotano l'altro motore.
ed essendo le uscite del 293d strettamente legate alle uscite del PIC, capiamo come sia quest’ultimo che fa girare tutto l'ambaradam!, il CERVELLO appunto
una nota : l' L293d ha due piedini , chiamati Vs e Vss, che come ho detto prima vanno collegati alla tensione positiva. occorre però fare una distinzione:
- Vs=Supply Voltage
- Vss=logic supply voltage
- Vss quindi,facendo parte della logica deve essere collegata per forza ai 5 volt
- Vs invece è la tensione che in pratica troveremo sugli out del nostro integrato quando l'ingresso è a livello logico 1.
Facciamo un esempio. Poniamo Vs=7,74 V. Se IN1=5 V, OUT1=7.74 V. VS è quindi la tensione che noi troviamo sulle uscite, che ricordo sono pilotate dagli ingressi e quindi dal pic. questo vs andrà collegato alla tensione delle batterie ( non ai 5 V) tramite una resistenza da un paio di watt.
Per quanto riguarda i due ingressi di ENABLE essi non fanno altro che abilitare il funzionamento delle usicte che stanno sul loro stesso lato. facciamo un esempio.
Se ENABLE1 è a 0, su OUT1 E OUT2 noi leggeremo 0volt, indipendentemente da ciò che è presente in ingresso. funzionano quindi in sostanza come due interruttori.
Se noi quindi colleghiamo un motore a out1 e out2 e azzeriamo l'enable 1, il motore si fermerà e prescindere dagli ingressi.
ENABLE 1 e ENABLE 2 sono collegati rispettivamente a RB4 e RB5 del pic.
NB: l'L293d ha al proprio interno già i diodi di protezione dei motori , quindi non abbiamo bisogno di aggiungerli esternamente.
INGRESSI: passiamo velocemente ai due ingressi rb6 e rb7 del pic
entrambi sono collegati a massa tramite una resistenza.e sono collegati a quei due piedini che vedete , che andranno poi collegati ad uno switch n/a (normalmente aperto) in modo che appena lo switch viene schiacciato, ai capi della resistenza e quindi in ingresso al pic ci saranno 5 V.
Questo è un esempio di switch.
Vanno utilizzati solo due piedini però, quello centrale e uno dei due laterali.
Quando non è schiacciato il contatto tra i due piedini è aperto, quando invece viene schiacciato il contatto si chiude.
Pertanto, come si vede dallo schema, uno dei due piedini va collegato all’ingresso del pic, mentre l ‘alto ai 5 V.
Gli switch da utilizzare sono due.
quindi ,RICAPITOLANDO, abbiamo che
- RB0,RB1,RB2,RB3 comandano gli ingressi del 293
- RB4,RB5 comandano gli enable 1 e 2
- RB6,RB7Vvolt
- VSS (pin 8,19)---> van collegati direttamente a massa
- MCLR(pin1)---> va collegato ai 5 volt attraverso una resistenza da 4,7 kΩ
- OSC1/OSC2(pin 9,10)---> tra il pin 9 e 10 va collegato un quarzo ( io ho usato un quarzo da 4 MHz), e entrambi i piedini vanno collegati poi a massa attrav erso un condensatore da 22 pF, come si vede dallo schema sono input e vanno collegati ai proprio switch
- OUT1,OUT2 vanno ad un motore
- OUT3,OUT4 all altro motore
- VSS va ai 5 V
- VS alla tensione delle pile.
Ok, qui si conclude la parte elettronica!
Se avete qualche domanda chiedete pure
QUI vi lascio il pcb che ho realizzato io nel caso potesse servirvi
MECCANICA
Per quanto riguarda la meccanica io ho utilizzato due servomotori modificati in modo che girino continuamente, ho quindi eliminato il fermo che impediva la rotazione di 360°.
I due servomotori sono fissati ad un telaio in legno a cui è inoltre fissata una di quelle ruote libere di muoversi in ogni direzione ( ad esempio come quelle che probabilmente avete sotto la vostra sedia in questo momento :-)). il cambio di direzione è ottenuto bloccando un motore e facendo girare l'altro!
Qualche foto per capire meglio
E QUI FINISCE IL NOSTRO ROBOT.
vi lascio il programma scritto in basic. A voi l’interpretazione tanto è molto molto semplice
inizio programma ------------------------------------------- program testrobot1 sub procedure dx_attivo portb.4=1 end sub sub procedure sx_attivo portb.5=1 end sub sub procedure dx_avanti dx_attivo portb.0=1 portb.1=0 end sub sub procedure sx_avanti sx_attivo portb.2=1 portb.3=0 end sub sub procedure dx_indietro dx_attivo portb.0=0 portb.1=1 end sub sub procedure sx_indietro sx_attivo portb.2=0 portb.3=1 end sub sub procedure avanti dx_avanti sx_avanti end sub sub procedure indietro dx_indietro sx_indietro end sub sub procedure indietro_dx portb.4=0 sx_indietro end sub sub procedure indietro_sx portb.5=0 dx_indietro end sub main: portb=0 trisb=%11000000 inizio: if portb.7=0 then if portb.6=0 then avanti goto inizio end if end if if portb.7=1 then portb.4=0 portb.5=0 delay_ms(500) if portb.6=0 then indietro_sx delay_ms(2500) goto inizio end if end if if portb.7=1 then portb.4=0 portb.5=0 delay_ms(500) if portb.6=1 then indietro delay_ms(2500) indietro_dx delay_ms(2500) goto inizio end if end if if portb.6=1 then portb.4=0 portb.5=0 delay_ms(500) if portb.7=0 then indietro_dx delay_ms(2500) goto inizio end if end if if portb.6=1 then portb.4=0 portb.5=0 delay_ms(500) if portb.7=1 then indietro delay_ms(2500) indietro_dx delay_ms(2500) goto inizio end if end if goto inizio end. -------------------------------------
siamo giunti alla fine, mancano solo le immagini
Conclusione
Eccoci cosi davvero arrivati alla fine, il nostro robot è completo.
Spero di avervi aiutato o almeno di aver stuzzicato la vostra curiosità.
Alla prossima
QUI IL VIDEO DEL NOSTRO ROBOT ALL 'OPERA
salute a tutti!!