Archivi categoria: Elettronica

Multimetro ed energy meter

Un po’ di tempo fa sono riuscito a montare il mio energy meter. Progetto che si è trascinato sulla mia scrivania per quasi 5 anni e che è stato montato malgrado fosse ancora da terminare (mancano 10 saldature a dire tanto). Recentemente mi sono messo a giocare un po’ con Labview e, per fare pratica nella programmazione, sto usando un multimetro Agilent 34401A. Si tratta di un apparato davvero eccellente, che si può controllare con la GPIB e si interfaccia molto bene con Labview.

Per imparare a scrivere del codice decente mi è venuto in mente di realizzare un logger della tensione di rete e di confrontare la misura del multimetro con quella dell’energy meter. I due apparati sono connessi in punti diversi della rete domestica, con il multimetro che è posto lontano dall’energy meter. Pertanto la misura potrebbe essere affetta da errori dati dalla resistenza ohmica dei conduttori.

Ho eseguito due sessioni di misura. La prima il 27 maggio 2020 dalle ore 23.51 alle ore 11.58 del giorno successivo. I campioni sono acquisiti ogni 24 secondi, per un totale di 1804 campioni. Il valore di “24 secondi” è dato dall’intervallo di campionamento dell’energy meter che ha un “cuore” arduino e che temporizza le letture usando dei delay. Confrontando i grafici si ottiene un risultato interessante.

Misura del 26 maggio.

Analizzando con attenzione il grafico, si nota come i dati dei due sensori siano in generale “accordo”. Risultano solo “sfasati” nel tempo, con multimetro che sembra essere un po’ in ritardo rispetto al sensore di tensione.
La seconda sessione di misura è stata effettuata il 9 giugno 2020 dalle ore 6.33 alle ore 10.33, per un totale di 600 campioni. In questa sessione ho usato un nuovo software.

Sessione del 9 giugno,

I dati confermano quanto rilevato nella sessione di misura precedente, i dati sono in generale “accordo” ma il multimetro è un po’ in anticipo. La differenza temporale dipende dal modo in cui calcolati gli intervalli di campionamento. L’energy meter è basato sul timer di arduino, quando i dati sono inviati al server, questo provvede ad associare loro un timestamp. Il multimetro lavora invece con il timer di Labview che esegue un campionamento ogni 24 secondi. Pertanto è normale che i due orologi non siano sincroni.

Considerazioni:

  • Il multimetro rileva una tensione più bassa rispetto all’energy meter. Questo risultato è atteso e potrebbe derivare dal fatto che l’inserzione voltmetrica è effettuata in due punti molto diversi della linea. Pertanto il multimetro potrebbe risentire degli effetti di carico.
    In effetti confrontando i valori dei picchi notiamo che in corrispondenza dei valori bassi c’è una differenza di 2V o 3V tra i valori misurati. Se la linea è scarica, la differenza nella misura è pressochè trascurabile.
  • La linea di casa è un macello. La distanza tra il contatore di energia del fornitore e il quadro di casa è notevole e la sezione dei cavi non è sufficiente. Pertanto, in corrispondenza di picchi di assorbimento di corrente, la tensione di rete scende a livelli bassisimi: fino a 208V. Su questo c’è poco da fare, sfilare i conduttori per inserirne altri sarebbe un suicidio non conoscendo lo stato dei cavidotti.

Post Scriptum:
per pura curiosità ho misurato anche la frequenza di rete durante l’ultima sessione. I dati rilevati sono:
Fmin: 49.920
Fmax: 50.057

Andamento della frequenza nel tempo.

Please follow and like us:

BME-280…. ti voglio bene. (poco)

Siamo in quarantena, in isolamento da tutto e tutti, fortuna che il tempo ci assiste. Un po’ di sole, un po’ di caldo. Nottate fresche. Non faccio mistero della passione per la mia stazione meteo. Ecco, improvvisamente la stazione meteo si è ammutolita: segna sempre -141.61 gradi centigradi ed anche la misura dell’umidità sembra essere affetta da qualche problema. Ho provato a resettare la stazione ma senza alcun effetto. Cosa sarà mai successo? Ipotizzo che l’ennesimo sensore di temperatura è andato.

I ricambi sono in ufficio, fortuna che tra qualche giorno devo andare su, per altri motivi. Approfitterò per portare a casa qualche BME-280. Intanto approfitto per fare lo sbroglio della stazione meteo versione 2.0 che… udite udite non userà un BME-280 come sensore esterno: penso che userò un DHT-22 all’esterno e il BMW-280 all’interno, solo per la misura della pressione.

Please follow and like us:

Energy Meter

Finalmente, dopo solo 5 anni, sono riuscito a (quasi) finire il progetto dell’energy meter. Detta in poche parole, si tratta di un misuratore di energia Pzem-001 di provenienza Aliexpress (12 euro), collegato ad un ESP8266. Il microcontrollore, ogni 30 secondi circa, legge il valore di potenza, tenssione, corrente ed energia e li inserisce in un database.
Visto che c’era spazio, ho anche installato un sensore di tensione ed una sonda di umità e temperatura (DHT-22), in modo da rendere l’acquisizione dati il più completa possibile.Il sistema è alimentato con una batteria tampone, in modo da potere inviare allarmi in caso di mancanza dell’energia elettrica.

Allo stato attuale mancano una decina di saldature per finire tutto il lavoro, ma conto di finire quanto prima. I dati nel database sono poi processati da una serie di script PHP per generare grafici ed analizzare il consumo di energia elettrica nel tempo. Con questo “semplice” sistema mi sono reso conto che:
– l’investimento nei 5kW è stato necessario, spesso e volentieri “buchiamo” i 4kW di assorbimento, per periodi ben maggiori dei 3 minuti;
– la linea “contatore-quadro” è molto lunga e realizzata con cavi di sezione non adeguata. Questo comporta il fatto che quando l’assorbimento di corrente sale, la tensione scende (maledetto Ohm), fino a tensioni molto basse (sotto i 200V).
– l’andamento della tensione a parità di carico è interessante: il massimo di tensione è nelle ore diurne, quando la produzione dal solare è massima.

Progetti per il futuro:
– finire le 2o saldature che mi consentiranno di leggere la presenza di tensione in uscita dai sezionatori;
– implementare un po’ di “intelligenza” che invii allarmi in caso di mancanza di energia elettrica;
– implementare qualche algoritmo che sia in grado di capire se qualche cosa non va, ad esempio se abbiamo scordato il ferro da stiro o il forno acceso;
– implementare un allarme in caso di superamento di alcune soglie di assorbimento (sonoro, con un buzzer o su una APP).

Please follow and like us:

I regali… quelli belli!

Un amico che lavora nel campo della radiotecnica professionale mi ha omaggiato di alcuni fondi di magazzino. Ben conoscendomi mi ha detto: “io devo pulire il magazzino, ho trovato delle cose che ti possono piacere…”:
Bingo!!

La famiglia al completo, pronta per il set fotografico.

Da sinistra verso destra:
4CX5000A – 3CX3000A7 – YC-236+EI

  • 4CX5000A
  • Tetrodo di potenza raffreddato ad aria;
  • Massima frequenza 110MHz;
  • Potenza 10kW;
  • 3CX3000A7
  • Triodo di potenza raffreddato ad aria;
  • Massima frequenza 110MHz;
  • Potenza di uscita 5.5kW in classe C;
  • YC-236
  • Triodo di potenza raffreddato ad aria;
  • Massima frequenza di uscita 250MHz;
  • Potenza di uscita 2kW;

I data sheet possono essere scaricati da questi link:

Please follow and like us:

Un po’ umido!

Giornate davvero tremende ultimamente, che hanno messo a dura prova il sensore. Questa mattina l’auto era “asciutta” protetta dalle piante ma quelle dei vicini erano piuttosto bagnate.

Sensazione davvero spiacevole, come testimoniano anche i grafici (17 settembre 2018).

Please follow and like us:

Esp8266 ed http, che fatica!

Operazioni di restauro della stazione meteo, allagata e poi ripristinata con un nuovo circuito stampato, qualche sensore nuovo, connettori stagni e fori di sfogo dell’umido. Una persona ragionevole pensa “il più è fatto” e “basta rimettere il software vecchio e tutto funzionerà come prima”. Nemmeno per sogno. Il software vecchio funziona, ma non carica i dati sul server.

Il caricamento dei dati sul server avviene attraverso un banalissimo script PHP che viene invocato da un GET HTTP, con tutta una serie di parametri, una cosa di questo tipo:
http://192.168.x.y/meteo/add.php?temperatura=19.48&umidita=77.29&pressione=995.74&dewpoint=15.40&direzione=234.45&velocita=7.22&pioggia=0&sensore=tetto

Sul server la cosa funziona così:
192.168.x.r – – [20/May/2018:19:38:36 +0200] “GET /meteo/add.php?temperatura=22.68&umidita=52.19&pressione=99696.80&dewpoint=12.38&direzione=234.45&velocita=1.03&pioggia=0&sensore=tetto HTTP/1.1” 400 0 “-” “-“

Tutto finisce con un “400, bad request”. Se la chiamata viene inviata da un browser (copia ed incolla della STESSA stringa), tutto funziona:
192.168.x.k – – [20/May/2018:19:38:43 +0200] “GET /meteo/add.php?temperatura=23.22&umidita=50.15&pressione=99699.11&dewpoint=12.27&direzione=165.76&velocita=6.91&pioggia=0&sensore=tetto HTTP/1.1” 200 453 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36”

Ho cercato informazioni in rete ed ho visto che il protocollo HTTP, con il metodo GET, richiede che siano passati una serie di parametri al server:
GET
Host
User-Agent
Connection

Ottime informazioni si trovano su questo link. In pratica RFC che descrive il protocollo. Una prima versione del mio firmware inviava una stringa senza “user-agent”. Aggiunto questo parametro l’errore è rimasto. Il debug del problema lo ho effettuato con tcpdump sotto linux, impostando l’opzione “-vvv”, che analizza completamente il protocollo. Analizzando bene il traffico, ho notato che il campo host era valorizzato in modo errato. Come si evince dal RFC, la mancata valorizzazione del campo comporta un “bad request” da parte del serve. Ho modificato il codice impostando il campo “host” a “localhost” e tutto ha iniziato a funzionare. Vabbè, ho perso 3 giorni di tempo, sono stato due ore sul tetto ma ho imparato un sacco di cose! Di seguito l’analisi del protocollo fatta con tcpdump.

GET /meteo/add.php?temperatura=19.54&umidita=72.92&pressione=99537.58&dewpoint=14.55&direzione=94.69&velocita=0.00&pioggia=0&sensore=tetto HTTP/1.1
Host: localhost
User-Agent: wget/1.12
Connection: close

Questo invece il codice in ESP8266:

void http_client(){
Serial.println(“HTTP CLIENT: ———————————————————————–“);
Serial.print(“Host: “);
Serial.println(host);
Serial.print(“Port: “);
Serial.println(httpPort);
if (!WFclient.connect(host, httpPort)) {
Serial.println(“connection failed”);
++wrong;
error_flag=1;
return;
}
String agent = “wget/1.12”;
String hosth = “localhost”;
delay(100);
String url = “/meteo/add.php?”;
url += “temperatura=”;
url += temp;
url += “&umidita=”;
url += humi;
url += “&pressione=”;
url += pres;
url += “&dewpoint=”;
url += dewp;
url += “&direzione=”;
url += wdirection;
url += “&velocita=”;
url += wspeed;
url += “&pioggia=”;
url += pioggias;
url += “&sensore=”;
url += sensore;

Serial.print(“Requesting URL: “);
Serial.println(url);

WFclient.print(String(“GET “) + url + ” HTTP/1.1\r\n” + “Host: ” + hosth + “\r\n” + “User-Agent: ” + agent + “\r\n” + “Connection: close\r\n\r\n”);

unsigned long timeout = millis();
while (WFclient.available() == 0) {
if (millis() – timeout > 10000) {
Serial.println(“>>> Client Timeout !”);
WFclient.stop();
return;
}
}

E per adesso… funziona.

Please follow and like us:

Spyserver su Odroid XU3

Finalmente un Spyserver anche a casa. Ho trovato una vecchia scheda Odroid XU3 che ha richiesto un po’ di coccole prima di potere essere messa in produzione. La XU3 è un bel Single Board Computer (SBC), dotato di due processori quad-core:

processor : 7
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 120.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x2
CPU part : 0xc0f
CPU revision : 3

Il problema principale è trovare una distribuzione che supporti un Kernel “decente”, almeno 4.x . Sul sito di riferimento del prodotto si trovano delle immagini piuttosto recenti e dedicate al prodotto XU4. Per rendere usabile questa immagine sono necessari alcuni step aggiuntivi che sono  descritti in questo articolo. Alla fine di tutto il procedimento il sistema funzione, manca solo di installare spyserver:

  • apt-get install build-essential cmake libusb-1.0-0-dev pkg-config
  • wget https://github.com/airspy/airspyone_host/archive/master.zip
  • apt-get install rtl-sdr
  • apt install librtlsdr-dev
  • installazione di spyserver e configurazione del software.

Messo in esecuzione il software, il carico sulla CPU è piuttosto esiguo.

Please follow and like us:

Reinstallazione Server – La storia Infinita

Ancora non sono arrivato alla fine del processo di reinstallazione della cubieboard con sistema operativo Armbian (ne ho già parlato in un mio post precedente).

Alcune note relativamente all’installazione del software necessario a fare funzionare il modulo BM280 in ambiente Armbian. Tutta l’ìnstallazione avviene utilizzando PIP ma occorre prestare attenzione alla sequenza corretta degli eventi:

  • setuptools
  • wheel
  • protobuf
    apt-get install libprotobuf-dev protobuf-compiler
  • apt-get install build-essential python-pip python-dev python-smbus git
  • Esportare le variabili:
    export MYSQLXPB_PROTOC=/usr/bin/protoc
    export MYSQLXPB_PROTOBUF_INCLUDE_DIR=/usr/include/google/protobuf
    export MYSQLXPB_PROTOBUF_LIB_DIR=/usr/lib/arm-linux-gnueabihf
  • pip install mysql-connector

Procedere quindi con l’installazione del modulo:

git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
python setup.py install

Ultimo step l’installazione di jpgraph che, nelle ultime versioni di PHP da qualche grattacapo.
Come mostrato in questo post è possibile fare funzionare il modulo eseguendo una patch al file /jpgraph/src/jpg-config.inc.php : Si aggiungono queste righe:

// Patch for Debian PHP
define('ANTIALIASING', false);

if(!ANTIALIASING){
    function imageantialias($image, $enabled){
        return true;
    }
}
// End

Please follow and like us:

How to dismantle a PhD Thesis

Parafrasando gli U2, mi sono dedicato alla distruzione controllata del prodotto del mio Dottorato di Ricerca. Durante lo studio ho sviluppato un sistema trasmettitore – ricevitore operante a 76GHz, per la caratterizzazione del canale in ambiente marino. Per la realizzazione avevo attinto al catalogo dei prodotti di DL2AM (Phillip Prinz) ed avevo speso una fortuna.

Dopo la fine del dottorato, gli apparati sono stati usati da un paio di tesisti e poi sono rimasti sullo scaffale, in attesa che si concretizzasse un progetto che non ha mai visto la luce. Recentemente, complice il fatto che vorrei investire dei soldi in un acquisto “sportivo”, ho deciso di smontare tutto e vendere i componenti di maggiore pregio.

A 3/4 anni di distanza, sono rimasto molto soddisfatto dello stato di conservazione del sistema e del lavoro che avevo fatto.

Alcune foto dei tempi che furono.

Setup alla “lavagna luminosa” per centraggio del lanciatore nella guida circolare:

Incollaggio dei diodi, eseguito a mano libera e con una lente di ingrandimento delle “patatine”. Lavoro poi controllato allo stereomicroscopio.

A sinistra un diodo per microonde incollato sulle sue microstrisce, a destra il diodo pronto per il trattamento. Le dimensioni sono 0.6×0.3 mm.

Lavoro di tesi (Fioritto – Spoletini) eseguito al mare, per caratterizzare il comportamento del canale in base al mutare dell’umidità dell’aria. Il ricevitore era corredato di sensori di temperatura umidità e pressione atmosferica.

Il ricevitore oggi, in fase di “disinnesco”:

Alcuni dettagli del ricevitore:

distributore di alimentazioni e telaio (la scatola gewiss è nera in quanto pitturata in grafite)

raspberry pi (notare tutti i cavi della GPIO con termorestringente) e preamplificatore 144MHz

scheda di controllo con Si570, convertitori A/D per il monitoraggio delle tensioni e del livello del segnale ricevuto

Il lavoro ultimato. Tutti i blocchi sono stati separati ed ora è il momento di recuperare i componenti attivi e passivi.

Please follow and like us:

Spyserver – Test 1 Failed!

Ho provato ad installare ed a fare girare Spyserver sulla cubieboard che ho installato in soffitta. Mi sarebbe piaciuto potere avere un “punto” di ascolto remoto a casa.

Il software sulla cubieboard 2.0 con il nuovo “armbian” si configura che è un piacere. Tuttavia ho riscontrato i seguenti problemi:

  • spyserver non va molto d’accordo con fr24feed, collide un modulo del kernel. Per fare la prova ho dovuto disabilitare momentaneamente il feed del mio ricevitore ADS-B.
  • Le prestazioni del sistema sono insufficienti. Spyserver si avvia correttamente, accetta la connessione ma, anche riducendo all’osso i parametri, l’audio è fortemente frammentato.

Morale della favola: nulla da fare. La CPU della Cubie non ce la fa a gestire il carico. Pertanto devo inventarmi qualche cosa che non sia “comperare una Odroid”. Fino ad ora le prestazioni migliori le ho ottenute con una AIRSPY Mini collegato direttamente al mio desktop, ma si tratta di un I5 con 16GB di ram, pertanto di potenza e memoria ce ne sono da vendere!

Please follow and like us: