giovedì 17 maggio 2012

Rele' ed Arduino

Per fare qualche prova mi sono comprato un rele' per vedere se riesco a pilotarlo con l'Arduino.
E' qualche anno che non ho piu' pratica di rele' e quindi e' necessario un ripasso
Il modello che ho comprato e' un Finder 40.52.9012 con 12 Vdc sul magnete (sono i due pin piu' a sinistra) ed 8A/250V sull'uscita con due invertitori .... probabilmente il primo errore e' stato prendere un rele' con 12 Vdc di alimentazione in quanto l'Arduino spara fuori 5 Volts dalle uscita analogiche ...diciamo con un pacco da 4 pile ricaricabili (meno 5 Volts) riesco a farlo scattare quindi potrebbe funzionare




Pedinatura


Considerando nel dettaglio la pedinatura
i due terminali separati pilotano la tensione della bobina
i 6 terminali raggruppati gestiscono di fatto due linee separate (divise lungo l'asse maggiore del rele')
quando non viene applicata corrente i pin 1 e 2 di ciascun canale risultano in corto (0 Ohm) mentre i pin 2 e 3 di ciascun canale hanno resistenza infinita (non sono in collegamento)
quando si applica corrente alla bobina (e si sente chiaramente il rumore dell'elettrocalamita che stacca i contatti) e pin 1 e  2 risultano a resistenza infinita mentre i pin 2 e 3 risultano in corto (0 Ohm)

AGGIORNAMENTO
Il problema con Arduino e' quello di trovare dei rele' con corrente di bobina di 5 V che pilotino il 220 sul rele'; inoltre la corrente di una Arduino disponibile sui pin digitali e' di circa 40 mA mentre la bobina ne consuma circa 150 mA per cui non e' fattibile di gestire direttamente i rele' dalla scheda.
Una soluzione e' quella di utilizzare gli appositi shield rele' che presentano alimentazioni separate

AGGIORNAMENTO 2
Per il calcolo della corrente da inserire in un rele' per la corrente di bobina non e' necessario conoscere la sola tensione ma anche l'amperaggio.
Se sono riportate solo le indicazione dei Volt di bobina si puo' prendere un multimetro, calcolare la resistenza ai pin della bobina, e tramite la legge di Ohm calcolare la tensione di attivazione della bobina

Calcolo del tempo con Arduino

Per prima cosa si deve scaricare la libreria Time da qui da inserire poi nella directory libraries del software di programmazione dell'Arduino (vengono aggiunte Time TimeAlarms e DS1307RTC)

dopo si puo' provare con il seguente sketch che riporta il valore in millisecondi dall'accensione della scheda

---------------------
unsigned long time;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print("tempo : ");
  time = millis();
  Serial.println(time);
  delay(1000);
}

--------------------

Arduino Ethernet


 L'Arduino Ethernet non e' provvista di una porta USB per la programmazione ma solo di un ingresso FTDI per cui e' stato necessario comprare un convertitore esterno che lega l'FTDI ad un ingresso MicroUSb (l'uso dell'interfaccia permette anche di evitare l'uograde del bootloader)

L'alimentazione alla scheda viene data dal convertitore, in caso di assenza si deve alimentare mediante una batteria da 9 V in quanto il voltaggio di ingresso consentito e' tra 7 e 12 V. Altrimenti si puo' usare un alimentatore AC/DC da muro con 9 V ed il + sul pin centrale


Per la programmazione e' necessario anche modifica il file boards.txt che si trova nella directory /hardware/arduino del software di programmazione (fatto cio' nell'interfaccia e' possibile selezionare la scheda)

Nella foto soprastante si puo' vedere l'Arduino collegata direttamente al PC mediante un cavo di rete incrociato

Arduino unboxing

C'e chi fa l'unboxing dei prodotti Apple....io quello dei nuovi giocattoli Arduino




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' :<<<<


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 .

Il codice per fare l'accoppiamento e' 12345
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)





Cheshire Cat Ai

Cheshire Ai e' un progetto italiano che sta crescendo adesso Per provarlo si clona il progetto  git  clone https://github.com/cheshire-c...