Una delle funzionalità al quale non sono disposto a rinunciare e la possibilità di ricevere e inviare le informazioni tra l'unità mobile BigWheely e un computer.

schema client server

Ho iniziato a informarmi sulle possibilità e i limiti per la comunicazione client - server, questa parte del progetto è molto importante in quanto sono consapevole dei limiti di calcolo di Arduino e per questo ho pensato che alcune parti di "intelligenza" potrei trasferirla e gestirla nel lato host, in modo da alleggerire i compiti di Arduino.

Per poter risolvere questo problema ci sono principalmente 3 aspetti da risolvere:

  • definire un protocollo di comunicazione
  • sviluppare il software lato client e lato server
  • predisporre l'hardware client / server

 

Quindi prima di lanciarsi alla programmazione spietata era necessario capire quali sono i dati che devono essere trasmessi e ricevuti tra i dispositivi:

schema comunicazione IO r

Il tipo di dati da trasmettere possono essere di tipo unidirezionale, oppure bidirezionale.
Per il tipo unidirezionale, il flusso dei dati percorre sempre lo stesso senso, ad esempio i dati del sensore di distanza sono di tipo unidirezionale in quanto esso trasmette la distanza rilevata, ma non è previsto in alcun modo (e non avrebbe alcun senso) che il sensore riceva dei dati da fonti remote.
Le comunicazioni bidirezionali sono invece previste ad esempio per i segnali di direzione dei motori (DIR), in questo caso la Motor Shield attraverso Arduino può ricevere il comando che definisca la direzione di un motore, ma Arduino ha la possibilità anche di leggerne l'attuale stato e trasmettere questa informazione al lato server.

Dopo aver studiato diverse possibilità di comunicazione e avere individuato quali informazioni sono da trasmettere è necessario definirne anche il tipo.
Teoricamente è possibile ad esempio trasmettere lo stato della direzione di un motore utilizzando un solo bit, il range di valori possibili sono sempre e solo 2 ovvero AVANTI oppure INDIETRO (nel caso del motore per lo sterzo SINISTRA oppure DESTRA).
Per trasmettere invece il valore del sensore di distanze è invece necessario prevedere almeno 2 byte in quanto il range espresso in centimetri può variare da 0 a circa 3-4 metri (dalle specifiche del sensore). Un byte (8 bit) può contenere valori interi che variano da 0 a 255, il rischio di overflow è probabile, per questo motivo è meglio prevedere almeno 2 byte per trasmettere questo valore; in questo caso il range di valori possibili varia da 0 a 255^2 ovvero 65535.

calcolatrice binaria

Un utile strumento per comprendere questi concetti fondamentali è la calcolatrice di Windows, questa utility è spesso sottovalutata ma offre tra le scelte possibili anche la modalità "Programmatore" con la quale è possibile svolgere il calcolo binario o esadecimale.

Basandomi su queste teorie ho provato a buttare giù la struttura di un possibile pacchetto di questo protocollo:

idea protocollo r

Con questa soluzione servono circa 19 bytes per trasmettere tutti i valori. Decisamente pochi !

 

A questo punto basta semplicemente sviluppare il software lato client e lato server !!! Ma questa è un'altra storia!

Software-icon vs hardware-icon

Fino ad ora ho discusso e trattato molto gli aspetti hardware del progetto, ma ora è tempo di iniziare a scrivere qualche riga di codice per far si che l'ammasso di fili che ho creato fino ad ora non rimanga inanimato !

È quindi tempo di affrontare un po' di analisi per capire da che parte cominciare.
L'approcio che ho usato è quello di suddividere il problema o l'obiettivo in pezzi più piccoli più facili da capire e affrontare.

In seguito affronterò piccoli test, tutorial e programmi che mi hanno aiutato a prendere conoscenza dei vari componenti che compongono BigWheely project.

A questo proposito consiglio di approfondire le risorse già presenti sul web, di seguito riporto una selezione decisamente utili e interessanti:

 

 

Ogni componente è stato fissato e i collegamenti sono stati fatti, possiamo ora dare un'occhiata all'intero progetto, ecco alcune foto di come si presenta oggi BigWheely !

IMG 0097 r

IMG 0098 r

IMG 0091 r

IMG 0089 r

Un grande lavoro è stato fatto per arrivare fino a qui, haimè però la strada è ancora lunga, forse l'hardware è anche stato sistemato correttamente, ma ora è necessario dedicarsi al software, molti ostacoli sono ancora alle porte!

 

sandwichUna caratteristica eccezionale di Arduino è il fatto di avere sul mercato una ricca scelta di schede aggiuntive (shield) che permettono di espandere notevolmente le funzionalità di Arduino e senza perdere ore e ore per i collegamenti e la configurazione hardware.


L'uso di shield compatibili con la scheda Arduino rende il tutto più semplice, basta infatti impilare le varie schede una sopra l'altra, come se fosse un sandwich!

 

Nel caso di questo progetto, ecco come ho impilato le shield:

No. Nome shield Descrizione
1  Arduino UNO Core shield che include la CPU e un collegamento USB (comunicazione PC)
2  Motor Shield  Scheda per il controllo dei motori
3  XBee Shield V1.1  Scheda adapter per schedine XBee (wireless COM)
4  XBee module  Schedina XBee

 

IMG 0375 r