Archivi categoria: Elettronica

Esp8266 – Note!

Sono ancora al lavoro per cercare di ripristinare la stazione meteo. In questi mesi purtroppo non ho molto tempo da dedicare a questa attività, pertanto il lavoro è mostruosamente lento.

Ho montato un primo prototipo sul circuito stampato e mi sono accorto di avere omesso alcuni componenti. Nel tentativo di “metterci una pezza” ho bruciato il convertitore AD ed ho quindi deciso di ripartire da capo. Il sistema è fuori dalla scatola e, come prima cosa, lo voglio verificare completamente sul banco.

Cosa ho notato/imparato in questo periodo:

  • I test effettuati su un circuito montato su uno stampato e dentro una scatola, rischiano di essere irripetibili, devastanti ed inutili. Meglio smontare tutto e lavorare sul banco. Per fare delle prove ho messo 5V sulla linea I2C. ESP8266 non ha gradito, incenerendosi.
  • quando un MCP3424A si rompe, gli ingressi è facile che vadano a bassa impedenza. Si nota con un voltmetro che la caduta ai capi del partitore di ingresso è maggiore di quella che dovrebbe essere. Questo può accadere se il convertitore è stato alimentato una tensione eccessiva, se ha ricevuto 5V sulla I2C o una tensione eccessiva su un canale.
  • Non fidarsi dei connettori maschio/femmina a passo 2.54 (quelli che vengono usati comunemente sulle raspberry o arduino). Ho perso un paio di ore di tempo con un connettore che cessava di funzionare non appena veniva inserito il maschio al suo interno.  Provato con il tester era tutto ok, inserito il maschio il contatto si isolava. E’ un bel problema debuggare un simile fatto!
  • ESP8266 quanto effettua il boot parte a 74880 baud. Si può facilmente verificare con una programmino chiamato “minitermi.py” in ambiente linux. Dopo la fase di boot, passa a 115200, quindi non è possibile leggere correttamente il boot o la fase successiva.

 

adelmo@hp-ufficio:~/ESP8266_NONOS_SDK/bin$ sudo miniterm.py /dev/ttyUSB0 115200
— Miniterm on /dev/ttyUSB0 115200,8,N,1 —
— Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H —
{l␀$��|␀�#␂�o␌␄␌�␌$�␄c|����␓��|␒#�␌B��oN�␀$oN���␄b␜p��l{l{lp�o�␐␂␌␄�␌d␌␄␌␄␌␄c␄o�|␂l␄l��p␄��oN�␂l��␀$`␂�␓␒no␌$`␂␎␂n{���n␄␌��$`␂p�n�␐␃␄␌r�����␌␌␄␌#␌N�|␂쏞��p␄��oN�␂␌␄l ␂�␛␒oN␌$`␂␎␂nr�ےo␄␌␃�l ␃p�o�␐␂␌␄{�ܜ���d␌␄b␄o�|␃$�ی␜p␌��Nn�␂␌␌d`␃�␛␒oN␄l ␂␏␂or����␂␌␄�$l ␃␏r���␂␌␄�$l ␃{l��o܄�No����{␒non�␌l�brrd␀␌�␒�$�␒ے��␄␌␄␌␄�␌␄��$l$␡{l␀␌�␛�l$dn��␃␄␌␄␌␌␄�␄␌���l␎$␀␄�␒�$��o�␂n��o~␛␂��ll�b␌␌dlp”�␂b{���$`o$����$`#$`␂l���␂␃␄�␡␂���nd�|␒#␒␌␀␂l␄␌␄l ␃{ldon’t use rtc mem data
{l��s�
Ai-Thinker Technology Co. Ltd.

ready

 

Esp8266 – No WiFi Connection

Dopo l’allagamento della mia stazione meteo, ho deciso di riprogettare tutto il sistema. Ho quindi realizzato un circuito stampato in modo da abbandonare per sempre la realizzazione filata su mille-fori. Il PCB lo ho disegnato con Eagle e realizzato presso Millennium Dataware, come sempre. Ho dovuto correggere qualche piccolo errore derivante dalla poca attenzione e massima fretta nello sbroglio delle piste, ma tutto ha funzionato bene. Almeno dal punto di vista elettrico.

Nel momento in cui sono andato a ricaricare il firmware sulla scheda mi aspettavo un funzionamento “alla prima botta”. Invece il dispositivo si è bloccato nella fase di connessione all’access point, restituendo codice di errore “6” da WiFi.Status(). In pratica: nessuna connessione. Malgrado questo io sul’AP ero in grado di vedere il modulo come “autorizzato” o connesso. Per sbrigliare meglio questa matassa ho deciso di utilizzare un AP realizzato con una RouterBoard Mikrotik, in modo da potere approfittare delle funzionalità di logging.

Il codice che gestisce la connessione verso l’AP è il seguente:

Serial.println("");
Serial.println("WIFI INIT");
Serial.println("");
WiFi.macAddress(MAC_array);
for (int i = 0; i < sizeof(MAC_array); ++i){
sprintf(MAC_char,"%s%02x:",MAC_char,MAC_array[i]);
}
Serial.print("Unit Mac Address is: ");
Serial.println(MAC_char);
Serial.println("");
Serial.print("Connecting to ");

Serial.println(ssid);

// IP,DNS,GATEWAY,SUBNET
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); //Gestione della connessione ad un AP
WiFi.softAP(ssidSA, passwordSA, 1, 1); //Gestione del SoftAP e hidden SSID
WiFi.setOutputPower(0); // Impostazione della potenza di uscita

while (WiFi.status() != WL_CONNECTED) {
Serial.println(WiFi.status());
delay(1000);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

Cercando una possibile soluzione in rete mi sono imbattuto in questo post, in cui si legge:

WL_CONNECTED is only returned if the wifi interface has connected an has IP address
in DHCP mode this means you got the IP form the DHCP server. in Static mode you have set the IP yourself.

Detto fatto: ho configurato la mia MikroTik per lavorare come dhcp server e per effettuare il NAT della rete WiFi verso la rete di casa e… funziona!

Nota bene, in caso l’assegnazione dell’IP sia statica, il codice deve essere modificato in questo modo:

IPAddress host(192,168,**,**); //used for socket,mysql,mqtt 
IPAddress ip_wifi(192,168,**,**);
IPAddress dns_wifi(192,168,**,**);
IPAddress gw_wifi(192,168,**,**);
IPAddress subnet_wifi(255,255,**,**);

void setup() {
  Serial.println("");
  Serial.println("WIFI INIT");
  Serial.println("");
  //WiFi Management
  Serial.print("Connecting to ");
  Serial.println(ssid);
   
   WiFi.mode(WIFI_STA);
   WiFi.config(ip_wifi,dns_wifi,gw_wifi,subnet_wifi);  
   WiFi.begin(ssid, password);     
   WiFi.softAP(ssidSA, passwordSA, 1, 1); 
   WiFi.setOutputPower(0);        
   
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

 

GPSDO quanti grattacapi!

Qualche anno fà ho acquistato una scheda Trimble 57964-15, oscillatore quarzato associato ad un ricevitore GPS. La schedina è molto interessante dal punto di vista elettrico, minimalista e molto compatta. Ha 2 uscite: segnale sinusoidale a 10MHz e PPS.

Il vero problema di questa scheda è farla funzionare nel mio ufficio (ovvero dove ho tutta la strumentazione che necessita di essere sincronizzata). Da mio ufficio io vedo pochissimo cielo e sono orientato ad OVEST.

Il povero ricevitore GPS riesce quindi a tracciare pochissimi satelliti contemporaneamente, il massimo raggiunto con notevoli sforzi è stato 4. Questo porta inevitabilmente ad un degrado delle prestazioni del sistema che non riesce ad attivare il PLL.

Leggendo in rete ho trovato che:

I think that most probably your GPSDO board didn’t finished selfsurvay mode which is signalized by fast flashing green LED. My board 57964-05 sends 10us pulse on the connector in
tracking mode. The full operati ng mode requires at least 10-15mins to get a PPS
output with good GPS signal (better forget about using indoor or window located antenna).
You can check the mode u sing terminal connected to J5 pins (57600,N,8,1) typing one of these commands:

trimble is marginally better than the lucent, but still pretty helpless with a puck antenna in a window with full view of the sky. the oscilloquartz star4 with the same antenna in the same location absolutely obliterates them both in terms of gps sensitivity and lock

Insomma… serve cielo! Bisogna che mi inventi qualche cosa per ottenere una migliore visione dei satelliti. Certo che mettere una antennina sul tetto….

 

Va bene che affoghi ma…

Recentemente ho raccontato della mia stazione meteo “allagata” dalla condensa e dall’acqua piovana. Sto cercando di ripristinarla e mi sono imbattuto in “cose mai viste”. L’ossido che si è formato è talmente consolidato che si è letteralmente “mangiato” lo stagno e molti dei contatti passo 2.54. Ci sono delle parti decisamente corrose dall’ossido. Alcuni cavetti wire-wrap che uso per le connessioni sono recisi (non so se dal corto-circuito o dall’ossido stesso). Malgrado tutto sono riuscito a ripristinare il circuito che adesso è in fase di test.

Devo assolutamente fare uno stampato!!!

 

Aiuto, affogo!

La stazione meteo è ormai attiva da qualche tempo, e ha dato enormi soddisfazioni funzionando in modo perfetto per diversi mesi.

Qualche giorno fa c’è stato un violento temporale, con tanto di allagamento del parcheggio antistante casa. In corrispondenza di questo evento la stazione meteo ha smesso di funzionare. A prima vista un problema di comunicazione I2C, visto che i dati registrati erano tutti “0”. Riavviata la stazione non c’è più stata connessione.

Mi sono recato sul tetto ed ho smontato i coperchi. Lo scempio è completo:

  • Sezione di controllo allagata, con segni di ossidazione evidenti su alcuni connettori e “condensa” sul coperchio.
  • Sezione del sensore di pioggia completamente allagata con segni di condensa anche in questo caso e pesante ossidazione.

Cosa può essere successo? La scatola del sensore di pioggia secondario è realizzata con una scatola da esterni di tipo “economico”, senza pressacavi con guarnizione. In questa scatola è entrata acqua ed umido.

La scatola è collegata alla sezione di controllo attraverso un cavo dalla guaina piuttosto “rigida”, che ha fatto la funzione di “tubo”, facendo arrivare aria molto umida che si è condensata sulle pareti. Con il calo delle temperature, l’umido è aumentato tanto, arrivando a bagnare molto il circuito, rendendolo non funzionante.

Interventi di ripristino:

  • rendere la scatola del sensore secondario veramente “stagna” con silicone e nastro vulcanizzante, oppure rimuoverlo del tutto, visto che in definitiva serve a poco.
  • rendere la scatola dell’elettronica non comunicante con la scatola del sensore secondario, tappando il “tubicino” con il silicone.

Un altro progettone!

Non sono un appassionato di meteorologia, sono semplicemente un “meteocurioso”. Mi piace conoscere la misura dei principali parametri meteorologici e poterne studiare la loro evoluzione nel tempo. Tanti anni fa avevo un quaderno in cui annotavo temperatura massima e minima del giorno. A dire il vero lo faceva mamma… io mi scordavo 2 volte su 3.

Ai tempi della tesi di dottorato avevo rispolverato un paio di componenti molto interessanti per la misura della temperatura ed umidità e pressione ed umidità. Si tratta di SHT21 della Sensirion e del MPL115A della NXP. Due prodotti molto interessanti, piccoli e facili da leggere, soprattutto con una raspberrypi. All’epoca avevo anche realizzato un mini-sito nella raspberry per potere analizzare l’andamento dei parametri meteo e poterlo confrontare con la variazione delle grandezze elettriche che erano oggetto del mio studio.

A distanza di alcuni anni, ho notato in commercio due oggetti che hanno riacceso il “fuoco sacro” della sperimentazione:

  • ESP8266, un chip Wi-Fi a basso costo con un microcontrollore Arduino-compatibile integrato;
  • BME 280, un sensore Bosch capace di rilevare temperatura, umidità e pressione.

Ho deciso quindi di realizzare una stazione meteo, che non pretende di entrare in competizione con prodotti commerciali ma che può soddisfare la mia curiosità meteorologica. Il progetto prevede l’integrazione di numerosi sensori e componenti aggiuntivi:

  • schermo solare, realizzato con i sottovasi ed il tornio;
  • sensore di temperatura umidità e pressione;
  • sensore di direzione del vento;
  • sensore di velocità del vento;
  • sensore di presenza pioggia.

 

I dispositivi sono stati acquistati tutti su Aliexpress, attendendo i canonici 30,40,50 giorni per la consegna. Particolarmente positivo è stato il giudizio nei confronti dei sensori di direzione e velocità del vento: ben costruiti, con ottimi cuscinetti e connessioni stagne. Considerato il prezzo di acquisto il prodotto è davvero interessante.

ESP8266 si occupa di raccogliere tutti i dati, impacchettarli e consegnarli via metodo http post al server per il loro immagazzinamento nel database. Il database è MySQL in esecuzione sulla solita Cubieboard. I dati sono presentati attraverso una interfaccia web “triviale” ed è possibile anche tracciare dei grafici relativi all’andamento delle grandezze nell’arco di 24,48 ore o una settimana. Nello screenshot seguente si vede la tabella riepilogativa dei sensori presenti in cui sono riportate le principali grandezze misurate. Il sensore pioggia è in errore a causa di un malfunzionamento.

Questa immagine mostra i dettagli del sensore. Una tabella riepiloga massimi, minimi e valori medi delle grandezze misurate.

I grafici mostrano l’andamento nel tempo delle grandezze, sono realizzati con la libreria JpGraph.

I problemi da risolvere sono stati tantissimi, molti dovuti alla mia proverbiale incapacità di programmatore. Malgrado le difficoltà, il sistema è attualmente in produzione e funziona in maniera piuttosto stabile. Ho notato una certa imprecisione del sensore di pioggia, che mi era stata segnalata anche da un collega. Non mi sorprende, considerando il prezzo di acquisto del dispositivo. La maggiore difficoltà la ho avuta nel gestire lo stato della connessione di ESP8266: nella prima stesura del codice effettuavo un controllo di connessione solo in fase di “setup” del dispositivo. Con questo approccio errato, in caso di caduta della connessione Wi-Fi, le funzioni che cercano di scrivere su un socket rallentano o bloccano l’esecuzione del codice. L’inserimento di controlli sullo stato della connessione ed eventuale riconnessione, ha reso il funzionamento del sistema molto più stabile.

Ho sviluppato il sistema con l’IDE di Arduino. Non amo particolarmente questo sistema ma lo ritengo comodissimo per questo tipo di applicazioni ludico-ricreative. Sviluppare il progetto con il PIC sarebbe stato un pianto (per me…) integrare una chip Wi-Fi con stack tcp/ip sarebbe stato oneroso e, forse, inutile. Ben vengano queste agevolazioni quindi, soprattutto se sono ben consolidate ed affidabili.

Il codice è a disposizione su richiesta, appena avrò tempo di epurarlo dai dati personali sarà pubblicato sul sito nella sezione download.

 

Maledetto ossido!

Situazione: sensore di temperatura collegato alla cubieboard attraverso un breve cavo e due connettori a passo 2.54mm. Tutto funziona regolarmente. All’improvviso ieri sera, noto che i dati del sensore meteo non si aggiornano più.

Faccio una scansione del bus I2C e, meraviglia delle meraviglie, non trovo nulla. Bizzarro, non ci sono stati sbalzi di tensione, fulmini, black-out. Sono giorni che non salgo di sopra a fare un giro.

Ipotizzo che sia un problema di ossidazione, dato dalla mostruosa combinazione di umidità e temperatura che regna sovrana in quel luogo. Per dare credito alla mia ipotesi non tocco nulla, mi reco al solito negozio di materiale elettronico (Electronic Fittings) e compero uno spray disossidante della DUE-CI: il R-11 contact cleaner.

Lo spruzzo direttamente nella femmina del connettore al quale è collegato il sensore e invio un timido comando “i2cdetect -y 1”. Meraviglia delle meraviglie, tutto torna a funzionare. Dalla prossima volta si salda tutto!

 

Preamplificatore a 1090MHz

Finalmente ho installato il preamplificatore che avevo acquistato su Aliexpress per i 1090MHz, da associare al mio sistema di ricezione ADS-B.

Il cambiamento di prestazioni è notevole: sono passato da una distanza massima ricevuta di 100 miglia nautiche ad oltre 180, con picchi superiori a 200.

Anche il numero di aeromobili “visti” dal sistema è notevolmente aumentato, passando da circa 700 a valori sopra il 1000. Considerando il cablaggio “creativo” sono davvero molto soddisfatto del miglioramento ottenuto!

Nella immagine che segue, la situazione del ricevitore “fotografata” il 14 giugno 2017.

L’angolo del ciambotto.

Se dovessimo giudicare la nostra civiltà da quello che si vede in rete, avremmo una visione un po’ distorta: pieno di fotografi ovunque, che si destreggiano impavidi negli spazi di colore più impensati. Sportivi ovunque che riprendono e pubblicano video in ogni dove. Soprattutto un tasso enorme di geni, visto che sui blog tutti i progetti funzionano, danno i risultati sperati, non si guastano mai.

Io invece faccio delle foto discutibili, posto anche i video di quando mi parte l’anteriore a motocross e voglio dedicare un post alla mia ultima cialtronata.

Devo monitorare lo stato di una finestra con la (infame) CubieBoard. Bene, prendo un sensore magnetico e lo collego al GPIO. Ottimo.

Fantastico vero? Un occhio meno “rincoglionito” del mio, noterà sicuramente che se il contatto sulla finestra è aperto, il piedino della GPIO è “floating”. E questo causa un comportamento molto bizzarro del sistema, del quale mi sono accorto in fase di test: apro la finestra, faccio girare il codice e vedo dei “rimbalzi” sullo stato di una variabile. Monitoro il GPIO e questo cambia allegramente stato per i fatti suoi. Controllo lo schema, mi percuoto e faccio ammenda.

Ho corretto lo schema. Adesso il GPIO è collegato ad un pull-up con un 10k e la finestra è collegata verso la massa: finestra chiusa piedino a livello logico basso, finestra aperta piedino a livello logico alto grazie al pull-up.

Ogni tanto l’angolo del ciambotto deve essere rispolverato!

Preamplificatore ADS-B

Ho acquistato un piccolo preamplificatore RF per la banda aerea dei 1090MHz. Lo ho comperato qui ed è arrivato con la solita flemma orientale (la chiave di ricerca è Aviation ADS-B special low noise amplifier).

preamplificatore ADS-B

Un bell’oggettino, interamente in metallo e corredato di connettori SMA di fattura dignitosa. Non ho resistito alla tentazione di fargli fare un giro con il Noise Figure Meter che ho in ufficio (Agilent N8972A e testina N4002A).

preamplificatore ADS-B misura

Sono molto soddisfatto, le caratteristiche esibite dall’oggetto sono davvero molto buone, come mostrano le figure qui sotto.

preamplificatore ADS-B GAIN  preamplificatore ADS-B NOISE

Non vedo l’ora di installarlo!!!