Per una prova (senza troppe velleita' di utilizzo reale) ho provato ad accoppiare una Arduino con un pannellino solare per verificare la possibilita' di una alimentazione alternativa alle batterie od alla corrente di rete
Il pannellino e' stato attaccato sull'ingresso VIn ed eroga un massimo di 6 V-350mA (cosi' da non necessitare un limitatore di tensione per proteggere l'Arduino)
La prova sul campo ha verificato che
1) si puo' alimentare l'Arduino soltanto con illuminazione diretta. In giornate invernali nuvolose, dove sono presenti velature, il pannello non e' sufficiente per alimentare Arduino
2) e' stato montato per prova lo sketch Blink. E' stato verificato che, con il led verde di On accesso, in caso di scarsa alimentazione Arduino non e' in grado di eseguire il programma ed accendere il led (forse il led verde e' a monte del processore)
In fine dei conti si puo' utilizzare il pannellino per ricaricare un pacco batterie (che a sua volta alimenta l'Arduino) ma in maniera diretta non e' utile
lunedì 23 dicembre 2013
giovedì 19 dicembre 2013
Sensore umidita' YL-69/YL-38 su Arduino - Comparatore di voltaggio
Ho avuto modo di provare questo sensore di umidita' per suoli
Si tratta di un elettrodo da inserire nel terreno (quello a forchetta) e di un modulino di lettura
Il modulo di lettura ha 4 connessioni
1) Vcc (5-3.3 V)
2) GND
3) A0 : lettura del valore analogico da collegare alla porta analogica dell'Arduino
4) D0 : lettura on/off da collegare alla porta digitale dell'Arduino. Si attiva se viene superata una soglia impostata mediante il potenziometro
Gli elettrodi sono del tipo piu' semplice ovvero galvanizzati (alcuni vecchi sensori usavano elettrodi di materiale differente)
In generale, tra tutti i sensori di umidita', questo e' il meno preciso, con la minore ripetibilita' e con le maggiori influenze esterne quindi va bene sostanzialmente solo per uso domestico od hobbistico
L'aspetto piu' interessante e didattico di questo sensore e' la presenza di un comparatore di voltaggio realizzato mediante l'utilizzo di un componente LM393
Come si vede dallo schema sopra riportato un comparatore di voltaggio e' un sistema per cui il componente ha due stati logici (0,1) a seconda se la corrente misurata e' sopra o sotto ad una tensione di riferimento (normalmente impostata mediante un potenziometro)
Si tratta di un elettrodo da inserire nel terreno (quello a forchetta) e di un modulino di lettura
Il modulo di lettura ha 4 connessioni
1) Vcc (5-3.3 V)
2) GND
3) A0 : lettura del valore analogico da collegare alla porta analogica dell'Arduino
4) D0 : lettura on/off da collegare alla porta digitale dell'Arduino. Si attiva se viene superata una soglia impostata mediante il potenziometro
Gli elettrodi sono del tipo piu' semplice ovvero galvanizzati (alcuni vecchi sensori usavano elettrodi di materiale differente)
In generale, tra tutti i sensori di umidita', questo e' il meno preciso, con la minore ripetibilita' e con le maggiori influenze esterne quindi va bene sostanzialmente solo per uso domestico od hobbistico
L'aspetto piu' interessante e didattico di questo sensore e' la presenza di un comparatore di voltaggio realizzato mediante l'utilizzo di un componente LM393
http://home.cogeco.ca/~rpaisley4/Comparators.html |
Un altro uso utile dell LM393 e' quello del generatore di onda quadra
Nexgate NSA 1041 con ZeroShell
Questa network appliance del 2005 giaceva inutilizzata perche' era stata da tempo sostituita da un modello Cisco come VPN
Era quindi tempo di ridarle una nuova vita. Una volta riaccesa il sistema non e' partito (forse uno dei motivi per cui all'epoca fu dismessa) con il boot di FreeBsd fermo ai primi passi
Una volta aperto il case la prima sorpresa
Dalla scheda tecnica della scheda madre si vede che questa configurazione puo' essere considerata una antesignana della Raspberry in quanto sono disponibili porte GPIO ed un canale I2C
Ho cercato su Internet ma sembra che oramai nessun software per network appliance riesca piu' ad entrare in una CF da 128Mb ed invece di comprarne una nuova da 1Giga ho preferito montare un vetusto HD da 40 Giga parcheggiato come fermaporta
Come software ho deciso di montare Zeroshell perche' e' una soluzione piu' moderna e piu' completa rispetto ad IPCop. L'installazione non e' proprio banalissima, piu' che altro per la mancanza del CDRom
Si parte scaricando ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz per creare una chiavetta USB di avvio. Per copiare i file sulla chiave non si usa dd ma il seguente comando
gunzip -c ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz > /dev/sdb
finito si vede che nella chiavetta sono presenti tre partizioni. Si deve quindi copiare il file ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz su una delle partizioni della chiavetta (per me la migliore era /dev/sdb3 dove e' presente solo lo swap e c'e' spazio per l'immagine)
si fa quindi partire l'appliance da USB (il Bios e' quello di un normale computer quindi non ci sono problemi).
Quando il sistema e' partito si preme il tasto S per entrare in shell
si monta la chiavetta in loop
mount /dev/sdb3 /mnt/loop1
ci si sposta in /mnt/loop1 e si digita il comando per copiare l'immagine sul disco fisso
gunzip -c ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz > /dev/sda
si smonta il tutto e si fa reboot
In linea di principio e' possibile usare questo sistema anche per farci girare Debian ma si precisa che l'appliance non ha il tasto on/off ma solo quello di reset sul retro e quindi sarebbe piuttosto scomodo come computer. Peraltro il sistema e' piuttosto rumoroso pur essendo una appliance a causa delle due ventole.
Ed adesso di nuovo dentro al rack a fare un nuovo lavoro
Era quindi tempo di ridarle una nuova vita. Una volta riaccesa il sistema non e' partito (forse uno dei motivi per cui all'epoca fu dismessa) con il boot di FreeBsd fermo ai primi passi
Una volta aperto il case la prima sorpresa
Non si tratta di hardware proprietario ma di una comune motherboard (seppur del formato piu' piccolo) che monta una normale memoria RAM da 256 Mb, una CF da 128 Mb ed un Pentium III da 600 MHz. C'e' spazio per un disco fisso sulla sinistra
Dalla scheda tecnica della scheda madre si vede che questa configurazione puo' essere considerata una antesignana della Raspberry in quanto sono disponibili porte GPIO ed un canale I2C
Ho cercato su Internet ma sembra che oramai nessun software per network appliance riesca piu' ad entrare in una CF da 128Mb ed invece di comprarne una nuova da 1Giga ho preferito montare un vetusto HD da 40 Giga parcheggiato come fermaporta
Con l'hard disk e senza CF |
Si parte scaricando ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz per creare una chiavetta USB di avvio. Per copiare i file sulla chiave non si usa dd ma il seguente comando
gunzip -c ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz > /dev/sdb
finito si vede che nella chiavetta sono presenti tre partizioni. Si deve quindi copiare il file ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz su una delle partizioni della chiavetta (per me la migliore era /dev/sdb3 dove e' presente solo lo swap e c'e' spazio per l'immagine)
si fa quindi partire l'appliance da USB (il Bios e' quello di un normale computer quindi non ci sono problemi).
Quando il sistema e' partito si preme il tasto S per entrare in shell
si monta la chiavetta in loop
mount /dev/sdb3 /mnt/loop1
ci si sposta in /mnt/loop1 e si digita il comando per copiare l'immagine sul disco fisso
gunzip -c ZeroShell-2.0.RC3-IDE-USB-SATA-Disk-2GB.img.gz > /dev/sda
si smonta il tutto e si fa reboot
In linea di principio e' possibile usare questo sistema anche per farci girare Debian ma si precisa che l'appliance non ha il tasto on/off ma solo quello di reset sul retro e quindi sarebbe piuttosto scomodo come computer. Peraltro il sistema e' piuttosto rumoroso pur essendo una appliance a causa delle due ventole.
Ed adesso di nuovo dentro al rack a fare un nuovo lavoro
mercoledì 18 dicembre 2013
Esempio GUI con Cocoa
Era da tempo che non aggiornavo il medesimo esempio di GUI creato con diversi linguaggi e librerie
Oggi e' il tempo di Cocoa, con XCode 4.2 su Snow Leopard
Preciso che prima di oggi ero totalmente a digiuno della programmazione sotto MacOs X ma ho trovato difficolta' ad adattarmi ad una interfaccia spiccatamente orientata al mouse, di cui si trovano relativamente pochi esempi su Internet (la maggior parte sono video di Youtube a dimostrare come sia difficile spiegare per scritto le azioni via mouse) e di quei pochi esempi molti sono relativi a versioni precedenti (per esempio XCode 3) che hanno un metodo sostanzialmente differente
Oggi e' il tempo di Cocoa, con XCode 4.2 su Snow Leopard
Preciso che prima di oggi ero totalmente a digiuno della programmazione sotto MacOs X ma ho trovato difficolta' ad adattarmi ad una interfaccia spiccatamente orientata al mouse, di cui si trovano relativamente pochi esempi su Internet (la maggior parte sono video di Youtube a dimostrare come sia difficile spiegare per scritto le azioni via mouse) e di quei pochi esempi molti sono relativi a versioni precedenti (per esempio XCode 3) che hanno un metodo sostanzialmente differente
In ogni caso con un po' di difficolta' ci sono arrivato (avrei preferito impiegarci meno tempo..)
----------------------------------------
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize casellatesto = _casellatesto;
@synthesize barra = _barra;
@synthesize progressione = _progressione;
- (void)dealloc
{
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)scivola:(id)sender {
_casellatesto.stringValue = _progressione.stringValue;
_barra.doubleValue = _progressione.doubleValue;
}
@end
----------------------------------------
----------------------------------------
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTextField *casellatesto;
@property (assign) IBOutlet NSProgressIndicator *barra;
@property (assign) IBOutlet NSSlider *progressione;
@end
martedì 17 dicembre 2013
Mandelbrot a colori su Arduino
In questo post viene mostrata la creazione di un insieme di Mandelbrot su Arduino con un display LCD a colori da 320x240 pixel
La scheda impiegata e' stata una Arduino UNO
Il codice per la generazione dell'insieme e' riportata al termine del post. Di seguito invece il video in tempo reale. Considerando che questo schermo ha piu' o meno le dimensioni della schermata grafica di un Commodore 64 (anche se con un numero di colori maggiori) fa abbastanza pensare come un Commodore 64 agli inizi degli anni 90 impiegasse oltre 1 ora per lo stesso compito che una Arduino esegue in meno di tre minuti
----------------------------------------------------------------------
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define C0 0x00FF
#define C1 0x0F00
#define C2 0xF800
#define C3 0xF880
#define C4 0x8008
#define C5 0x8800
#define C6 0xFF00
#define C7 0xFFFF
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 124;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
#include "TFTLCD.h"
TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
tft.reset();
tft.initDisplay();
tft.fillScreen(0x0000);
//---------------------------------
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
switch (k%8)
{
case 0 : tft.drawPixel(i,j,C0); break;
case 1 : tft.drawPixel(i,j,C1); break;
case 2 : tft.drawPixel(i,j,C2); break;
case 3 : tft.drawPixel(i,j,C3); break;
case 4 : tft.drawPixel(i,j,C4); break;
case 5 : tft.drawPixel(i,j,C5); break;
case 6 : tft.drawPixel(i,j,C6); break;
case 7 : tft.drawPixel(i,j,C7); break;
}
break;
}
x = x_new;
y = y_new;
}
}
}
}
void loop(void) {
while (1) {}
}
La scheda impiegata e' stata una Arduino UNO
Il codice per la generazione dell'insieme e' riportata al termine del post. Di seguito invece il video in tempo reale. Considerando che questo schermo ha piu' o meno le dimensioni della schermata grafica di un Commodore 64 (anche se con un numero di colori maggiori) fa abbastanza pensare come un Commodore 64 agli inizi degli anni 90 impiegasse oltre 1 ora per lo stesso compito che una Arduino esegue in meno di tre minuti
----------------------------------------------------------------------
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define C0 0x00FF
#define C1 0x0F00
#define C2 0xF800
#define C3 0xF880
#define C4 0x8008
#define C5 0x8800
#define C6 0xFF00
#define C7 0xFFFF
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 124;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
#include "TFTLCD.h"
TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
tft.reset();
tft.initDisplay();
tft.fillScreen(0x0000);
//---------------------------------
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
switch (k%8)
{
case 0 : tft.drawPixel(i,j,C0); break;
case 1 : tft.drawPixel(i,j,C1); break;
case 2 : tft.drawPixel(i,j,C2); break;
case 3 : tft.drawPixel(i,j,C3); break;
case 4 : tft.drawPixel(i,j,C4); break;
case 5 : tft.drawPixel(i,j,C5); break;
case 6 : tft.drawPixel(i,j,C6); break;
case 7 : tft.drawPixel(i,j,C7); break;
}
break;
}
x = x_new;
y = y_new;
}
}
}
}
void loop(void) {
while (1) {}
}
LCD Shield SPFD5408 su Arduino
Mi sono comprato questo shield Arduino su un e-commerce cinese allettato dal prezzo modesto (circa una decina di euro spedizione compresa) e dato l'accoppiamento con un touch screen
Quando mi e' arrivato mi sono reso conto subito di un paio di cose:
1) lo shield e' montato in modo pessimo (il touch screen e' montato storto rispetto all'LCD)
2) tutti i piedini dell'Arduino sono coperti per cui in sostanza si puo' usare il solo shield
Ma i problemi non erano questi, il difficile e' stato farlo funzionare.
Sul sito del venditore viene dichiarato che ha un controller spfd5408 che non risulta supportato dalla libreria UTFT (quella standard per gli shield originali Arduino)
Frugando su Internet ho finalmente trovato questo link ad una libreria che permette di utilizzare questo dispositivo.
Il display (diciamolo francamente) fa abbastanza schifo un quanto se si accende tutto con il medesimo colore di fondo mostra delle bande di colore leggermente differenti.
Comunque vale la solita regola, spendi poco ottiene poco
Ecco il video della demo grafica (compresa negli esempi della libreria)
PS: la libreria non permette l'utilizzo dell' SD Reader
Vista da sopra - Si osservi il pessimo montaggio del touch screen |
Vista inferiore |
Quando mi e' arrivato mi sono reso conto subito di un paio di cose:
1) lo shield e' montato in modo pessimo (il touch screen e' montato storto rispetto all'LCD)
2) tutti i piedini dell'Arduino sono coperti per cui in sostanza si puo' usare il solo shield
Ma i problemi non erano questi, il difficile e' stato farlo funzionare.
Sul sito del venditore viene dichiarato che ha un controller spfd5408 che non risulta supportato dalla libreria UTFT (quella standard per gli shield originali Arduino)
Frugando su Internet ho finalmente trovato questo link ad una libreria che permette di utilizzare questo dispositivo.
Il display (diciamolo francamente) fa abbastanza schifo un quanto se si accende tutto con il medesimo colore di fondo mostra delle bande di colore leggermente differenti.
Comunque vale la solita regola, spendi poco ottiene poco
Ecco il video della demo grafica (compresa negli esempi della libreria)
PS: la libreria non permette l'utilizzo dell' SD Reader
lunedì 16 dicembre 2013
Servizio Stadio Fiorentina
Iscriviti a:
Post (Atom)
Change Detection with structural similarity
L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...