sabato 22 febbraio 2014

Confessioni di un pilota FPV. Il Rover parte 5.

La versione 3.0 del "Progetto Terrina" gestisce un servo per alzare e abbassare la telecamera.
Cliccando sulla colonna nera a destra si controlla l'altezza della telecamera con sette inclinazioni possibili. 


La parte "meccanica" è forse troppo complessa per un JFFP (Just For Fun Project) come questo e confesso che non l'ho realizzato in questa occasione. Si tratta di una prova di lavorazione con una fresa CNC che costruii alcuni anni fa. Prossimamente dedicherò un post anche al progetto CNC. 


Ecco un breve video:



Il servo è collegato alla porta 11 della scheda Arduino Yùn.



I file della versione 3.0 del "Progetto Terrina" sono scaricabili da qui:





lunedì 17 febbraio 2014

Confessioni di un pilota FPV. Il Rover parte 4.

Questo è il primo video del Rover 2.0 in missione "all'esterno":


Per installare e configurare la telecamera ho utilizzato le istruzioni di questo blog www.lucadentella.it.
E' esattamente quello che mi serviva ed inoltre è spiegato ottimamente. Quindi mi sono procurato la telecamera LifeCam HD-3000 ed ecco la telecamera montata sul rover.


La versione 2.0 è scaricabile da qui.
Ho dovuto aggiornare lo sketch Arduino Yùn e la pagina HTML nel web server per visualizzare lo streaming video otre a piccoli aggiustamenti per regolare la velocità dei servi. 





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.