Stampa

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:

 

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!