Scheda di controllo

ultimo aggiornamento 6 aprile 2009



JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Recati presso la JLCPCB, riceverai regali e coupon gratuiti
presso Maker Faire Rome il 18-20 ottobre


La scheda di controllo di RoboZak denominata MR-C3024 è dotata di due porte (RX-TX) che permettono l'interfacciamento via collegamento seriale.
E' possibile quindi collegare un radiomodem che permette il collegamento wireless del robot.
E' possibile la sola trasmissione dei dati da PC al robot oppure sia la trasmissione di comandi che la ricezione di dati dal robot.
Quest'ultima versione permette di ricevere dei dati da sensori posti sul robot come la lettura della temperatura tramite un sensore di temperatura LM35, oppure misurare la tensione della batteria.
Per fare questo è possibile utilizzare un apposito programma.



Posizione della porta RX-TX

robozak_radiomodem.jpg

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

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

WIZ-03-A4_lato1.jpg WIZ-03-A4_lato2.jpg

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:
 
Logica: 0÷5 V
Consumo: 40 mA TX On, 30 mA RX On, 0.08mA OFF
Frequenza: 433÷434 MHz
Potenza TX: 0.1 ÷ 3 mW
Bit rate: 9600 - 19.200 - 38.400 bps
Dimensioni: 68x40x10 mm

 (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.
 


Datasheet
della scheda


Depliant
della scheda

 

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

radiomodem_TX.jpg
Scheda trasmittente
robozak_radiomodem_lcd.JPG
Verifica del collegamento
robozak_radiomodem_adattatore.JPG
Cavo adattatore solo RX
robozak_radiomodem_adattatore_RX-TX.JPG
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]
ETX [Velocità Porta], [Dati]

dove [Velocità Porta] può essere scelta tra 2400 e 230400 sempre con 8 bit, nessuna parità, e 1 bit di stop.


Estratto manuale robobasic

 

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 provare il collegamento è possibile utilizzare un apposito programma "radiomodem.bas" che utilizza il modulo LCD per mostrare il valore del dato letto, le informazioni per realizzare questo modulo sono riportate nell'apposita pagina.

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.
Occorrerà settare gli opportuni valori, e una volta acceso il robot, se tutto funziona, ogni volta che il robot riceverà un dato emetterà un suono e sul display verrà mostrato il valore ricevuto.
Per collaudare ulteriormente il sistema ho modificato il programma PenguinRemote che prevedeva l'utilizzo del telecomando virtuale e del cavo seriale per comandare il robot.
Inserendo solo alcune linee, è ora possibile comandare il robot senza alcun cavo...

 

'======================================
' 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


Programma radiomodem.bas

'======================================
' 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.

robozak_radiomodem_adattatore_RX-TX.JPG radiomodem_robozak.jpg

Il PC sarà sempre collegato al secondo radiomodem, con interfaccia di adattamento RS232-TTL

radiomodem_TX.jpg

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)
lm35.jpg
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.

adattatore_battery-monitor.jpg   

robozak_sensori-radiomodem.jpg

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
GOSUB temperatura
ELSEIF RR = 86 THEN 'Lettera V
GOSUB tensione

' Trasmissione dato temperatura
temperatura:
temperatura = AD(2)
ETX 9600, temperatura
RETURN

' Trasmissione dato tensione batteria
tensione:
tensione = AD(6)
ETX 9600, tensione
RETURN


Programma penguinRemote_modem1.bas


Per maggiori informazioni

Elenco revisioni
06/04/2009 Inserito programma di gestione remota.
30/03/2009 Emissione preliminare