Ecco “Displog”, il DISPlay che LOGga!
Una volta domato il bastardo Ardulog, crearci nuove applicazioni è solo questione di fantasia!
Ecco quindi nascere DISPLOG, il primo display con logger incorporato, o logger con display incorporato, fate vobis:
La faccenda è molto semplice: il display grafico/alfanumerico 3110/5110 (aka Philips PCD8544) può essere pilotato tramite 5 soli pin (addirittura 4 in casi particolari), e su Ardulog ci sono 4 pin analogici disponibili (A1, A3, A4 e A5), più RX e TX (D0 e D1); quindi si tratta solo di giocherellare un po’ con le impostazioni di un banale sorgente di esempio sul playground, fare 5 saldature, ed ecco ottenuto un display che supporta le micro SD card!
Tutto quello che cè da fare è modificare le prime linee di codice in questo modo:
#define PIN_SCE 0
#define PIN_RESET 1
#define PIN_DC A3
#define PIN_SDIN A4
#define PIN_SCLK A5
Manca un PIN libero per accendere la retroilluminazione, ma Hobbytronics ha previdentemente predisposto due piazzole libere vicino ai due LED, quindi si può facilmente utilizzare il pin 5 o 13 per comandare la retroilluminazione.
Il pin analogico A1 rimane disponibile per collegare un qualunque sensore analogico.
PowerDuino Standalone, ecco i sorgenti
AGGIORNAMENTO 29 marzo 2014 – Arduino Day 2014
Presentato in fiera progetto dimostrativo basato su sensori di luce.
Il progetto dimostrativo utilizza due fotoresistenze e un sensore con accelerometro e bussola.
Le fotoresistenze mostrano come si possa programmare Arduino per rilevare la luce o il buio e per controllare apparecchi a 330V (lampadine);
PowerDuino è una dimostrazione di utilizzo del rilevamento di luce : ad ogni lampeggio del led di un contatore di energia, arduino incrementa un contatore, riuscendo così a calcolare la potenza istantanea e l’energia consumata.
Il sensore con bussola+accelerometro serve a illustrare la facilità con cui è possibile interfacciare sensori ad Arduino: bastano due fili per i sensori dotati di protocollo I2C; altri due fili servono per la massa e l’alimentazione. Opportune librerie permettono di pilotare i sensori con facilità.
Il sensore in uso nel progetto dimostrativo è un LSM303D, utilizzato con questa libreria.
Sketch dimostrativo:
#include <Wire.h>
#include <LSM303.h>
LSM303 compass;
char report[80]; int ControlPin=13; int RelayOne=7; int RelayTwo=8; int SensorOne=A1; // Light sensor one (SHORT RESISTOR - DARKNESS) int SensorTwo=A2; // Light sensor two (LONG RESISTOR - LIGHT) int GND_One=11; // For light sensor one (SHORT RESISTOR - DARKNESS) int GND_Two=12; // for light sensor two (LONG RESISTOR - LIGHT) int GND_Three=6; // For I2c Sensor
int DARKNESS_THRESHOLD = 200; // if above, it's dark, turn on the light int LIGHT_THRESHOLD = 450; // if below, light is detected, turn on the lamp!
void setup() { Serial.begin(9600); Serial.println("Init wire..."); delay(1000); Wire.begin(); delay(1000); Serial.println("Init compass..."); compass.init(); delay(1000); Serial.println("Enable compass..."); compass.enableDefault(); delay(1000); Serial.println("Init vars..."); pinMode(ControlPin,OUTPUT); //Led pinMode(RelayOne,OUTPUT); //Xboard relay 2 pinMode(RelayTwo,OUTPUT); //Xboard relay 2 pinMode(GND_One,OUTPUT); digitalWrite(GND_One,LOW); pinMode(GND_Two,OUTPUT); digitalWrite(GND_Two,LOW); pinMode(GND_Three,OUTPUT); digitalWrite(GND_Three,LOW); pinMode(SensorOne,INPUT); pinMode(SensorTwo,INPUT); digitalWrite(ControlPin,HIGH); digitalWrite(SensorOne,HIGH); digitalWrite(SensorTwo,LOW); delay(1000); digitalWrite(ControlPin,LOW); Serial.println("Program started!");
}
void loop() { compass.read();
snprintf(report, sizeof(report), "A: %6d %6d %6d M: %6d %6d %6d", compass.a.x, compass.a.y, compass.a.z, compass.m.x, compass.m.y, compass.m.z); Serial.print("ResistenzE; "); Serial.print(analogRead(SensorOne)); Serial.print(","); Serial.print(analogRead(SensorTwo)); Serial.print(","); Serial.println(report); // GRAVITY //////////////// if (compass.a.z<0) { digitalWrite(RelayOne,HIGH); } if (compass.a.z>0) { digitalWrite(RelayOne,LOW); }
// COMPASS //////////////// if (compass.m.x<0) { digitalWrite(RelayTwo,HIGH); } if (compass.m.x>0) { digitalWrite(RelayTwo,LOW); }
// DARKNESS ///////////////// if (analogRead(SensorOne)>DARKNESS_THRESHOLD) { digitalWrite(RelayOne,HIGH); }
if (analogRead(SensorOne)<=DARKNESS_THRESHOLD) { digitalWrite(RelayOne,LOW); }
// LIGHT /////////////////// if (analogRead(SensorTwo)<LIGHT_THRESHOLD) { digitalWrite(RelayTwo,HIGH); } if (analogRead(SensorTwo)>=LIGHT_THRESHOLD) { digitalWrite(RelayTwo,LOW); }
delay(100); }
Powerduino può essere usato per disegnare la curva di carico di lavatrice e lavastoviglie, scoprire quando e per quanto tempo assorbono 2000W, e quindi scoprire di quanto va sfalsata l’acdensione dei due elettrodomestici in modo che possano lavorare insieme senza far saltare il contatore.
============================
Dopo la presentazione all’Arduino Day 2013, ecco i sorgenti del PowerDuino Standalone:
E’ sufficiente caricarlo(*) su un normale Ardulog (meglio evitare l’Openlog, a meno di essere in grado di effettuare microsaldature a mano…), e immediatamente l’Ardulog si trasformerà da logger seriale a logger standalone, ossia in grado di registrare autonomamente dati dal pin analogico A1, senza bisogno di una Arduino esterna di supporto.
Al momento il listato è ancora un po’ primitivo, non è assolutamente ottimizzato, al contrario di quello originale Openlog 3.0 superottimizzato a basso livello in modo da ridurre al minimo i consumi del processore (quello distribuito con Ardulog è invece molto più rudimentale).
In futuro avrei in mente di realizzare un listato generico che, anzichè registrare specificamente la potenza misurata da un energy monitor esterno, semplicemente registri i dati grezzi letti dai 4 pin analogici e due digitali presenti su Ardulog: in questo modo, Hobbytronics, autore dell’Ardulog, potrebbe vendere il prodotto in versione “standalone” oltre che “serial”, e tale versione sarebbe adatta per qualunque applicazione: basterebbe demandare al file excel in cui si copiano i dati il compito di elaborarli in modo opportuno. Il file conterrebbe infatti semplicemente una riga per ogni lettura, effettuata ogni TOT millisecondi, e in ogni riga ci sarebbero i valori dei pin.
Bisogna però decidere in che modo impostare l’intervallo dall’esterno senza dover riprogrammare l’Ardulog; potrei ad esempio usare i due pin digitali per impostare 4 livelli diversi di precisione (2 bit= 4 valori), oppure i due digitali più A1, che sta fisicamente separato dagli altri, in modo da poter impostare 8 valori (2^3=8), semplicemente a seconda di quali pin sono a massa e quali a +Vcc.
Spero di riuscire a farmi un’idea più chiara in tempo per la prossima “uscita pubblica” di PowerDuino, che probabilmente sarà in occasione della “Geek Sunday” in programma a Roma per il prossimo 5 maggio.
(*) Per caricare uno “sketch” (=listato=programma) su Ardulog, bisogna collegarlo al PC tramite circuito adattatore FTDI (RS232/TTL), oppure tramite una Arduino Uno priva del microchip, collegando i pin RX-RX, TX-TX, Vcc-3.3V, GND-GND, RST-RESET, e impostando Arduino Uno sull’IDE.
Prima uscita pubblica per PowerDuino standalone ad Arduino day 2013
Oggi c’e’ stata la presentazione ufficiale al pubblico del progetto PowerDuino Standalone. Nato dopo lunghe vicissitudini durate addirittura un anno, e’ diventato possibile grazie a un Arduino Uno originale (al posto del clone Luigino usato per le innumerevoli prove fallite) e ad un Ardulog, successore dell’OpenLog. I numerosi visitatori, dapprima solo un po’ incuriositi, poi decisamente colpiti, hanno mostrato la validita’ dell’idea di un cosino largo 2 ceentimetri in grado di monitorare I consumi di tutta casa senza bisogno di nessuna conoscenza di elettronica: basta un rotolo di nastro adesivo, e PowerDuino Standalone e’ operativo! Il nastro serve ad attaccare la fotoresistenza al led presente sui normali contatori elettronici; 30 secondi per effettuare la calibrazione (da farsi solo la prima volta, poi verra’ mantenuta anche staccando la batteria), e poi il logger inizia a registrare. Presto I sorgenti saranno disponibili sul blog per chiunque desideri costruire l’apparecchio in proprio. Per chi non ama il fai da te, il modello standalone costera’ 30 euro e il modello da quadro 65.
Appunti su OpenLog – il file di configurazione config.txt
La documentazione di questo pur utile, minuscolo cosino in grado di registrare miliardi di dati in 4 cm2 lascia molto a desiderare a causa delle molteplici versioni succedutesi nel tempo.
Ecco quindi una breve spiegazione del file di configurazione di OpenLog:
- si deve chiamare CONFIG.TXT (tutto maiuscolo)
- il file deve contenere un’unica riga, non sono ammesse righe di commento
- la riga contiene numeri separati da virgole, senza nessun identificativo; è cioè un file di configurazione POSIZIONALE
Parametri ammessi:
Versione 1:
- baudrate (max 230400), carattere di escape, numero di ripetizioni necessarie del carattere di escape, tipo di logging
Esempio:
- 115200,103,14,0 = 115200 bps, escape char of ASCII(103), 14 times, new log mode
Versione 2:
- Come versione 1 (ma baud max=115200)
Versione 3:
- baudrate (max=115200), carattere di escape, numero di ripetizioni necessarie del carattere di escape, tipo di logging, modalità prolissa on/off, echo on/off
Esempio:
- 115200,103,14,0,1,1 = 115200 bps, escape char of ASCII(103), 14 times, new log mode, verbose on, echo on.
Spiegazione parametri:
- 9600: The communication baud rate. 9600bps is default. Acceptable values are 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- 26: The ASCII value (in decimal form) for the escape character. 26 is ctrl+z and is default. 36 is ‘$’ and is a commonly used escape character.
- 3: The number of escape characters required. By default it is three so you must hit ctrl+z three time to drop to command mode.
- 0: System mode. OpenLog starts in newlog mode (0) by default. Acceptable values are 0 = New Log, 1 = Sequential Log, or 2 = Command mode.
- 1: Verbose mode. Extended (verbose) error messages are turned on by default. Setting this to 1 turns on verbose error messages such as unknown command: remove !. Setting this to 0 turns off verbose errors but will respond with a ‘!’ if there is an error. Turning off verbose mode is handy if you are trying to handle errors from an embedded system.
- 1: Echo mode. While in command prompt characters are echoed by default. Setting this to 0 turns off character echo. Turning off echo is handy if you are trying to handle errors and don’t want to have the sent commands echoing back to the sender.
Nota: nessuna versione di firmware consente al momento di registrare letture dei PIN piuttosto che dei dati seriali, sebbene TX e RX possano teoricamente essere configurati come input digitali; non sono presenti pin analogici sulla board, sebbene A0, A1, A3, A4 e A5 siano disponibili sul chip (A2 non è disponibile).
Nota2: su ArduLog, una variante di OpenLog, sono presenti anche 4 piedini analogici, ma poichè usa lo stesso firmware di OpenLog, non è comunque possibile registrare nessun input!
Nota3: SDLogger, altra variante di OpenLog, utilizza versioni leggermente modificate del firmware di OpenLog, e utilizza SD Card grandi invece che mircoSD. Ha 4 pin analogici (oltre a una porta seriale aggiuntiva), ma non può comunque registrare dati letti dai pin.
leave a comment