1. Reperimento dei materiali I materiali utilizzati per il progetto sono i seguenti: • • • • • • • • Arduino UNO rev3; Arduino Ethernet Shield; Router TP-Link Modello TL-MR3020; L293D; Pennetta 3G compatibile con il router; Macchinina radiocomandata;* Batterie AAA; Batterie 9V. * L'unico consiglio è di trovarne una che non sia troppo piccola altrimenti potrete avere problemi nella disposizione dei componenti. 2. Progetto circuito elettrico Il circuito che è stato progettato è un ponte H. Il circuito risulta così semplice grazie all'integrato L293D che contiene al suo interno tutte le componenti del ponte. Di seguito il circuito: Gli schemi sono reperibi alla pagina di download. 3. Prove e montaggio circuito elettrico Il circuito è stato prima di tutto testato su breadboard per prevedere eventuali malfunzionamenti. Dopodichè, è stato progettato il footprint, che grazie alla disponibilità della scuola, è stato stampato. Al circuito sono state poi saldate le componenti: 4. Acquisizione e Elaborazione dati Come detto in precedenza i dati vengono acquisiti dalla paginaComanda, che contiene una grafica intuitiva per controllare la nostra macchinina. In base al tasto o alla combinazione di tasti che viene premuta questa funzione calcola un numero da 1 a 9(come nela tastiera del nostro PC). Poi vengono assemblati ed infine inviati, attraverso l'utilizzo di un iFrame ad una pagina con indirizzo no-ip. Qusto indirizzo che sfrutta un servizio DDNS ci consente di avere un indirizzo statico per il nostro indirizzo IP altrimenti dinamico. Ricerca dati: function posizione(lax,lay){ sugiu = lay; dxsx = lax; if(sugiu==2) { if(dxsx==4) { val="1"; } else if(dxsx==5) { val="2"; } else if(dxsx==6) { val="3"; } else { val="5"; } } else if(sugiu==5) { if(dxsx==4) { val="4"; } else if(dxsx==5) { val="5"; } else if(dxsx==6) { val="6"; } else { val="5"; } } else if(sugiu==8) { if(dxsx==4) { val="7"; } else if(dxsx==5) { val="8"; } else if(dxsx==6) { val="9"; } else { val="5"; } } else { val="5"; } return val; } Acquisizione ed Elaborazione: $(function(){ var y=5; var x=5; var server = "http://mioserver.no-ip.org"; $("#su").click( function() { y=8; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#su").css("background-color","#CCCCCC"); $("#xd").css("background-color","#999999"); $("#giu").css("background-color","#999999"); }); $("#xd").click( function() { y=5; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#su").css("background-color","#999999"); $("#xd").css("background-color","#CCCCCC"); $("#giu").css("background-color","#999999"); }); $("#giu").click( function() { y=2; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#su").css("background-color","#999999"); $("#xd").css("background-color","#999999"); $("#giu").css("background-color","#CCCCCC"); }); $("#sx").click( function() { x=4; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#sx").css("background-color","#CCCCCC"); $("#xs").css("background-color","#999999"); $("#dx").css("background-color","#999999"); }); $("#xs").click( function() { x=5; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#sx").css("background-color","#999999"); $("#xs").css("background-color","#CCCCCC"); $("#dx").css("background-color","#999999"); }); $("#dx").click( function() { x=6; var indirizzo = server+posizione(x,y); document.getElementById('scar').setAttribute('src',indirizzo); $("#sx").css("background-color","#999999"); $("#xs").css("background-color","#999999"); $("#dx").css("background-color","#CCCCCC"); }); I dati ora pronti sul web vengono letti da Arduino collegato all'Ethernet Shield e ad un router connesso ad internet tramite una pennetta 3g. L'Arduino viene utilizzato come web server e nel router è stata aperta la porta 80(Verrà spiegato in seguito), e connesso con il sito no-ip. Tutto ciò fa in modo che ogni informazione che arrivi all'indirizzo di no-ip venga letto da Arduino. * Per una maggiore comprensione tutto il codice del sito è disponibile nella pagina download. 5. Comunicazione WEB Una volta che abbiamo ottenuto ed inviato il nostro indirizzo completo questo, come fa ad arrivare ad Arduino? Il servizio che no-ip offre è un servizio, come già ripetuto più volte in precedenza, di DDNS(Dynamic DNS). Ovvero il nostro IP globale, quello del router, viene associato con un nome DNS dello stesso host, anche se l'indirizzo cambia nel tempo. Questo ci permette di inviare comandi all'alrduino anche se il nostro router si è riavviato ed ha quindi cambiato il suo IP globale. Per attivare il servizio, basta resgistrarsi su no-ip. Una volta fatto questo, basta recarsi su Hosts/Redirects ed aggiungere un nuovo host. Fatto questo possiamo iniziare a modificare le impostazioni del router. Per accedere al pannello di controllo del router basta digitare il seguente IP: 192.168.0.254 ed accedere con le seguenti credenziali: Username: admin - Password: admin Inserimento dati no-ip: Pe quanto riguarda l'arduino, utilizzato come web server, bisgna effettuare due operazioni: La prima è quella di impostare l'IP dell'arduino statico. La seconda è quella di aprire la porta 80 all'arduino sul router in maniera tale che tutti i comandi vadano a finire all'Arduino. Ora il nostro arduino è pronto per la comunicazione web. 6. Elaborazione dati Una volta che i dati sono stati inviati tocca all'arduino codificarli. Questo avviene nella seguente maniera: msg = ""; EthernetClient pc_client = ArduinoEthernetServer.available(); //controllo se pc_client è true if (pc_client != false) { //controllo continuamente che il client sia connesso while (pc_client.connected()) { //Controllo se ci sono byte disponibili per la lettura if (pc_client.available()) { Data_RX = pc_client.read(); //leggo i byte disponibili provenienti dal client msg += Data_RX; //ricostruisco la stringa ricevuta concatenando i singoli byte Dopo aver ricorstruito la stringa, controllo che sia finita. if (Data_RX == '\n') Dopo questa operazione attraverso una serie di if controllo il comando, if (msg.indexOf("reset")>0) cmd=0; if if if if if if if if if (msg.indexOf("c1")>0) (msg.indexOf("c2")>0) (msg.indexOf("c3")>0) (msg.indexOf("c4")>0) (msg.indexOf("c5")>0) (msg.indexOf("c6")>0) (msg.indexOf("c7")>0) (msg.indexOf("c8")>0) (msg.indexOf("c9")>0) cmd=1; cmd=2; cmd=3; cmd=4; cmd=0; cmd=6; cmd=7; cmd=8; cmd=9; che verrà poi filtrato attraverso uno switch. switch (cmd) { 7. Realizzazione sito web Per il sito web sono tate create un buon numero di pagine. In HTML sono state create quelle statiche, cioè tutte quelle contenenti le spiegazioni teoriche o gli schemi. In PHP sono invece state create le pagine dinamiche. Una delle pagine dinamiche è ad esempio quella dei download, che controlla con che browser viene aperto il sito prima di impostare gli indirizzi dei file di download. Con questo linguaggio è stata creata anche la pagina contatti, cioè quella adibita ad inviare mail con le richieste degli utenti al proprietario del sito. Per alcune pagine, come quella per comandare la macchinina, viene utilizzato il javascript come si può notare sopra, con la funzione e la pagina che inviano i dati all'arduino.