Visualizzazione post con etichetta Beaglebone black. Mostra tutti i post
Visualizzazione post con etichetta Beaglebone black. Mostra tutti i post

venerdì 7 febbraio 2014

Talkin'Car ovvero come parlare al conducente della macchina che ti segue

Quanti di voi guidatori provetti, hanno sentito l'esigenza di far sapere il vostro pensiero al guidatore della auto che vi segue, magari mentre vi tallona sulla corsia di sorpasso a 180 km/h?
Oppure al camionista che avete oltraggiato mettendovi con la vostra auto tra lui ed il collega che lo precede a 35Km/h sul Passo della Cisa?
A me, devo dirvi la verita', mi e' capitato moltissime volte. Ho quindi pensato di realizzare questo progetto che va a coprire proprio questa fondamentale esigenza. Comunicare agli altri! Magari occhio a cosa comunicate, ma di questo non voglio sapere nulla, ognuno e' reponsabile delle porprie azioni e delle proprie realizzazioni!

Quindi vado a spiegare come si compone il porgetto che sottolineo, non e' ancora concluso, alcune parti infatti non sono ancora state sviluppate per intero.

La base fondamentale e' il Display a matrice di Led che deve avere una lunghezza congrua con la possibilita' di visualizzazione a distanza,  infatti, se anche con una mattonella 8x8 e' possibile comunicare, a distanza di qualche decina di metri, come nel caso di due auto che si seguono in strada, un unico pezzo risulta povero e quasi invisibile.
Ho optato per collegare 5 pezzi di mattonelline 8x8 per ottenere una matrice di Led di 8x40, così facendo ottengo una striscia di circa 35 cm sufficientemente visibile a qualche metro di distanza.

Arduino naturalmente sara' la scheda di controllo di Talkin'Car, er la praticita' d'uso e la facilita' di programmazione. Il progetto iniziale (diciamo la versione Base) avra' la possibilita' di scrivere sulla matrice cosi' costruita solo alcune frasi pre-impostate, selezionabili attraverso un Encoder ed un sistema di scelta basato su Menu' scorrevoli visualizzati su Display 1602, cioe' il classico Display a due righe e sfondo verde che viene utilizzato per molti progetti su Arduino.(quello visualizzato in foto qui sopra)
Nelle versioni successive, il progetto prevede l'inserimento della possibilita' di scrivere frasi che poi verranno visualizzate sulla matrice a Led attraverso un cellulare ed un collegamento Bluetooth.
La versione Enterprise del progetto vedra' invece la possibilita' di visualizzare frasi direttamente "dettate" a voce alla Talkin'Car, attraverso un sistema di riconoscimento vocale e traduzione STT (Speak To Text ) che si basera' su Cellulare o BeagleBone Black e collegamento ad internet disponibile.
Diciamo pure che questa parte del progetto dovro' essere coadiuvato da qualcuno che se ne intenda di programmazione molto piu' di quanto non me ne intenda io!
Il sistema potrebbe anche essere collegato ad una EasyPromo, la mia creazione che legge gli SMS e che potrebbe essere utilizzato anche su Vetrine Parlanti, attivate dal'invio di SMS ad un numero di telefono stabilito.
Chiunque voglia cimentarsi con me nello sviluppo di queste versioni del progetto e' libero di farsi avanti attraverso i riferimenti qui sul sito, sto cercando contatti per aumentare il numero e la consistenza dei progetti in essere. Partecipate numerosi!
Questa la descrizione del progetto, a breve i primi sketch per il funzionamento delle varie periferiche collegate.
a presto TecnoGeppetto

Come Flashare la rom della Beaglebone Black

Allora, per cominciare spieghiamo a cosa serve una operazione del genere.
Flashare la rom della BeagleBone Black puo' essere utile per installare in un colpo solo tutta l'immagine di un disco.
Io sto utilizzando questo metodo per aggiornare il mio sistema con quello utilizzato dal mio collega di esperimenti, Simone, in una botta sola. Cioe', partiamo con un sistema uguale, facciamo degli esperimenti ognuno per par suo sulla propria  BBB, poi quando riusciamo ad arrivare ad un risultato apprezzabile in una delle due (solitamente  la sua!!!), allora ci passiamo l'immagine totale del disco, e l'altro (solitamente io!) ricopia l'immagine pari pari, per ricominciare dallo stesso punto ed andare avanti nella sperimentazione.

Naturalmente ci vuole lo spazio disponibile sul disco sia su un sistema che  sull'altro, e per essere sicuri si puo' anche utilizzare delle chiavette esterne o la microSD gia' prevista dalla BBB.

Fatta l'immagine con il comando

sudo dd if=/dev/sda(disco da copiare) of=/dev/sdc(disco destinazione) bs=1M

e compattata con gunzip

Il cedente appoggia il file su un server ftp, in modo che possa essere prelevato direttamente dalla BBB ricevente in una fase successiva.

Si fa partire la BBB con una versione di ubuntu che gira su microSD, in modo da avere libero accesso al disco interno del sistema con un sistema operativo che gira al di fuori. Per le istruzioni su come fare una microSD che faccia boot con ubuntu segui questa guida

Fatto il boot su ubuntu, si crea il collegamento con il server ftp dove in precedenza e' stato fatto l'upload il file dell'immagine, si prende e si porta in locale facendo attenzione ad avere lo spazio disponibile sulla microSD (dai nostri esperimenti e' sufficiente una microSD da 2 GB per contenere sia il sistema operativo che l'immagine del nuovo, comunque piu' spazio c'e' meglio e', quindi anche una 4GB non guasterebbe!)
Quindi:
get nome-file-immagine

a questo punto usciamo da ftp con quit
e digitiamo questo comando per copiare pari pari il disco sul disco interno della BBB:

gunzip -c nomefile-immagine.img.gz | dd of=/dev/mmcblk1 bs=1M

Al ritorno del prompt la BBB e' flashata con la nuova immagine. Basta eseguire lo shutdown, estrarre la microSD ed il reboot per ottenere un BBB clone dell'altra.
Naturalmente se tutti i passaggi sono stati eseguiti senza problemi.
Buon divertimento
TecnoGeppetto

domenica 17 novembre 2013

RTC e Beaglebone Black


 

Beh, e' un po' che non aggiorno piu' il sito, ma  questo non significa che sono rimasto fermo senza fare nulla, anzi!
In questo periodo ho messo le mani su tanti progetti nuovi, dei quali, uno per volta, vi rendero' partecipi.
Per oggi parliamo di aggiungere la RTC alla Beaglebone.
Verso le 11,30 di oggi, come sempre durante i sabati degli ultimi mesi, ero in chat su Skype con il mio compagno di avventura Simone e stavamo procedendo sul nostro progetto piu' importante di questo periodo che utilizza la Beaglebone Black come "cervello".
Durante la stesura del progetto, ci siamo accorti che poteva verificarsi la possibilita' che, in assenza di rete,  ci fosse un reboot del sistema, che avrebbe prodotto,  senza un adeguato circuito di mantenimento dell'ora, la perdita del date-time ed il suo reset alla data di sistema (alla data cioe' di quando e' stato generato il sistema).
 Questo ovviamente non va bene e deve essere corretto.
Da qui la scelta di montare una scheda RTC sul nostro sistema per far si che l'ora e la data di sistema venga mantenuta anche a sistema spento o fuori linea.
RTC, acronimo di Real Time Clock, e' una scheda con pochissimi componenti che utilizza un semplice integrato il DS1307     che funziona come orologio di sistema, ed al quale la macchina si riferisce per mantenere l'ora di sistema aggiornata al boot.
Quindi mi sono messo a rovistare nei cassetti ed ho tirato fuori la scheda RTC che sapevo di avere, quella della foto qui sopra.
 Il primo problema da risolvere per il collegamento della RTC in questione con la Beaglebone Black e' stato in ordine ai livelli di tensione in gioco, in quanto la Beaglebone Black lavora a 3 volt mentre la RTC che ho a disposizione e' fatta per lavorare a 5 volt. Non sarebbe un problema grave di per se, in quanto i livelli alto - basso sarebbero comunque compatibili, infatti lo stato "alto" sui pin SCL e SDA viene ottenuto con un a tensione che va da 2,2 a Vcc+0,3 Volts, quindi si potrebbe provare,  se non fossero previste le resistenze di pull-up  che mantengono lo stato delle porte sempre a 5Volts, la cui costanza pregiudicherebbe il funzionamento e potrebbe anche far danni irreparabili sulla nostra Beaglebone. Quindi altra ricerca frenetica nel fondo dei cassetti per individuare delle schedine che non ho mai utilizzato, ma che so' di avere.... vediamo..... ah, eccole,  ecco due bei  convertitori di livello. Queste schede sono proprio quelle che fanno al caso mio, servono per poter utilizzare, come nel mio caso, schede che funzionano a 5Volts con altre che invece hanno 3 volts come tensione di riferimento. Proprio quello che ci vuole.
Allora, montato il circuito con i jumper da test, ecco come si presenta la mia costruzione odierna:

A questo punto non resta che vedere se funziona.
Spento scollegato dalla alimentazione la Beaglebone Black, sono passato a cablare i cavi di alimentazione delle due schede collegate, i 5v per la la RTC e i 3v3 di alimentazione della scheda convertitore di livello, il GND e' in comune ( le tensioni sono tutte disponibili sulla GPIO della Beaglebone, come riportato sullo schema qui di fianco).
I segnali SDA ed SCL invece si trovano sui piedini numero 19-SCL e 20-SDA della GPIO. Appena collegato e alimentato il tutto sono andato a vedere se la BeagleBone "vede" la RTC e se riesce a ricevere i dati di date e time corretti facendo cosi:

Il comando per "vedere" se la periferica I2C comunica correttamente col sistema e'

i2cdetect -y -r 1
Tale comando che va dato con i poteri di root, fa parte di un pacchetto chiamato i2c-tools che in Arch linux (che e' il sistema che sto utilizzando in questo momento sulla BBB ) si istalla cosi:
pacman -S i2c-tools
Questo funziona in Arch, mentre in debian potrebbe gia' essere residente o, comunque, se previsto si potra' istallare con apt-get che e' il relativo gestore di pacchetti. Ma mi sto allontanando dal discorso iniziale, e torno subito in carreggiata.
Con il comando di cui sopra si ottiene uno specchietto dove all'indirizzo 68 si dovrebbe trovare la nostra periferica. Se si verifica questa situazione, la RTC comunica regolarmente con la BBB.
 A questo punto :
hwclock --debug   e' il cmando per vedere come il sistema recepisce l'ora dalla RTC, come si puo' vedere nella foto a fianco l'ora impostata in origine e' dell'anno 2000.
a questo punto con il comando      /usr/bin/ntpdate -b -s -u pool.ntp.org si aggiorna l'ora di sistema attraverso la lettura del server NTP

E poi  con     hwclock -w -f /dev/rtc0   si ottiene la scrittura dell'ora ricevuta dal server NTP nella eprom della RTC
Richiedendo quindi la lettura dell'ora all' hardware collegato, si ottiene adesso la corretta impostazione del date-time anche nella nostra RTC.