mercoledì 31 agosto 2016

The End

And in the end, the love you take

Is equal to the love you make



martedì 30 agosto 2016

Intel Galileo Gen 2

Questa Intel Galileo e' stata presa su Ebay a circa 25 euro. Di fatto e' un prodotto che non si differenzia moltissimo da Intel Edison

Attenzione: la Galileo Gen 2 si differenzia dalla  Gen 1 per l'assenza del jack da 3.5 mm della porta seriale a fianco della porta Ethernet

In questo caso si tratta di un processore Quark x86  32 bit a 400 MHz di classe Pentium contro Atom di Edison, una scheda di rete cablata al posto della WiFi di Edison, 256 Mb di memoria flash contro gli 8 Gb di Edison



Ne vale la pena???
Per quanto l'ho pagata io decisamente si' ma il prezzo del componente nuovo varia tra gli 80 e 100 euro ed a questo punto la decisione vira decisamente per Intel Edison

La scheda viene venduta con il proprio alimentatore (e questo comincia ad essere un bel risparmio) ed al contrario di Edison non ha una porta di programmazione micro USB


Per entrare in consolle si deve connettere il cavo FTDI al connettore tra l'Ethernet e microUsb client. Il pin GND e' quello nero posto all'estrema sinistra della foto mentre le posizioni Rx e Tx occupano le posizioni 2 e 3 partendo da destra (il primo pin e' CTS)

La configurazione dei pin e' quindi

GND
RTS
vuoto
RX
TX
CTS

per entrare in shell l'account di default e' root senza password

La porta microUSB client e' usata solo per la programmazione degli sketch da Arduino IDE mentre la porta USB Host puo' alloggiare tastiera, mouse ed altri dispositivi
E' presente un lettore di carte microSD (fino a 32 Gb) ed un connettore per la LiPo in posizione simile a quello di Edison
E' possibile selezionare il voltaggio della parte Arduino a 3.3V e 5V con un apposito jumper al di sotto del connettore seriale ed inoltre nella parte inferiore c'e' l'ingresso per una scheda mini Pci Express (tipicamente per montare una schedina WiFi full length)

Esiste anche la comoda possibilita' di montare un modulo per l'alimentazione via POE

Importante : la scheda Ethernet di default non e' configurata (nemmeno via DHCP), si deve quindi alla prima accesione configurare il tutto via FTDI, assicurarsi il collegamento di rete e solo successivamente passare ad SSH







giovedì 25 agosto 2016

PTZ con servo SG90

Mi sono preso una basetta PTZ motorizzato con due micro servo SG90 dal solito ecommerce cinese (su Amazon Italia costava tre volte di piu' ed era lo stesso modello)


Il kit arriva nei pezzi sotto indicati ma senza istruzioni. Ma il problema non e' questo ... gli accessori dei servo non si adattano alla basetta nera.


Il primo passo e' quello di prendere la basetta superiore ed incatrare un GY90 nei due fermi. Si deve fare attenzione ad avvitare il servo il proprio rotore (in bianco) dalla parte opposta del fulcro nero


e qui inizia il primo problema....il braccetto bianco in dotazione non entra nell'apposita scanalatura.



Si deve quindi dotarsi di forbici ed adattare la lunghezza. Si avvita quindi il braccetto



si ribalta quindi il PTZ e si incastra il secondo servo nelle scanalature


e si inseriscono le viti per bloccare la base


e qui un altro problema, di nuovo il braccetto bianco non si adatta alla sede. A destra si vede il pezzo originale ed a sinistra il pezzo tagliato e gia' montato nella base


e si conclude serrando l'ultima vite al di sotto della base


Arduino 101 Cannot Open DFU device 8087:0aba

Primo problema con Arduino 101...come caricare uno sketch??
Su Centos 7 ed IDE 1.6.8 al momento di caricare il programma veniva generato l'errore 
Cannot Open DFU device 8087:0aba



Frugando sul forum di Arduino e' saltato fuori questo post
In pratica si deve lanciare lo script create_dfu_udev_rule per modificare udev

nel mio caso il path del comando e' differente
/home/linnocenti/.arduino15/packages/Intel/tools/arduino101load/1.6.9+1.24/scripts/create_dfu_udev_rule

Phase Laser Ranging Module CY30-MB

Prima cosa: se viene acquistato da Aliexpress arriva senza nessun tipo di documentazione sia sulla parte hardware che sulla parte software... considerando il costo non e' proprio una bella notizia. Peraltro e' presente un flat cable a 8 poli da 0.5 mm con un clamshell sul dispositivo ma non sulla basetta verde su cui inserire i connettori


Comunque contattando separatamente il venditore si scopra che oltre alla pedinatura sul flat cable esistono 4 piazzole su cui saldare direttamente i contatti (Vcc, GND, TX ed RX). Attenzione: 3.3V massimo




Per veder meglio le connessioni

Ho fatto notare al customer care che non esiste un pin quadrato dove connettere il GND. La risposta e' la seguente



Il modulo che ho preso ha una portata di 40 m ed i dati di errori dichiarati indicano una standard deviation di 2 mm a 10 m e 3.5 mm a 40 m (secondo la regola ± 2 + 0.05 * (D-10) dove D e' la distanza. La dimesione del punto di misura e' di 6 mm di diametro a 10 m

La connessione quindi e' una standard seriale a 115200 8N1.

Per effettuare le misure si inviano dei codici al sensore

Instruction List
instruction content
Content
Answer
Memo
Start single measurement
$00022123&
ok(Confirm)
Measurement data after confirm
Lights
$0003260130&
Confirm + repeat command

Open the continuous measurement
$00022426&
ok(Confirm)

Stop continuous measurement
$0003260029&
Confirm + repeat command

Instruction confirmation
$00023335&
This is the confirmation instruction from the submachine

Last 7 bits
0001643
No signal

Last 7 bits
0001542
The distance is too close

Closed continuous measurement
$00022123&
Confirm + repeat command

Turn off the laser
$00022123&
ok(Confirm)
The module does not have a sleep mode,if need to close the laser, use a single instruction
nella documentazione viene usato in termine improprio la parola bits. Sarebbe meglio sostituire con "posizione"

Misura singola
In modalita' singola misura il sensore rimanda indietro il codice $00023335& seguito da altre informazioni


$00023335&$0006210000008916& 0.08916 M

in questo caso 008916 indicano 0 decametri, 0 metri, 8 decimetri, 9 centimetri, 1 milllimetro

i dati in blu indicano il codice di risposta di conferma di esecuzione
i dati in verde indicano la distanza con le prime due posizioni che indicano la parte intera e le ultime 5 indicano la parte decimale (misure in metri)

altrimenti vengono generati questi codici di errore


Error code
Reason
Error Response Time
$00023335&$0006210000001542&
Distance too short
About 5 seconds from sending instructions to returning an error code
$00023335&$0006210000001643&
No echo
About 5 seconds from sending instructions to returning an error code
$00023335&$0006210000001744&
reflection is too strong
About 5 seconds from sending instructions to returning an error code
$00023335&$0006210000001845&
ambient light is too strong
About 5 seconds from sending instructions to returning an error code

Modo continuo
In questa modalita' ogni 5 misure il laser viene spento e riacceso. Vengono effettuate sessioni da 500 misure
Per attivare il modo continuo si invia $00022426& e riceve risposte che iniziano con $001624.
Nella risposta si ha il numero progressivo di misura, il valore massimo e minimo ed istantaneo della distanza del bersaglio. I separatori 000 indicano misura corretta, altrimenti errore


i codici di errore per il modo continuo sono

Error code
Reason
Error Response Time
Illustrate
$001624999900000015000
000000000000053&
Distance too short
About 5 seconds from sending instructions to returning an error code
If an error occurs in the continuous measurement, the measurement will be stopped, the number counter (data 7th to 10th Bit) automatically set to 9999, start a new easurement will start at 1
$001624999900000016000
000000000000054&
No echo
About 5 seconds from sending instructions to returning an error code

$001624000100118297001
182970011829711&
Ranging error
About 5 seconds from sending instructions to returning an error code
Distance data invalid


Per l'uso in esterno si devono usare riflettori

mercoledì 24 agosto 2016

Distanziometro VL6180X

In un precedente post avevo cercato di usare un sensore ultrasonico per misurare una distanza con una approssimazione di 1 mm ma senza grandi risultati

Ho quindi provato il sensore VL6180X della ST montato da Pololu su un breakout, un sistema che e' sostanzialmente un piccolo lidar ad infrarossi molto piccolo ed economico (circa 10 euro) con connessione I2C che calcola il tempo di ritorno di un impulso luminoso. Il sensore ha un raggio di azione massimo di 20 cm ma funziona al meglio entro i 10 cm


Per interfacciarsi con Arduino si puo' usare la comoda libreria

Effettuando 1000 misure e mediando il dato e spostando il bersaglio di circa 1mm (non ho la possibilita' di verificare che gli spostamenti siano effettivamente di 1mm, sono piuttosto interessato a vedere il valore della standard deviation)

Nella seconda riga c'e' un errore sul valore della misura. il valore di St.Dev e' corretto

come si deve il valore della StDev e' circa la meta' di quella ottenuta con il sensore ultrasonico SR-04. Da varie esperienze si puo' dire che un valore di riferimento sulla standard deviation e' di 1.3 mm

Il vantaggio rispetto al SR-04 e' che si tratta di una misura sostanzialmente assoluta perche' e' indipendente dalla riflettanza del bersaglio e non risente dell'illuminazione ambientale perche' ha un altro sensore per la correzione

Di seguito lo sketch utilizzato
-------------------------------------------------------------------
#include <Wire.h>
#include <VL6180X.h>
#include "Statistic.h"


VL6180X sensor;
Statistic myStats;


void setup()
{
  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.configureDefault();
  sensor.setTimeout(500);

  myStats.clear();
}

void loop()
{
  for (int t=0;t<1000;t++)
    {
    if (!sensor.timeoutOccurred())
          {
            myStats.add(sensor.readRangeSingleMillimeters());
            }
    }
   
    Serial.print("  Count: ");
    Serial.println(myStats.count());
    Serial.print("  Min: ");
    Serial.println(myStats.minimum(),4);
    Serial.print("  Max: ");
    Serial.println(myStats.maximum(),4);
    Serial.print("  Average: ");
    Serial.println(myStats.average(), 4);
    // uncomment in Statistic.h file to use stdev
    #ifdef STAT_USE_STDEV
    Serial.print("  pop stdev: ");
    Serial.println(myStats.pop_stdev(), 4);
    Serial.print("  unbias stdev: ");
    Serial.println(myStats.unbiased_stdev(), 4);
    #endif
    Serial.println("=====================================");
    myStats.clear();
    delay(10000);
}

Bluetooth non e' BluetoothLE

Ho dovuto imparare (letteralmente a mie spese) una lezione ovvero che, nonostante il mio nome simile, Bluetooth 2.0 e BluetoothLe (o Bluetooth 4.0) non sono la stessa cosa e non hanno compatibilita' diretta


Il problema deriva dal fatto che volevo convertire un progetto Arduino Bluetooth standard realizzato con un modulo HC-05 in qualcosa di piu' tascabile ed integrato e mi sono comprato una scheda Blend Micro ed una Genuino 101 (la prima come hardware definitivo, la seconda come piattaforma di prova)

Solo dopo ho scoperto che BT 2.0 non e' compatibile nemmeno a livello hardware con BT 4.0...di fatto i telefoni che hanno il doppio protocollo utilizzano di fatto due sistemi radio distinti ed il chip Nordic nRF8001 permette solo BTLe...in pratica dei soldi buttati ...almeno per questo progetto


martedì 23 agosto 2016

Game Boy Advance

Ho trovato ad un mercatino (per 10 euro) un Game Boy Advance, una consolle da gioco della Nintendo in produzione dal 2000 al 2008.



Nel prezzo era compreso una docking station con un pacco di batterie ricaricabili, un modulo per alimentare la consolle da corrente di rete, uno strano attrezzo per avere i cheat di alcuni giochi ed un gioco per Game Boy Bugs Bunny e Lola Bunny (il GB Advance riesce ad avere una compatibilita' hardware con il modello precedente Game Boy perche' monta un processore aggiuntivo Z80 solo per l'emulazione)


Non avevo mai preso in mano un GBA ed ho faticato un po' a capire che per accenderlo c'e' un pulsante fisico sul lato verso il giocatore. La cosa piu' strana dell'attrezzo e' che lo schermo non e' retroilluminato quindi e' praticamente impossibile vedere lo schermo se si trova il giusto angolo di riflessione della luce ambientale...molto scomodo












OBDSim

Per sviluppare una applicazione che si interfacci con il sistema OBD (On Board Diagnostic) non e' comodissimo lavorare per strada con il portatile ed a motore acceso. La soluzione piu' semplice e' usare il simulatore gratuito OBDSim



Ho provato a compilarlo ed eseguirlo su Linux...la compilazione e' terminata correttamente ma non sono riuscito a creare la seriale virtuale Bluetooth per collegare i dati con Torque (una applicazione Androird per visualizzare i dati provenienti da ODB) forse a causa di SELINUX (ero su Centos e devo ammettere che litigo ancora abbastanza con  SELINUX)

Su Windows 10 e Surface le cose sono andate decisamente meglio.
Per prima cosa si deve effettuare l'accoppiamento tra il telefono ed il computer e si crea una seriale virtuale (Impostazioni/Dispositivi/Bluetooth/Altre Opzioni Bluetooth/Porte COM/Aggiungi)

Si scarica il pacchetto gia' compilato e si lancia il comando

obdsim.exe -w COM4 -g gui_fltk

a questo punto spostando le lancette sull'interfaccia del computer si vede che anche Torque esegue la medesima modifica




lunedì 22 agosto 2016

Tempesta di fulmini su Emilia-Romagna

Ieri sera guardando in direzione Est, Nord Est era visibile una vera tempesta di fulmini con eventi a frequenza di circa 1 secondo


Mi stavo preparando ad una notte agitata perche' pensavo che il temporale fosse nell'area Barberino del Mugello-Scarperia ma con mia grande sorpresa il sito blitzortung mi ha mostrato che gli eventi erano tutti oltre la catena appenninica a circa 60 Km di distanza (in effetti non si udivano tuoni)



ed una animazione (ipnotica) che rende l'idea della frequenza degli eventi








Fake ADXL345

Mi sono interessato agli accelerometri ADXL345 (dopo un po' di esperienza con ADXL335) per la caratteristica di poter generare interrupt e quindi di poter usare il segnale come trigger per svegliare una Arduino in modalita' sleep.



Per risparmiare (un bel po') mi sono preso dei moduli su Aliexpress 
Usando la libreria ADXL345 di Adafruit i risultati sono i seguenti

------------------------------------
Sensor:       ADXL345
Driver Ver:   1
Unique ID:    12345
Max Value:    -156.91 m/s^2
Min Value:    156.91 m/s^2
Resolution:   0.04 m/s^2
------------------------------------

Data Rate:    100  Hz
Range:         +/- 16  g

X: -3.53  Y: 0.51  Z: 16.08  m/s^2
X: -3.53  Y: 0.51  Z: 16.16  m/s^2
X: -3.53  Y: 0.47  Z: 16.16  m/s^2
X: -3.53  Y: 0.51  Z: 16.12  m/s^2
---------------------------------------
Ovviamente c'e' qualcosa che non torna

Utilizzando lo script a questo link per visualizzare i dati raw si ha per

Z=g     X=-12;Y=-1;Z=51 (X=0g,Y=0g)
Z=-g   X=-11;Y=-5;Z=-17  (X=0g,Y=0g)

Y=g    X=-13; Y=-35; Z=23 (X=0g,Z=0g)
Y=-g  X=-12; Y=31;  Z=21 (X=0g,Z=0g)

X=g    X=-46;  Y= -2;  Z=16 (Z=0g,Y=0g)
X=-g  X=21;     Y=-3;  Z=17 (Z=0g,Y=0g)

Quindi
X varia da -46 a +21 con un valore centrale di 12
Y varia da -35 a +31 con un valore centrale circa -3
Z varia da -17 a +51 con un valore centrale di  circa 17

ci sono un paio di problemi
il primo e' chiaramente che ogni misura ha un offset sensibilmente fuori dallo zero sui tre assi e ciascuno con una propria retta di calibrazione (questo puo' essere corretto con il calcolo)
 Il secondo problema e' che i valori riportati hanno una dinamica troppo limitata (dovrebbero essere dell'ordine del centinaio di unita', non della decina) con un fondo scala a +/- 16g. Cio' comporta che il valore di conversione da digital number ad accelerazione e' completamente sbagliato (dovrebbe essere 1DN = 0.004g)

Come riportato anche da questo post, sono segnalati dei moduli ADXL345 su ecommerce cinesi che sono semplicemente dei falsi e lontani dalle prestazioni del componente originale BOSCH

giovedì 18 agosto 2016

BME280

Il BME280 e' un sensore barometrico/umidita'/pressione della BOSCH che ho comprato su Aliexpress (per risparmiare sulla versione di Adafruit ...che diciamo e' un po' piu' completa per il tipo di connessioni ..dubito che il mio sia la versione Bosch originale)

Il dispositivo ha una connessione a due cavi SDA/SCL I2C. Usando la libreria di Adafruit in qualunque modo la settassi non riuscivo ad avere la connessione. Pensando che il componente fosse rotto ho provato ad usare lo sketch I2C Scanner che ha immediatamente riconosciuto il BME280 all'indirizzo 0x76. (la versione Adafruit permette di scegliere l'indirizzo)




Frugando su Internet ho trovato una libreria alternativa ad Adafruit che ha funzionato al primo avvio.Dopo un paio di mesi che tenevo sul componente sul tavolo cercando una soluzione adesso e' finalmente usabile

--------------------------------------------
/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor
  Designed specifically to work with the BME280 Breakout board
  ----> http://www.adafruit.com/products/2650
  This sketch only supports the I2C bus for connection.
 ***************************************************************************/

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"

// Create the BME280 object
//BME280_I2C bme;              // I2C using default 0x77
BME280_I2C bme(0x76);  // I2C using address 0x76

void setup() {
  Serial.begin(9600);
  Serial.println("Bosch BME280 Barometric Pressure - Humidity - Temp Sensor | cactus.io");

  if (!bme.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  bme.setTempCal(-1);

  Serial.println("Pressure\tHumdity\t\tTemp\t\tTemp");

}

void loop() {

    bme.readSensor();

    Serial.print(bme.getPressure_MB()); Serial.print("\t\t");    // Pressure in millibars
    Serial.print(bme.getHumidity()); Serial.print("\t\t");
    Serial.print(bme.getTemperature_C()); Serial.print(" *C\t");
    Serial.print(bme.getTemperature_F()); Serial.println(" *F\t");

    // add a 2 second delay to slow down the output
    delay(2000);
}

mercoledì 17 agosto 2016

Texas Instruments SR-51A

Aggiornamento
--------------------------------------------------------------
La calcolatrice e' viva e funziona correttamente alimentata con un trasformatore impostato con 4.5 V e polarita' + al centro
Grazie all'aiuto di Joerg Woerner di datamath.org e ad un tester si vede che la presenza di diodo genera un calo della tensione di 0.7 V per arrivare a circa 3.7 V della tensione del pacco batterie originale



L'aspetto curioso e' che per il calcolo delle funzioni trigonometriche si nota un ritardo rispetto alle calcolatrici moderne




--------------------------------------------------------------
Quando ho visto ad un mercatino questa SR-51A a 5 euro su un banco non ho potuto esimermi dal comprarla (anche perche' era presente la custodia originale)
Da una ricerca la SR-51A e' stata introdotta nel 1975 (!!) e la mia sembra essere uno dei primi modelli perche' monta due chip SCOM uno sopra l'altro (per riferimento vedi qui)





Sulla sinistra i due chip TMC0523 sovrapposti

Ho chiesto al negoziante se era ancora funzionante e sapevo gia' da prima della sua risposta "basta cambiare le batterie" che era una bugia ma non sapevo fino a che punto.



A posteriori ho scoperto che questa calcolatrice ha (aveva) un sistema di batterie ricaricabili che erano ricaricate da un alimentatore esterno (non presente)
Il precedente proprietario aveva fatto un tentativo di recuperarla con abbondante nastro adesivo ma le batterie originali sono completamente ossidate e scuotendo la custodia sono usciti 5 pezzi di lamierino, ovvero i vecchi contatti
Su Internet ho trovato le istruzioni per la riparazione ma non so se avro' mai il tempo per provare
Fra le altre cose il mio pacco batterie sembra proprio essere quello originale

Pacco orginale http://www.datamath.org/JPEG_BP_Repair.htm#BP1A
Con mia grande sorpresa e' anche disponibile anche il PDF del manuale originale

USB Dead Drops

...come al solito arrivo in ritardo sulle cose interessanti

USB Dead Drop e' un progetto per creare una rete di scambio file anonimo ed offline creato lasciando delle chiavette USB cementate all'interno di muri di citta' di tutto il mondo. Si trova l'Usb Key, ci si collega con una prolunga USB e si copia o si scarica il contenuto a piacere

Il termine Dead Drop deriva da un termine spionistico in cui lo scambio di un messaggio tra un mittente ed un ricevente avviene senza la presenza fisica contemporanea delle due persone, tipicamente su una casella postale anonima

Incuriosito dalla cosa ho scoperto che in Italia non ci sono moltissime USB DeadDrop ma con la mia fortuna ne ho trovata una a meno di 1 Km. Il contenuto dichiarato non era particolarmente interessante e la data di installazione, vecchia di piu' di 5 anni non deponeva al successo




Comunque ho provato a rintracciare la chiave. Qui il primo problema. La numerazione civica a Firenze e' divisa tra numeri neri (civici normali) e rossi (normalmente attivita' commerciali). La chiave USB era dichiarata al numero 7 ma non era specificato che era 7Rosso


Trovato il punto esatto la chiave USB non era presente (anche perche' ho scoperto che non era murata ma facilmente removibile). Comunque da questa cosa ho scoperto il progetto PirateBox, una versione evoluta di DeadDrop


martedì 16 agosto 2016

Simboli su Rele'

Un piccolo promemoria (piu' che altro per mia memoria)
Un rele' ha almeno tre contatti : un Comune, un NA contatto normalmente aperto cioe' in assenza di eccitazione del rele' disconnesso dal rele' ed un NC contatto normalmente chiuso cioe' in connessione con il Comune in assenza di eccitazione.






domenica 14 agosto 2016

IP Statico Ethernt per Intel Edison

Lo scenario e' quello di dover impostare una Intel Edison con Yocto su una rete con DHCP ma impostata con un IP Fisso

Per prima cosa, visto che il DHCP ha la priorita' sulle impostazioni statiche, si deve evitare di interrogare il DHCP Server editando il file /etc/systemd/network/enp0.network

-----------------------------------
[Match]
Name=enp0*
[Network]
DHCP=no
------------------------------------

subito dopo si puo' configure la scheda mediante Connection Manager
-----------------------------------------------------------------
#!/bin/sh
systemctl start connman
connmanctl enable ethernet
connmanctl disable wifi
-----------------------------------------------------------------

a questo punto con
connmanctl services si ottiene il nome della rete cablata- Il nome e' qualcosa del tipo
ethernet_MAC_ADDRESS_cable

a questo punto si continua con la configurazione

-----------------------------------------------------------------
connmanctl config ethernet_001f5bff272e_cable --ipv4 manual 192.168.1.200 255.255.255.0 192.168.1.1
connmanctl config ethernet_001f5bff272e_cable --nameservers 8.8.8.8
connmanctl config ethernet_001f5bff272e_cable --timeservers 193.204.114.232
-----------------------------------------------------------------

per vedere se la configurazioni sono andate a buon fine si puo' digitare ip a oppure editare il file /var/lib/connman/ethernet_001f5bff272e_cable# 

[ethernet_001f5bff272e_cable]
Name=Wired
AutoConnect=true
Modified=2016-08-13T13:41:18.789456Z
IPv4.method=manual
IPv4.DHCP.LastAddress=192.168.1.200
IPv6.method=auto
IPv6.privacy=disabled
IPv4.netmask_prefixlen=24
IPv4.local_address=192.168.1.200
IPv4.gateway=192.168.1.1
Nameservers=8.8.8.8;
Timeservers=193.204.114.232;   


giovedì 11 agosto 2016

C.H.I.P

ATTENZIONE: il segnale composito standard di CHIP e' NTSC. Si devono quindi usare televisori/monitor che supportino la doppia codifica o deve essere impostata manualmente la codifica PAL in UBoot (e' quindi necessario armarsi un cavo TTL-USB per connettersi alla porta seriale in fase di boot)
i pin Tx ed Rx sono vicini a GND sulla fila interna vicino alla porta microUsb (tra GND e FEL per essere piu' precisi

screen /dev/ttyUSB0 115220

quando si vedono i messaggi di Uboot si deve premre un tasto (non della tastiera attaccata al CHIP ma sulla consolle seriale) e si digitano i comandi

setenv video-mode sunxi:720x576-24@50,monitor=composite-pal,overscan_x=40,overscan_y=20
savenv
reset------------------------------------------------------------------------------------

E' passato un po' di tempo (circa 1 mese) da quando ho ricevuto per posta il mio primo tentativo di pledge su Kickstarter ovvero C.H.I.P. un microcomputer con 512 Mb di Ram, 4 Giga di storage, un processore da 1 Giga e la possibilita' di avere uscita video in HDMI, VGA o composito (non c'e' Ethernet ma solo Wifi integrato)


La prima cosa da fare per poter usare il modulo VGA e' quello di flashare il firmware con la versione 4.4 GUI che crea un desktop Debian.... e qui sono entrato nei guai

Per entrare in modalita' programmazione del firmware si deve cortocircuitare i pin GND e FEL (si trovano sulla fila interna del connettore vicino alla microUsb) per entrare in fastboot mode e subito dopo connettere la corrente



Per la riprogrammazione si deve usare necessariamente Chrome almeno alla versione 49 perche' il tutto avviene tramite un plugin del browser

Non e' proprio intuitivo ma qui si deve premere Start Flashing. Per comodita' e' meglio scarica il file immagine da qui cliccando sull'icona della nuova




Per usare il DIP Vga e' necessario utilizzare la versione del firmware 4.4 ma dopo un bel po' di tentativi su diversi sistemi operativi, con diversi cavi, con diversi alimentatori CHIP non dava segni di vita ne' su VGA ne' sul segnale composito ne' sulla porta seriale legata alla porta microsub

Giusto per provare ho montato la versione GUI 4.3 e finalmente sono riuscito a far partire il sistema, anche se solo con la qualita' del segnale composito



Se si connette il cavo USB con una Linux Box, nel mio caso una Centos, apparira' una porta seriale virtuale (nel mio caso /dev/ttyACM0) da cui si accede ad una shell
di default le credenziali sono

user : root
password : chip

Da qui in poi il sistema si comporta come una Debian quindi c'e' poco da dire..peraltro non avendo il DIP VGA montato rimangono scoperti i connettori GPIO per le prove

Il consumo del dispositivo ha un picco di 580 mA in boot ed un consumo di 200 mA in idle (questo ultimo valore differisce di molto da quelli di fabbrica che riporta valori piu' bassi di oltre la meta')

PS ho aperto un ticket vero l'assistenza di NextThing Co per vedere se riesco a far funzionare la VGA
(aggiornamento...il problema non e' il DIP ma il fatto che con il sistema 4.4 semplicemente il sistema non fa il boot.)

CHIP e' un po' esosa di corrente...quando l'alimentazione e' scarsa semplicemente si spenge. In generale il picco di consumo senza il DIP VGA e' di circa 300 mA con un valore di idle di 170 mA





mercoledì 10 agosto 2016

ELM 327

Ho avuto modo di provare ELM327, un dispositivo WiFI o Bluetooth, che si collega CAN Bus delle automobili per avere informazioni in tempo reale sul funzionamento del motore

Versione Bluetooth e WiFi

La presa del sistema ODB (diagnostica di bordo) e' presente in tutte le macchine moderne (post 2000) e si trova in posizioni differenti. Nella Fiat Qubo si trova sotto al volante a sinistra nel quadro fusibili dopo avere rimosso un ampio coperchio

La presa OBD e' quella di colore giallo posta in verticale

Per raccogliere i dati esistono numerosi programmi per praticamente tutti i sistemi operativi, compresi smartphone. Sul CD in dotazione sono presenti diversi programmi fra cui Torque Pro per Android (che e' un programma a pagamento su Play Store)



Dovendo sviluppare una applicazione per interfacciare OBD ho pero' necessita' di capire come funziona nel dettaglio il dispositivo. Alcune interessanti informazioni si possono trovare a questo link

ELM327 in versione WiFi si presenta come un Access Point senza password e senza criptazione con DHCP. L'IP di default dell'ELM327 e' 192.168.0.10 e non e' possibile modificare (in modo semplice) l'SSID

ATTENZIONE: questa configurazione crea un paio di problemi

  • se ci sono macchine vicine tutte con ELM327 ci sara' confusione perche' tutte si dichiarano con lo stesso SSID
  • il telefono si collega all'access point dell'ELM327 e non si collega piu' ad Internet (su Android compare il segno della connessione con il punto esclamativo)

in conclusione puo' essere piu' comodo usare un modulo Bluetooth anche se il punto 1 non e' totalmente superato (diciamo che il raggio d'azione di BT e' inferiore a WiFi e cio' aiuta a non confondere le connessioni)

Effettuando una scansione con nmap si ottiene
-------------------------------------------------------------------------------
[root@localhost linnocenti]# nmap -sS 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:09 CEST
Nmap scan report for 192.168.0.10
Host is up (0.012s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 23.68 seconds


Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:18 CEST
Nmap scan report for 192.168.0.10
Host is up (0.0022s latency).
PORT      STATE SERVICE
35000/tcp open  unknown
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

[root@localhost linnocenti]# nmap -sU 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:20 CEST
Nmap scan report for 192.168.0.10
Host is up (0.0015s latency).
Not shown: 998 closed ports
PORT      STATE         SERVICE
67/udp    open|filtered dhcps
49153/udp open|filtered unknown
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 65.55 seconds

[root@localhost linnocenti]# nmap -sO 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:22 CEST
Nmap scan report for 192.168.0.10
Host is up (0.053s latency).
Not shown: 253 closed protocols
PROTOCOL STATE SERVICE
1        open  icmp
6        open  tcp
17       open  udp
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 18.47 seconds
-----------------------------------------------------
Il sistema si presenta come una ASIX Electronics (in particolare e' un AX220XX, un dispositivo che fa da ponte tra una RS232, ovvero il sistema ODB, ed il WiFi

Sul UDP sono aperti i servizi DHCP ed un servizio sconosciuto su porta 49153 (questa porta sembra che sia necessaria per connettere l'interfaccia AX200 RS3232-to-WiFi al vero e proprio modulo WiFi  in ascolto su 25125/TCP...non e' possibile programmare il modulo WiFi se non dissaldondolo e connettendosi in seriale TTL con la caratteristica modalita' Null Modem..quindi con collegamento Tx-Tx, Rx-Rx vedi questo documento a pagina 8)

Su TCP viene scoperto un servizio HTTP su porta 80. Connettendosi si ottiene in riposta una pagina index..html vuota
Il dispositivo risponde anche al Ping

Non viene mostrata (e non ne capisco il motivo la porta 35000/TCP) che e' quella dove effettivamente e' presente il server che fornisce i dati

si puo' telnettare su porta 35000 e mediante comandi AT si possono ottenere le informazioni desiderate
per semplicita' ho provato ad interrogare il numero di giri motore che si ottengono inviando il comando 010C

(anche in questo caso niente password...meno male che con OBD non si possono modificare i parametri del motore .....)
-----------------------------------------------------
[root@localhost linnocenti]# telnet 192.168.0.10 35000
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
>010c
>10C13F0
-----------------------------------------------------
La risposta non e' quella attesa (vedi questo link), mi sa qualche casino sulla codifica dei caratteri,  che doveva essere qualcosa del tipo

>010C
SEARCHING: OK
41 0C 0F A0
in ogni caso si puo' pensare che gli rpm siano 13F0 che tradotti indicano in decimale 5104 questo numero deve essere diviso per 4 per un valore di 1276 rpm
a motore spento il numero di giri e' ovviamento 0

>10C0000

Per Bluetooth il discorso e' piu' o meno il solito. Ci si connette con il servizio della seriale virtuale Bluetooth con il pin 1234 con baud rate 38400 8N1
un po' piu' nel dettaglio..per prima cosa ho dovuto sbloccare il soft block sul bluetooth della Linux Box

[root@localhost linnocenti]# rfkill list
0: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no

[root@localhost linnocenti]# rfkill unblock 3
[root@localhost linnocenti]# rfkill list
0: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no

a questo punto si scansiona per cercare l'ELM 327
hcitool scan
Scanning ...
00:1D:A5:68:98:8C OBDII

avendo l'ID BT si puo' interrogare il dispositivo per vedere che servizi espone

sdptool browse  00:1D:A5:68:98:8C

Browsing 00:1D:A5:68:98:8C ...
Service Name: SPP
Service RecHandle: 0x10001
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1

viene mostrata la porta seriale virtuale BT che e' quella su cui passano i dati RFCOMM

ATTENZIONE : il dispositivo non si spenge quando viene tolto il collegamento dalla chiave della macchina e quindi viene consumata la batteria anche a macchina ferma.