Jumping Jack Flash weblog

Ecco “Displog”, il DISPlay che LOGga!

Posted in arduino, hardware by jumpjack on 8 aprile 2013

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:

DISPLOG - DISPLAY + LOGGER on SD card

DISPLOG – DISPLAY + LOGGER on SD card

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

Posted in hardware, Programmazione by jumpjack on 7 aprile 2013

AGGIORNAMENTO 29 marzo 2014 – Arduino Day 2014

Presentato in fiera progetto dimostrativo basato su sensori di luce.

power1

 

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);
}

power2

power3

 

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.
image

image

============================

Dopo la presentazione all’Arduino Day 2013, ecco i sorgenti del PowerDuino Standalone:

DOWNLOAD PowerDuino 0.3.2

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

Posted in Uncategorized by jumpjack on 6 aprile 2013

image

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

Posted in Uncategorized by jumpjack on 31 marzo 2013

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.

Tagged with: , , ,