ultimo aggiornamento 6 aprile 2009 |
La scheda di controllo di
RoboZak denominata
MR-C3024
è dotata di due porte (RX-TX) che permettono l'interfacciamento
via collegamento seriale. |
Per fare questo è necessario quindi una scheda radiomodem come il modello WIZ-903 prodotta dalla AUREL questa è un radiomodem rappresentato dal modulo XTR-903 completo di antenna integrata su PCB
Il
ricetrasmettitore WIZ-903 integra un
modulo radio XTR-903, canalizzato con protocollo “embedded”, con l’antenna ed i
circuiti di conversione a logica TTL delle linee di connessione seriale.
Ecco alcune caratteristiche:
(Codice Aurel: WIZ-903-A4, 650200747). |
Consente un trasferimento trasparente in logica TTL RS232 (half duplex) senza necessità di pachettizzazione o bilanciamento, con velocità: 9600, 19200, 38400bps.
Sopra è
visibile lo schema a blocchi di WIZ-903-A4. In particolare si può
notare la sezione di
interfaccia costituita dal connettore J1 e dal blocco “DRIVER” che
consente di traslare i livelli dei segnali per
la connessione del modulo XTR-903-A4 con il mondo esterno tramite RS232.
Un’altra sezione è costituita dal
connettore J2 e dal regolatore di tensione per l’alimentazione della
scheda.
Sono poi presenti due jumper per
la definizione dello stato logico dei segnali SP1 e SP2 da fornire a
XTR-903-A4 per la selezione della velocità
di trasmissione dei dati.
Infine, si rileva la presenza di un’antenna loop accordabile tramite un trimmer
capacitivo.
|
Per eseguire il collegamento sono
necessarie due schede, una collegata al PC che trasmetta i dati e una
connessa al robot che riceva i dati. Per la connessione al PC è necessario dotare la scheda radiomodem di un circuito che converta i livelli TTL della scheda radiomodem a quelli RS232 del PC per fare questo si può utilizzare la scheda il cui circuito è presente sempre sul mio sito. Per il collegamento al robot è invece sufficiente realizzare un cavo adattatore dotato da un lato un connettore a 5+5 pin femmina (lato radiomodem) e dall'altro un connettore 3 pin femmina, questo un quanto l'interfaccia della scheda MR-C3024 è già del tipo TTL. |
Schema elettrico della scheda di interfaccia con
il PC
Scheda trasmittente |
Verifica del collegamento |
Cavo adattatore solo RX |
Cavo adattatore TX-RX |
I comandi di gestione delle porte della scheda MR-C3024 sono: ERX
[Velocità Porta], [Variabile Ricevute], [Etichetta di Errore di Processo
Ricevuta] dove [Velocità Porta] può essere scelta tra 2400 e 230400 sempre con 8 bit, nessuna parità, e 1 bit di stop.
|
Realizzazione del collegamento con il Robot - solo ricezione
Per realizzare il collegamento si dovrà
collegare una scheda radiomodem con funzioni trasmittente al PC
(utilizzando la scheda di interfaccia), l'altra
scheda con funzione ricevente andrà collegata a Robopenguin (tramite
cavo adattatore RX) collegandola alla
porta RX.
Per effettuare il collegamento occorre
utilizzare un programma di comunicazione con la scheda trasmittente, si
potrà utilizzare l'apposito Tools presente nel programma mikroC
utilizzato per i programmi della
sezione Workshop. |
'====================================== ' radiomodem.bas ' di Adriano Gandolfo ' www.adrirobot.it '====================================== 'Definizione variabili DIM RxIn AS BYTE 'Definizione variabile lettura modem 'Inizializzazione LCD e 'messaggio iniziale DELAY 4000 LCDINIT PRINT "&$" DELAY 200 PRINT "1Prova Radiomodem#$" DELAY 100 MAIN: Retry: ERX 9600, RxIn, Retry 'Legge porta seriale, se non riceve valore 'torna a leggere MUSIC "CDE" 'se riceve un dato emette un suono GOSUB lettura 'esegue routine per mostrare valore GOTO MAIN Lettura: PRINT "2Valore=" PRINT FORMAT(RxIn,DEC,2) 'Viene mostrato il valore letto PRINT "#$" DELAY 100 RETURN |
'====================================== ' RoboPenguin - PenguinRemote_modem.bas '====================================== .... main: Retry: ERX 9600, RR, Retry 'Lettura radiomodem IF RR = 1 THEN GOSUB music_control ELSEIF RR = 2 THEN .... |
Programma penguinRemote_modem.bas
Realizzazione del collegamento con il Robot - trasmissione/ricezione Per realizzare il collegamento duplex con il robot occorre utilizzare sia la porta RX che quella TX, si dovrà pertanto realizzare un apposito cavo per il collegamento del radiomodem. Il PC sarà sempre collegato al secondo radiomodem, con interfaccia di adattamento RS232-TTL Sul PC si utilizzerà un apposito programma (realizzato con Just BASIC V1.01) su la cui interfaccia è dotata di tasti di comando e finestre per mostrare i dati ricevuti dai sensori presenti sul robot. Pannello di controllo programma di gestione remota
Sul robot è presente un sensore LM35 un sensore di temperatura a 3 pin, questo è connesso alla porta AD(3) |
LM 35 Sensore di temperatura di precisione (Gradi centigradi) | ||
Piedinatura | Datasheet | Foto dell'integrato |
Al robot è inoltre collegato un circuito che permette di rilevare la tensione della batteria, questo prevede due connettori uno connesso alla porta AD(6) e l'altro a qualunque porta servo libera. |
Listato del programma lato PC
nomainwin ' Imposta dimensioni finestra GUI WindowWidth = 385 WindowHeight = 400 ' Visualizza titoli menu #main, "&Info programma", "Info", [info] statictext #main.titolo1, "Gestione remota robot ROBOZAK", 81, 6, 216, 20 statictext #main.titolo2, "di Adriano Gandolfo", 121, 26, 120, 20 statictext #main.titolo3, "www.adrirobot.it", 10, 330, 120, 20 statictext #main.statictext5, "Temperatura ambiente", 11, 106, 145, 20 statictext #main.tensione, "Tensione batteria", 11, 141, 145, 20 statictext #main.statictext8, "Sono le ore", 11, 71, 145, 20 statictext #main.statictext9, "°C", 220, 106, 25, 20 statictext #main.statictext24, "V", 225, 141, 25, 20 textbox #main.ora, 156, 66, 60, 25 TextboxColor$ = "cyan" textbox #main.temp, 156, 101, 60, 25 TextboxColor$ = "green" textbox #main.batt, 156, 136, 60, 25 'Sezione tasti di gestione button #main.luce, "ON-OFF Luce", [button1Click], UL, 8, 176, 115, 25 button #main.rightkick, "Calcio destro", [buttonrightkick], UL, 133, 176, 115, 25 button #main.leftkick, "Calcio sinistro", [buttonleftkick], UL, 258, 176, 115, 25 button #main.suono, "Emetti suono", [button2Click], UL, 8, 206, 115, 25 button #main.forward, "Forward", [buttonforward], UL, 133, 206, 115, 25 button #main.backward, "Backward", [buttonbackward], UL, 258, 206, 115, 25 button #main.temperatura, "Leggi temperatura", [buttontemp], UL, 8, 236, 115, 25 button #main.clockwise, "Clockwise", [buttonclockwise], UL, 133, 236, 115, 25 button #main.counterclockwise, "Counterclockwise", [buttoncounterclockwise], UL, 258, 236, 115, 25 button #main.tensione, "Leggi tensione", [buttonbattery], UL, 8, 266, 115, 25 button #main.leftpunch, "Pugno SX",[buttonleftpunch] , UL, 133, 266, 115, 25 button #main.rightpunch, "Pugno DX", [buttonrightpunch], UL, 258, 266, 115, 25 button #main.esci, "ESCI", [button5Click], UL, 316, 316, 42, 25 bmpbutton #main.bmpbutton20, "C:\Programmi\Just BASIC v1.01\Robozak\robozak_logo.bmp", [bmpbutton20Click], UL, 311, 76 'Apre finestra GUI e ne imposta il font di default open "Gestione remota Robozak" for window as #main print #main, "font ms_sans_serif 0 16" ' Modifica i fonts per i titoli print #main.titolo1, "!font Arial 16" print #main.titolo2, "!font Arial Italic 10" ' Ogni secondo aggiorna l'ora TIMER 1000, [ora] [ora] print #main.ora,time$() wait 'Pulsante "SUONO" [button2Click] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"1" close #seriale wait 'Pulsante 'accedo' [button1Click] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale, "2" close #seriale wait 'Pulsante "leftkick" [buttonleftkick] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"3" close #seriale wait 'Pulsante "rightkick" [buttonrightkick] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"4" close #seriale wait 'Pulsante "Pugno SX" [buttonleftpunch] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"5" close #seriale wait 'Pulsante "Pugno DX" [buttonrightpunch] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"6" close #seriale wait 'Pulsante "forward" [buttonforward] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"7" close #seriale wait 'Pulsante "backward" [buttonbackward] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"8" close #seriale wait 'Pulsante "clockwise" [buttonclockwise] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"9" close #seriale wait 'Pulsante "Counterclockwise" [buttoncounterclockwise] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"A" close #seriale wait 'Pulsante lettura temperatura [buttontemp] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"T" do numbytes = lof(#seriale) if numbytes = 1 then byte$=input$(#seriale,1) loop while numbytes < 1 valore=asc(byte$) temperatura=(5/255*valore)*100 print #main.temp,using("##.##", temperatura) close #seriale wait 'Pulsante lettura tensione batteria [buttonbattery] open "com2:9600,n,8,1,ds0,cs0,rs" for random as #seriale print #seriale,"V" do numbytes = lof(#seriale) if numbytes = 1 then byte$=input$(#seriale,1) loop while numbytes < 1 valore=asc(byte$) tensione=10*valore/256 if tensione > 6 then print #main.batt,using("##.##", tensione) if tensione < 6 then TextboxColor$ = "red" textbox #main.batt, 156, 136, 60, 25 print #main.batt,using("##.##", tensione) end if close #seriale wait 'Immagine robot [bmpbutton20Click] wait 'Pulsante 'esci' [button5Click] close #main end [info] notice "Info programma" + chr$(13) + "Programma di Adriano Gandolfo" wait |
Estratto del programma lato ROBOT
' Definizione variabili DIM rr AS BYTE 'Variabile lettura radiomodem DIM temperatura AS BYTE 'Variabile sensore temperatura DIM tensione AS BYTE 'Variabile lettura tensione ELSEIF RR = 84 THEN 'Lettera
T ' Trasmissione dato temperatura |
Programma penguinRemote_modem1.bas
Elenco revisioni | |
06/04/2009 | Inserito programma di gestione remota. |
30/03/2009 | Emissione preliminare |