Visualizzazione post con etichetta comunicazione seriale. Mostra tutti i post
Visualizzazione post con etichetta comunicazione seriale. Mostra tutti i post

domenica 23 luglio 2017

Orange Pi 2G IOT setup

Do po aver ricevuto la prima scheda Orange Pi Zero, mi sono deciso ad acquistare anche il modello 2G IOT che sembra una scheda fatta apposta per la gestione dei sensori e la costruzione di device linux embedded molto piccoli e potenti.
 La scheda mi e' appena arrivata ed ho dovuto iniziare subito la lotta per farle digerire la microSD del sistema operativo.

Si, sembra proprio che la Orange PI 2G IOT sia molto piu' schizzinosa della sua sorellina maggiore, la Zero, nella accettazione delle microSD dove gira il sistema operativo. Infatti la medesima SD utilizzata per per la Zero, anhce dopo aver sostituito il SO con quello regolarmente scaricato dal sito ufficiale, non intende funzionare. Il fatto pero' che inserendola nella Zero invece, funzionasse perfettamente, mi ha fatto perdere diversi pomeriggi, prima di tentare la strada della sostituzione del supporto.
Comunque, dopo aver pèrovato con ben tre schede diverse, adesso ho trovato quella che va d'accordo con la versione 2G IOT, una mmicroSD da 8 GB della Verbatim classe 10,  sembra essere di suo gradimento.
Non sono state accettate invece ne' una Kingston da 8 GB classe 10, ne' una da 8GB classe 4.
Anche nel caso della Orange PI 2G IOT la documentazione fornita dal costruttore e' completa e dettagliata e consente con facilita' (SD permettendo) di costruire un sistema funzionante in meno di 10 minuti (magari non proprio la prima volta ! )
Ho scaricato la versione Armbian del sistema operativo ottimizzato per la scheda in oggetto, ed attraverso il collegamento con convertitore seriale, ho predisposto la connessione col pc, per il primo login nel sistema, come ben spiegato nel manuale delle istruzioni fornito dal costruttore.
Si accede al sistema con utente : root   e
password : 1234
E' consigliato modificare la password al primo accesso

Queste sono le caratteristiche principali della scheda:
  • 1GHz ARM Cortex-A5 32-bit processor
  • Vivante GC860 graphics processor 
  • 256MB RAM
  • 512MB of onboard NAND storage
  • External storage is supported by a microSD slot
  • A USB 2.0 port
  • MicroUSB OTG port
  • Audio jack
  • Microphone, and optional speaker.
  • Camera connector 
  • 40-pin GPIO connector
  • Power Supply – 5V via micro USB port; optional battery

venerdì 8 luglio 2016

RS485 + FTDI232 + Arduino test di linea

Per un nuovo progetto  in questi giorni ho dovuto testare il funzionamento di una connessione RS485 attraverso un cavo lungo più di 100 metri.

Se cercate un po' in giro ci sono tanti tutorial sul funzionamento di questo metodo di trasmissione. Anche io non ho fatto altro che leggere qualche tutorial in giro e poi costruire il semplice circuito composto da 2 moduli RS485 che si parleranno a distanza attraverso il cavo.

La teoria dice che circuiti come quello riportato nello schema qui sotto possono raggiungere i 1200 metri senza problemi di decadimento della comunicazione, ma considerato che il progetto e' particolarmente importante in termini di sicurezza, e' stato fondamentale per me poter mettere sotto stress la comunicazione per poter controllare il regolare funzionamento anche sulla tratta di circa 100 metri di cui ho necessità.


Come si può vedere nello schema sia in testa che in fondo al cavo sono previsti dei carichi, che nel nostro caso sono già inseriti nel modulo che ho scelto per questo progetto.
Infatti nel modulino della LC Electronics di cui riporrto lo schema qui a fianco, ci sono già tutte le resistenze che servono per il corretto funzionamento del circuito.
Durante i test ho anche potuto sperimentare che il modulo e' anche molto sensibile alle sovratensioni, infatti prolungati periodi di sovra alimentazione anche di solo 1 volt in piu' hanno provocato la rottura del Max232 che e' l'integrato contenuto nel circuito del modulo.










Dopo aver fatto i primi test collegando un adattatore seriale USB-TTL come interfaccia tra il pc ed il modulo RS485, utilizzando un FTDI232, poi ho scelto di costruire un sistema basato su Arduino che si preoccupi di mantenere sempre viva la comunicazione e che segnali eventuali anomalie, nel caso la comunicazione non andasse a buon fine.

Il circuito e' molto semplice, dal FTDI232 prendiamo la alimentazione per il modulo collegando VCC e GND , nel caso del MASTER i due PIN  DE  ed RE devono essere collegati anch'essi a GND, mentre DI ed RO  rispettivamente a TX  ed RX della seriale.
DI -- TX   ed    RO -- RX

Per il modulo scelto per essere SLAVE (quello che trasmette l'informazione) si dovra' solamente collegare i PIN  DE ed RE a Vcc anziche' a GND

DE+RE --- GND (master), in questo modo abbiamo ottenuto un circuito che consente di trasmettere solamente in un verso l'informazione ( da Master a Slave ) che vengono definiti appunto scegliendo di mettere allo stato BASSO  DE ed RE  per il Master ed allo stato ALTO per lo Slave.
Per le prime prove va bene, ovviamente, ma per poter testare meglio in tutti e due i "sensi di marcia", per non fare lo switch degli stati a mano, ho preferito montare un circuito basato su Arduino.

Ho quindi montato il circuito che dal lato master invia un messaggio contenente un carattere (1), poi si mette in ascolto,  se riceve un carattere stabilito come ACK (7) fa lampeggiare il suo LED collegato al PIN13, altrimente ripete l'invio del messaggio.

Dal lato Slave, il modulo sta sempre in ascolto, quando riceve un messaggio stabilito (1) si mette in trasmissione, mandando un segnale convenzionale (7) per confermare l'avvenuta ricezione, e poi torna subito in ricezione per attendere il nuovo messaggio.

Prendendo l'alimentazione dei moduli RS485 direttamente da Arduino, ho lasciato fare lo switch degli stati al PIN 3  ed ho utilizzato questi due programmini per gestire la comunicazione:

**************************************

// software per lo SLAVE



void setup() {
  Serial.begin(57600);
  pinMode(3, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(3,LOW);
  digitalWrite(13,LOW);
}

void loop() {
 while (Serial.available()) {
    digitalWrite(3,LOW);
    delay(1);
    char c = Serial.read();  //gets one byte from serial buffer
    if (c == '1') {
           
     // fai quello che devi fare
    digitalWrite(3,HIGH);
    delay(10);
    Serial.print(7);
    delay(1);
    digitalWrite(3,LOW);
 
   
    }else{
   
        // fai quello che devi fare se non e' arrivato il carattere giusto
    for(int i=1 ; i=10 ; i++){
    digitalWrite(13,HIGH);
    delay(100);
    digitalWrite(13,LOW);
    delay(100);
    }
    }
  }

}

 ***********************************************************


// software per lo MASTER



void setup() {
  Serial.begin(57600);
  pinMode(3, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(3,HIGH);
  digitalWrite(13,LOW);
}

void loop() {
 // while (Serial.available()) {
 
    digitalWrite(3,HIGH);
    delay(10);
    Serial.println(1);
    delay(1);
 
      digitalWrite(3,LOW);
      delay(1);
      char c = Serial.read();  //gets one byte from serial buffer
      if (c == '7') {

        // fai quello che devi fare
   // Serial.print("sentito il ACK");
      lampeggia();
   

 
      }
   
    }

  }
void lampeggia(){
  for(int i=1 ; i<3 i="" p="">    digitalWrite(13,HIGH);
    delay(100);
    digitalWrite(13,LOW);
    delay(100);
  }
}
















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

giovedì 20 giugno 2013

Nuovi arrivi per i miei giochini

Rieccomi alle prese con un po' di tecnologia!
Oggi, finalmente, mi sono arrivati due bei pacchettini dalla Cina pieni di nuovi giocattolini tecnologici. Erano più di due mesi che li aspettavo, quindi immaginate la contentezza al rientro a casa, quando ho trovato la lieta novella.
Ho iniziato subito il pomeriggio di "giuoco" con il sistemare bene in bella mostra sulla mia scrivania, tutti i pezzetti, per poi sistemarli in ordine nelle cassettine, pronti per il successivo utilizzo. Ho ricevuto un display LCD per Arduino, gia' montato con una serie di pulsantini e la shield a misura, una serie di convertitori DC-DC down converter, che mi serviranno per alimentare i progetti con la Raspberry utilizzando un alimentatore a 12Volt (che sono piu' facili da trovare della potenza necessaria per Raspberry) e nello stesso tempo possono essere utilizzati per alimentare i progetti vari in macchina, attraverso la presa dell'accendisigari, per esempio. Poi ho ricevuto dei connettori seriali femmina DB9 che ho richiesto per ripristinare la mia dotazione, in quanto in uno degli ultimi progetti che ho concluso (si perche' qualche volta riesco anche a concludere qualcosa  ! (smile) ) ne ho utilizzati parecchi ed ero rimasto senza. Stessa cosa per una serie di LED infrarossi, poi mi sono fatto arrivare anche una scheda ethernet compatibile Arduino, che servira' per continuare un progettino che sto lentamente portando avanti che prevede l'utilizzo della rete, Twitter ed naturalemnte il prode Arduino!
Dulcis in fundo mi sono arrivate anche due schede per la conversione dei segnali paralleli a I2C/IIC/TWI, questi pezzettini li aspettavo con ansia, perche mi consentiranno di utilizzare il display LCD 1602 attraverso la linea seriale I2C di Arduino, anziche' il collegamento tradizionale che comporta l utilizzo di un maggior numero di piedini.
Nel prossimo post che sto preparando vi segnalero' una serie di punti di attenzione da rispettare per l'utilizzo della scheda in questione.
Stay Tuned
TecnoGeppetto
anche su www.Tognozzi.net

lunedì 6 febbraio 2012

Esperienze con due servo motore

Posto oggi le primissime esperienze con i servo motori e la splendida scheda Arduino.
Ho cannibalizzato un vecchio robot della De Agostini che ho costruito qualche anno fa (credo fosse il 2002-2003) dal quale ho ricavato due bei motori servo della parallax, ho seguito il tutorial sul sito di riferimento di Arduino ed ho iniziato a fare le prime esperienze.

In progetto c'e' da costruire uno stabilizzatore di macchina, da applicare ad

una fotocamera per mantenere in asse la camera durante delle riprese con l'operatore in movimento, l'idea di base e' quella di utilizzare il sensore nunchuck della wii e due o tre servomotori.
Vedremo dove portano questi primi test.


Di seguito lo Scketch che ho utilizzato per comandare i due servo motori con i potenziometri
// Controlling a servo position using a potentiometer (variable resistor)
// by Jam ++++ servo senza fermo,

#include Servo.h 

Servo myservo; // create servo object to control a servo
Servo myservo1; // create servo object to control a servo

int potpin = 0; // analog pin used to connect the potentiometer
int potpin1 = 1; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int val1; // variable to read the value from the analog pin

void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo1.attach(10);
}

void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val1 = analogRead(potpin1); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 1000, 2000); // scale it to use it with the servo (value between 1000 and 2000)
val1 = map(val1, 0, 1023, 1000, 2000); // scale it to use it with the servo (value between 1000 and 2000)

myservo.writeMicroseconds(val);
myservo1.writeMicroseconds(val1);
delay(15);
}