C'e chi fa l'unboxing dei prodotti Apple....io quello dei nuovi giocattoli Arduino
giovedì 17 maggio 2012
mercoledì 16 maggio 2012
Sensore Umidita' e temperatura
Per questa prova e' stato usato un sensore Phidgets 1125 che monta sia un sensore di temperatura che di umidita' relativa; il sensore e' nato per essere collegato alla PhidgetInterfaceKit 8/8/8 ma in realta' puo' essere collegato tranquillamente ad una Arduino visto che in uscita si ha un segnala analogico
La pedinatura dei cavi e'
Nero = Ground
Rosso = Power (+5v)
Bianco = segnale analogic0
I collegamenti sulla bread board sono piuttosto banali
Lo sketch per leggere i dati e' nettamente piu' semplice rispetto all'intefaccia I2C
(Le formule di conversione tra segnale e temperatura/umidita' sono state riprese dalle specifiche tecniche del sensore)
------------------------
// legge temperatura e umidita'
int temp = 0;
int umi = 0;
float temp2 = 0.0;
float rh = 0.0;
void setup() {
Serial.begin(9600);
}
void loop() {
temp = analogRead(A0); // legge il primo
umi = analogRead(A1);
temp2 = (temp * 0.2222) -61.11;
rh = (umi*0.1906)-40.2;
Serial.print("Temp (C): ");
Serial.println(temp2);
Serial.print("Umidita' rel.%: ");
Serial.println(rh);
delay(1000);
}
------------------------
I valori di temperatura sono coerenti .... non ho ancora capito bene i risultati dell'umidita' :<<<<
La pedinatura dei cavi e'
Nero = Ground
Rosso = Power (+5v)
Bianco = segnale analogic0
I collegamenti sulla bread board sono piuttosto banali
Lo sketch per leggere i dati e' nettamente piu' semplice rispetto all'intefaccia I2C
(Le formule di conversione tra segnale e temperatura/umidita' sono state riprese dalle specifiche tecniche del sensore)
------------------------
// legge temperatura e umidita'
int temp = 0;
int umi = 0;
float temp2 = 0.0;
float rh = 0.0;
void setup() {
Serial.begin(9600);
}
void loop() {
temp = analogRead(A0); // legge il primo
umi = analogRead(A1);
temp2 = (temp * 0.2222) -61.11;
rh = (umi*0.1906)-40.2;
Serial.print("Temp (C): ");
Serial.println(temp2);
Serial.print("Umidita' rel.%: ");
Serial.println(rh);
delay(1000);
}
------------------------
I valori di temperatura sono coerenti .... non ho ancora capito bene i risultati dell'umidita' :<<<<
martedì 15 maggio 2012
Arduino Bluetooth v 06
Connessione di alimentazione della Arduino BT ... di fatto non ha una connessione USB quindi ha solo alimentazione esterna che deve essere inferiore a 5.5 Volts ed assolutamente della giusta polarita' pena la compromissione dell'elettronica .
La versione 06 monta il processore ATMEGA 168 (importante da settare nel software di programmazione)
Programmare la scheda Bluetooth e' un po' piu' difficile rispetto alla versione USB
la procedura prevede
hcitool scan per verificare l'address della scheda
dopo di cio' si crea la porta seriale virtuale per la programmazione
sudo rfcomm bind rfcomm0 00:07:80:90:51:17 1
dando il comando rfcomm si puo' verificare la connessione avvenuta
in seguito si deve andare nella directory /lib/ ed editare il file preferences.txt
modificando alla fine del file
serial.port=/dev/rfcomm0
serial.databits=8
serial.stopbits=1
serial.parity=N
serial.debug._rate=115200
serial.burn_rate=115200
board=bt
(per usare piu' schede uso due installazione del software, una per la versione USB ed una per la BT)
ed infine la parte difficile
una volta compilato lo sketch per fare l'upload sulla scheda si deve premere il tasto RESET sulla scheda BT (e' l'unico pulsante presente) e subito dopo premere il pulsante di upload sul software Arduino. La giusta scelta di tempo e' fondamentale per l'upload
Il tasto di upload e' il secondo da destra nella barra in alto |
Puo' essere comodo montare un LED sul pin digitale 13 perche' da qui si puo' vedere quando viene fatto il reboot
Accelerometro LIS3LV02DQ su Arduino
La prova reale dell'accelerometro LIS3LVV02DQ collegato come I2C ad una Arduino
Le resistenze di Pull-Off sono da 1.5 KOhm
Lo sketch caricato e' il seguente (ripreso da qui)
-----------------
#include <Wire.h>
// TWI (I2C) sketch to communicate with the LIS3LV02DQ accelerometer
//Modified code from http://research.techkwondo.com/blog/julian/279
//Thanks Julian.
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600);
Serial.println("Wire.begin");
Wire.beginTransmission(0x1D); Wire.send(0x20); // CTRL_REG1 (20h)
Wire.send(0x87); // Device on, 40hz, normal mode, all axis's enabled
Wire.endTransmission();
}
void loop()
{
#define i2cID 0x1D#define outXhigh 0x29
#define outYhigh 0x2B
#define outZhigh 0x2D
#define outXlow 0x28
#define outYlow 0x2A
#define outZlow 0x2C
byte z_val_l, z_val_h, y_val_l, y_val_h, x_val_l, x_val_h;
//----------X Values-----------------------
int x_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outXlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
x_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outXhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);if(Wire.available())
{
x_val_h = Wire.receive();
}
//-------------------------------
x_val = x_val_h; x_val <<= 8;
x_val += x_val_l;
//----------Y Values-----------------------
int y_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outYlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
y_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outYhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
y_val_h = Wire.receive();
}
//-------------------------------
y_val = y_val_h; y_val <<= 8;
y_val += y_val_l;
//----------Z Values-----------------------
int z_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outZlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
z_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outZhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
z_val_h = Wire.receive();
}
//-------------------------------
z_val = z_val_h; z_val <<= 8;
z_val += z_val_l;
Serial.print("x_val= "); Serial.println(x_val, DEC);
Serial.print("y_val= "); Serial.println(y_val, DEC);
Serial.print("z_val= "); Serial.println(z_val, DEC);
delay(250);
}
-----------------
I risultati a video (ogni tanto sollevo e faccio ricadere la board sul tavolo per vedere l'effetto)
Le resistenze di Pull-Off sono da 1.5 KOhm
Lo sketch caricato e' il seguente (ripreso da qui)
-----------------
#include <Wire.h>
// TWI (I2C) sketch to communicate with the LIS3LV02DQ accelerometer
//Modified code from http://research.techkwondo.com/blog/julian/279
//Thanks Julian.
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600);
Serial.println("Wire.begin");
Wire.beginTransmission(0x1D); Wire.send(0x20); // CTRL_REG1 (20h)
Wire.send(0x87); // Device on, 40hz, normal mode, all axis's enabled
Wire.endTransmission();
}
void loop()
{
#define i2cID 0x1D#define outXhigh 0x29
#define outYhigh 0x2B
#define outZhigh 0x2D
#define outXlow 0x28
#define outYlow 0x2A
#define outZlow 0x2C
byte z_val_l, z_val_h, y_val_l, y_val_h, x_val_l, x_val_h;
//----------X Values-----------------------
int x_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outXlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
x_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outXhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);if(Wire.available())
{
x_val_h = Wire.receive();
}
//-------------------------------
x_val = x_val_h; x_val <<= 8;
x_val += x_val_l;
//----------Y Values-----------------------
int y_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outYlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
y_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outYhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
y_val_h = Wire.receive();
}
//-------------------------------
y_val = y_val_h; y_val <<= 8;
y_val += y_val_l;
//----------Z Values-----------------------
int z_val;
//------------------------------- Wire.beginTransmission(i2cID);
Wire.send(outZlow);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1); while(Wire.available())
{
z_val_l = Wire.receive();
}
//-------------------------------
Wire.beginTransmission(i2cID);
Wire.send(outZhigh);
Wire.endTransmission();
Wire.requestFrom(i2cID, 1);
if(Wire.available())
{
z_val_h = Wire.receive();
}
//-------------------------------
z_val = z_val_h; z_val <<= 8;
z_val += z_val_l;
Serial.print("x_val= "); Serial.println(x_val, DEC);
Serial.print("y_val= "); Serial.println(y_val, DEC);
Serial.print("z_val= "); Serial.println(z_val, DEC);
delay(250);
}
-----------------
I risultati a video (ogni tanto sollevo e faccio ricadere la board sul tavolo per vedere l'effetto)
lunedì 14 maggio 2012
Connessione I2C su Arduino
Il protocollo I2C e' un sistema seriale a 2 cavi con i quali e' possibile interagire con una serie di sensori
Le resistenze devono essere da almeno 1K ohm (alcuni usano da 1.5-2 K Ohm mentre altri esempi riportano anche 10 K Ohm)
Il Pin 4 analogico dell'Arduino deve essere collegato a SDA (dati) del sensore
Il Pin 5 analogico dell'Arduino deve essere collegato a SCL (clock) del sensore
GND del sensore deve essere collegato ovviamente al GND di Arduino cosi' come VDD al 5 Volts di Arduino
E' possibile usare il BUS I2C per mettere insieme piu' sensori, l'importante e' che ogni sensore abbia il proprio ID univoco
Immagine ripresa da qui anche se la mia attrezzatura e' sostanzialmente identica |
Le resistenze devono essere da almeno 1K ohm (alcuni usano da 1.5-2 K Ohm mentre altri esempi riportano anche 10 K Ohm)
Il Pin 4 analogico dell'Arduino deve essere collegato a SDA (dati) del sensore
Il Pin 5 analogico dell'Arduino deve essere collegato a SCL (clock) del sensore
GND del sensore deve essere collegato ovviamente al GND di Arduino cosi' come VDD al 5 Volts di Arduino
E' possibile usare il BUS I2C per mettere insieme piu' sensori, l'importante e' che ogni sensore abbia il proprio ID univoco
Ripreso da qui |
Arduino Software su Ubuntu 12.04
Per reiniziare a lavorare su Arduino mi e' stato necessario reinstallare l'ambiente di sviluppo sulla Linux Box Ubuntu 12.04 con qualche grattacapo
Il primo aspetto mancante nell'installazione di Ubuntu e' l'assenza di Java
Successivamente si devono installare le estensioni del compilatore GCC per Avr (il processore dell'Arduino) con i comandi
apt-get install gcc-avr avr-libc binutils-avr
a questo punto si deve scaricare dal sito di Arduino il software per la programmazione che e' presente in due filoni
il filone 1.0 rappresenta il futuro ma non riesce a compilare i vecchi programmi. Nel repository Universe di Ubuntu e' presente un pacchetto arduino che contiene la versione 1.0
la serie 0.xx (attualmente alla versione 0.23) funziona con tutti i vecchi programmi ma non riesce compilare correttamente il primo esempio (Blink) per un errore nel file math.h.
La soluzione (ripresa da qui) consiste nel modificare il file arduino/hardware/arduino/cores/arduino/wiring.h commentando la riga 79 (#define round(x))
Il primo aspetto mancante nell'installazione di Ubuntu e' l'assenza di Java
Successivamente si devono installare le estensioni del compilatore GCC per Avr (il processore dell'Arduino) con i comandi
apt-get install gcc-avr avr-libc binutils-avr
a questo punto si deve scaricare dal sito di Arduino il software per la programmazione che e' presente in due filoni
il filone 1.0 rappresenta il futuro ma non riesce a compilare i vecchi programmi. Nel repository Universe di Ubuntu e' presente un pacchetto arduino che contiene la versione 1.0
la serie 0.xx (attualmente alla versione 0.23) funziona con tutti i vecchi programmi ma non riesce compilare correttamente il primo esempio (Blink) per un errore nel file math.h.
La soluzione (ripresa da qui) consiste nel modificare il file arduino/hardware/arduino/cores/arduino/wiring.h commentando la riga 79 (#define round(x))
martedì 8 maggio 2012
Controllare joypad da Python
Sto cerando di modificare il mio joypad (un Tust GM-1300) per pilotare un piccolo ROV telecomandato con scheda Arduino. Per fare cio' avevo la necessita' di leggere i dati dal joypad e convertirli su una seriale.
Il modo piu' semplice si e' rivelato essere usare Python/Pygame che rileva in modo assolutamente trasparente il joypad USB
Attenzione: per il seguente programma e' necessario che sia presente nella stessa directory dello script Python anche il file pycurse.py che si scarica da questo indirizzo
--------------------------------------------------------------------------------------------
import pygame
import pygcurse
pygame.init()
win = pygcurse.PygcurseWindow(40, 25, 'Rov Controller')
j = pygame.joystick.Joystick(0)
j.init()
try:
while True:
pygame.event.pump()
win.write("Tot.assi : "+str(j.get_numaxes()), x=2, y=1)
win.write("Tot.pulsanti : "+str(j.get_numbuttons()), x=2, y=2)
win.write("Asse 1 : "+str(j.get_axis(0)), x=2, y=3)
win.write("Asse 2 : "+str(j.get_axis(1)), x=2, y=4)
win.write("Asse 3 : "+str(j.get_axis(2)), x=2, y=5)
win.write("Asse 4 : "+str(j.get_axis(3)), x=2, y=6)
win.write("Pulsante 1 : "+str(j.get_button(0)), x=2, y=7)
win.write("Pulsante 2 : "+str(j.get_button(1)), x=2, y=8)
win.write("Pulsante 3 : "+str(j.get_button(2)), x=2, y=9)
win.write("Pulsante 4 : "+str(j.get_button(3)), x=2, y=10)
win.write("Pulsante 5 : "+str(j.get_button(4)), x=2, y=11)
win.write("Pulsante 6 : "+str(j.get_button(5)), x=2, y=12)
win.write("Pulsante 7 : "+str(j.get_button(6)), x=2, y=13)
except KeyboardInterrupt:
j.quit()
Il modo piu' semplice si e' rivelato essere usare Python/Pygame che rileva in modo assolutamente trasparente il joypad USB
Attenzione: per il seguente programma e' necessario che sia presente nella stessa directory dello script Python anche il file pycurse.py che si scarica da questo indirizzo
--------------------------------------------------------------------------------------------
import pygame
import pygcurse
pygame.init()
win = pygcurse.PygcurseWindow(40, 25, 'Rov Controller')
j = pygame.joystick.Joystick(0)
j.init()
try:
while True:
pygame.event.pump()
win.write("Tot.assi : "+str(j.get_numaxes()), x=2, y=1)
win.write("Tot.pulsanti : "+str(j.get_numbuttons()), x=2, y=2)
win.write("Asse 1 : "+str(j.get_axis(0)), x=2, y=3)
win.write("Asse 2 : "+str(j.get_axis(1)), x=2, y=4)
win.write("Asse 3 : "+str(j.get_axis(2)), x=2, y=5)
win.write("Asse 4 : "+str(j.get_axis(3)), x=2, y=6)
win.write("Pulsante 1 : "+str(j.get_button(0)), x=2, y=7)
win.write("Pulsante 2 : "+str(j.get_button(1)), x=2, y=8)
win.write("Pulsante 3 : "+str(j.get_button(2)), x=2, y=9)
win.write("Pulsante 4 : "+str(j.get_button(3)), x=2, y=10)
win.write("Pulsante 5 : "+str(j.get_button(4)), x=2, y=11)
win.write("Pulsante 6 : "+str(j.get_button(5)), x=2, y=12)
win.write("Pulsante 7 : "+str(j.get_button(6)), x=2, y=13)
except KeyboardInterrupt:
j.quit()
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
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...