domenica 9 febbraio 2014

Confessioni di un pilota FPV. Il Rover parte 3.

Allego un breve video della primissima versione del rover che nel frattempo ho deciso di chiamare: "Progetto Terrina"


I file del progetto completo sono scaricabili da qui.
Queste sono le istruzioni per modificare i servi e qui sotto il collegamento dei pochi componenti:


Una volta scaricato il progetto su Arduino yùn e aperto il REST API ACCESS dal menu di configurazione di Arduino Yùn.


sarà possibile connettersi tramite un tablet o un PC connesso nella stessa rete all'IP scelto per Arduino yùn. Quindi per aprire la pagina web per controllare il rover, bisogna digitare: IP + /sd/rover.
Nel mio caso:

 http://192.168.1.36/sd/rover/

Apparirà la pagina WEB ROVER:


Sono presenti i tasti di avanzamento rotazione e stop. I campi numerici servono per impostare il numero di cicli del loop Arduino durante i quali verrà eseguito il comando di avanzamento o rotazione. Quindi, avendo impostato un delay di 50 ms, l'avanzamento o la rotazione durerà 2 secondi. Questo serve ad evitare che il rover mantenga l'ultimo comando all'infinito in caso di problemi di connessione sulla rete ethernet. Nelle prossime versioni aggiungerò un meccanismo automatico di controllo della connessione.

Il codice HTML della pagina web inclusa nel progetto è composta essenzialmente da due parti: 
  • una tabella con le immagini dei tasti e i campi numerici.
  • 4 funzioni javascript. Due per inviare comandi e due per ricevere la risposta dal rover.

La pressione di uno dei tasti creati tramite il seguente codice:

<input type="text" style="text-align: center" size="2" name="timeL" value="40" id="timeL" /><br>
<img src="left.jpg"  id="timeLimage" onclick="sendCommand(3,document.getElementById('timeL').value);"/>

Esegue la funzione sendCommand che ha come parametri passati il numero 3 e il valore nel campo testo 40.

function sendCommand(mode,time)
{
          document.getElementById("info").innerHTML = "sent command >>>";
          server = "/arduino/mode/" + mode + "/" + time;
          richiesta = new XMLHttpRequest();
          richiesta.onreadystatechange = sendCommandResponse;
          richiesta.open("GET", server, true);
          richiesta.send(null);
}

La sendCommand non fa altro che mandare una HttpRequest (che equivale a scrivere un indirizzo su un browser e premere invio) con l'indirizzo: IP/arduino/mode/3/40. 
Tramite il Web Server e la libreria Bridge, questa stringa arriva allo sketch Arduino che si preoccupa di estrarre il numero tre che rappresenta il comando e il numero 40 che rappresenta la durata che tale comando deve avere. Tramite la funzione all'interno dello sketch Arduino: client.readStringUntil('/'); ripetuta tre volte vengono letti nell'ordine "mode", "3" e "40".  

La riga di codice richiesta.onreadystatechange = sendCommandResponse; prenota la risposta da parte di Arduino e la informa che verrà gestita dalla funzione "sendCommandResponse".

 function sendCommandResponse()
{
          if ((richiesta.readyState == 4) && (richiesta.status == 200))
             {
             esito = richiesta.responseText;
             document.getElementById("info").innerHTML = esito;
             response = esito.split("#");
             document.getElementById("info").innerHTML = response;
             mode = response[0];
           Ardumia67timeout = response [1];
             }
}   

La funzione "sendCommandResponse" si preoccupa di aggiornare il campo di stato del rover che viene mostrato sotto ai tasti:

Nel prossimo post aggiungeremo una webcam sul rover.

Nessun commento:

Posta un commento