diumenge, 30 de juny del 2013

Connectar un led verd/vermell a l'Arduino

És molt típic que aparells com les televisions tinguin un led que canvia de vermell a verd quan s'engega. El nom del sensor al meu pack és KY-011.

Com es connecta

La connexió no és molt diferent de la d'un led normal, amb la diferència que té un pin pel color verd i un pel color vermell. Per la resta és idèntic i, com ja passava al led, cal posar una resistència de 220-ohm.

  1. Green: pin verd, a qualsevol pin digital de l'arduino
  2. Red: pin vermell, a qualsevol pin digital de l'arduino
  3. GND: directe a l'arduino

Com connectar-lo

Si voleu més informació, mireu l'article de com connectar un led.

Codi d'exemple

El codi no deixa de ser una variació del blink

int green = 13;
int red = 12;

void setup() {                
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);  
}

void loop() {
  digitalWrite(green, LOW);
  digitalWrite(red, HIGH);
  delay(1000);
  digitalWrite(red, LOW);
  digitalWrite(green, HIGH);
  delay(1000);
}

Connectar un brunzidor (buzzer) a l'Arduino

Un buzzer és una mena de petit altaveu capaç d'emetre sons. Es tracta d'un sensor molt senzill de connectar però que es pot fer servir tant per emetre un "beep" com per fer sonar notes.

Connexió del brunzidor

La connexió és extremadament senzilla. Un buzzer bàsic només té dues potes, una que va directament al GND i l'altre que va al pin que es vulgui (millor si es connecta a un pin amb sortida analògica com el #9 ja que sinó no podrem enviar notes diferents).

Si teniu una versió amb placa, només cal connectar el pin S i el - (GND) ja que el +5V no es fa servir.

Emetre un beep amb un brunzidor

El següent exemple l'he tret d'aquesta web i explica com fer sonar un "beep" bàsic amb un buzzer.

int buzzer = 9;

void setup()  { 
  // declare pin 9 to be an output:
  pinMode(buzzer , OUTPUT);

void loop()  { 
  beep(200); 
}

void beep(unsigned char delayms){
  analogWrite(buzzer,20);
  //el 20 es arbritari, es el to que emetra
  delay(delayms);//temps que sonara
  analogWrite(buzzer,0);//apagar el buzzer
  delay(delayms);//esperar uns instants
}

Emetre notes amb un brunzidor

Per emetre notes amb un buzzer podem seguir el tutorial de la pàgina d'Arduino que, encara que explica com fer-ho amb un altaveu (la connexió és diferent) el codi és el mateix que per un buzzer.

Per fer-ho, el primer que cal fer és crear un arxiu amb els codis de les notes. Per fer-ho cal fer clic a la icona de triangle que hi ha al costat del nom de l'arxiu, seleccionar l'opció de nova pestanya i escriure "pitches.h". En aquest arxiu copiarem les definicions que podeu trobar aquí.

Com crear una nova pestanya a l'entorn d'Arduino

Un cop fet això, el codi fa servir les funcions:
  • tone (pin, freqüència, duració): que emet una nota. Si no es passa duració sonarà fins que es cridi notone.
  • notune (pin): que atura el buzzer
El codi d'exemple seria tal que així

/*
llibreria estandard on hi ha les notes
*/
#include "pitches.h"

int buzzer = 9;

//les notes
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
//la duracio
int noteDurations[] = {
  4, 8, 8, 4,4,4,4,4 };

void setup()  { 

void loop()  { 
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // la duracio va amb milisegons
    int noteDuration = 1000/noteDurations[thisNote];
    tone(buzzer, melody[thisNote],noteDuration);

    // temps de pausa entre notes
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // para el buzzer
    noTone(buzzer);
    
    delay(2000);
  } 
}

Connectar un fotoresistor a l'Arduino

Aquest sensor bàsic venía amb el pack inicial d'Arduino. El tutorial on explica com fer-lo servir és de la pàgina oficial d'Arduino. Encara que hi ha altres tutorials com aquest altre.


Un fotoresistor és un element que varia la seva resistència segons la llum que rep. A nivell bàsic pot ser entès com un element que deixa passar més corrent com més llum li arriba i, per tant, ens pot servir per la mesurar quantitat de llum.

Connexió del sensor (amb el fotoresistor a seques)

La connexió del sensor recorda a la del led, però és un xic diferent. Com que quan li toqui la llum deixarà passar la corrent lliurement, és necessari posar unaresistència de 10K entre el GND i els +5V. Tot i això, 

Connexió del fotoresistor (via Nakkaya.com)

A la imatge es pot veure que la connexió és peculiar. Una de les potes del fotoresistor va directe al GND de l'Arduino i l'altre al pin analògic que volguem (A0 per exemple), però per evitar curtcircuits, afegim una resistència de 10K que va als 5V.

Connexió del sensor (amb la versió ja montada en una placa)

Al pack de sensors (aquest) em venia algun fotoresistor ja montat en una placa. La avantatge de la placa és que ja ve amb la resistència marcada. El problema és que la placa està mal etiquetada i els pins reals són (via DxArduinoModulePack):
  • GND:
  • +5V:
  • S: sortida analògica (per exemple al pin A0)
Si voleu fer servir la versió de placa, el meu consell és que re-etiqueteu directament a la placa, sinó correu el risc d'equivocar-vos cada cop.

Les connexión de la versió amb placa

Codi d'exemple

El següent codi llegeix el valor del fotoresistor del pin analògic A0 i el treu pel port serie (per veure el valor cal prèmer Control+Shift+M o bé anar a "Herramientas -> Monitor serial").

int photoresistor = A0;//pin A0

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

void loop(){
    Serial.println(analogRead(photoresistor));
    //els valors van de 0 (maxima llum) o 1023 (foscor)
    delay(100);
}


dissabte, 29 de juny del 2013

Connectar un sensor d'humitat i temperatura a l'Arduino

El component en qüestió venia amb el pack: http://dx.com/p/arduno-37-in-1-sensor-module-kit-black-142834 (podeu veure tots els components del pack catalogats aquí). El seu codi és Ky-015.

El tutorial d'on ho he tret és aquest, encara que en el seu cas el sensor té un pin de més que no es fa servir.

Connexió del sensor

El sensor és senzill de connectar. Té 3 pins:
  1. S: pin de dades, és connecta a un dels pins analògics. Per exemple a l'A0.
  2. +5v: directa a l'arduino
  3. GND: directe a l'arduino
Vista dels connectors

Instal·lació de la llibreria d'Arduino

Malgrat que es podria fer servir sense una llibreria, la veritat és que sempre és més fàcil si es pot reaprofitar el treball que ha fet algú altre. En aquest cas cal instal·lar la llibreria en zip que podeu trobar a hobbyist.co.nz.

En general, per instal·lar llibreries es recomana copiar-les al directori d'instal·lació de l'arduino al subdirectori "libraries", però aquí explico una altre manera de fer-ho:

Obrir l'entorn d'Arduino i anar al menú "Sketch ->Importar librerías -> Add library " 
Seleccionar l'arxiu zip (en aquest cas es diu DHT.zip) un cop fet tornareu a l'entorn de programació 
Tornar al menú "Sketch ->Importar librerías " i seleccionar al final de tot la llibreria importada i al codi ja us apareixerà una línia a l'inici on s'importa la llibreria (#include <dht.h>) 

Codi d'exemple

El següent codi agafa la temperatura i humitat del sensor i l'escriu pel port sèrie.

Mentre s'està executant connectat a l'ordinador, es pot consultar el que l'Arduino envia per sèrie prement "control+majúscules+M" o bé anant a "Herramientas -> Monitor Serial"

#include <dht.h>

#define dht_dpin A0 //pin de lectura A0

dht DHT;//llibreria importada 

void setup(){ 
 Serial.begin(9600); 
 delay(1000);//es recomana deixar un segon abans de llegir 

void loop(){

 DHT.read11(dht_dpin);
 Serial.print("Current humidity = "); 
 Serial.print(DHT.humidity); 
 Serial.print("% "); 
 Serial.print("temperature = "); 
 Serial.print(DHT.temperature); 
 Serial.println("C "); 

 delay(800);//es recomana consultar cada 2 segons 
 //encara que tambe funciona amb 0.8 segons 

Com queda la connexió 













diumenge, 23 de juny del 2013

Connectar un interruptor de mercuri a l'Arduino

El nom del sensor fins on sé és KY-017. El sensor és d'aquest pack de sensors (els teniu tots catalogats aquí)

Aquest sensor amb un nom tant rimbombant és en realitat ben senzill d'entendre, dins d'un tub de vidre hi ha una gota de mercuri que es mou lliurement i dos borns. Així, quan està vertical i cap a munt, la gota cau i fa contacte, en canvi quan està a baix els borns no es toquen.

Connexió

El sensor té només 3 pins:
  1. GND: directe al de l'Arduino
  2. +5V: directe al de l'Arduino
  3. S: que indica si els borns estan en contacte, és connecta al pin digital que es vulgui de l'Arduino (per exemple al 7)
Connexió del sensor

El sensor a més ve equipat amb un led vermell que ens indica si està els bors estan en contacte o no, pel que és força fàcil de veure si s'està connectant o bé o no.

Codi d'exemple

A l'exemple he connectat un led extra al pin 13 que s'ilumina quan els borns NO estan en contacte (al contrari del que fa el led que porta el propi sensor).

int led = 13;//led 
int mercury = 7;//interruptor de mercuri

void setup() {                
  pinMode(led, OUTPUT);
  pinMode(mercury, INPUT);
}
 
void loop() {
  int mercuryState = digitalRead(mercury);
  if (mercuryState == HIGH) {        
    digitalWrite(led, HIGH);  
  } else {
    digitalWrite(led, LOW); 
  }
}

Poso un petit vídeo del sensor funcionant.


dijous, 20 de juny del 2013

Connectar un joystick analògic a l'Arduino

El meu joystick és un dels components del següent pack: http://dx.com/p/arduno-37-in-1-sensor-module-kit-black-142834 (podeu veure tots els components del pack catalogats aquí).El text de la placa diu "Keyes SJoys" i, segons el llistat de components, es diu "XY-axis joystick module KY-023".

El seu funcionament és molt senzill (fins i tot més del que m'esperava). Té 4 pins:

  1. GND: directe d el'Arduino
  2. +5V: directe de l'Arduino
  3. VRx i VRy: que retornen el valor de l'eix X i Y. S'han de connectar als Analog IN (per exemple a A0 i A1)
  4. SW: que en teoria serveix per veure si s'ha premut en mode botó. De moment no he aconseguit capturar-ho.
Vista dels connectors


He trobat un tutorial de com connectar-lo aquí: http://jannehuo.wordpress.com/2013/02/07/arduino-joystick-2/. Només cal llegir els valors de VRx i VRy amb la funció "analogRead" com ja havíem fet amb el potenciòmetre. Aquí un codi d'exemple que treu per terminal els dos valors separats per coma.

Codi d'exemple

int joy1 = 0;//pin analogic de les X
int joy2 = 1;//pin analógic de les Y
int val1 = 0;//valor X
int val2 = 0;//valor Y

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

void loop() {
 //llegim els valors
 val1 = analogRead(joy1);
 delay(100); //recomanen posar-ho
 val2 = analogRead(joy2);

 //imprimim els valors
 Serial.print(val1);
 Serial.print(",");
 Serial.print(val2);
 Serial.println();
 delay(1);
}

Com queda la connexió

dimecres, 19 de juny del 2013

Connectar un potenciòmetre a l'Arduino

A nivell pràctic, un potenciòmetre no és més que una roda que retorna un valor analògic. Un exemple fàcil d'entendre és una roda de volum de qualsevol cadena de música.

El tutorial l'he tret d'aquí: http://arduino.cc/en/Tutorial/AnalogReadSerial. Aquí s'explica com llegir un valor de l'Arduino des de la consola de l'entorn, però en el meu cas faré que la intensitat d'un led al pin 9 vingui donada pel potenciòmetre del pin A0.

La idea és que l'Arduino té una sèrie de ports anomenats Analog IN que són capaços de llegir valors analògics com els d'un potenciòmetre i convertir-los en nombres enters.

Connexió del potenciòmetre (via http://arduino.cc/en/Tutorial/AnalogReadSerial)

Bàsicament, el potenciòmetre té 3 pins. El del mig retorna el valor (per això es posa al pin A0), el de l'esquerra va al 5V i el de la dreta al GND.

Codi del programa

El codi del programa és una variació de l'original que fa una regla de tres del valor del potenciòmetre (que va de 0 a 1023) al màxim del led (que va de 0 a 255)

int led = 9; // el pin del led

void setup()  { 
  // declarem el pin 9 com de sortida
  pinMode(led, OUTPUT);
  Serial.begin(9600);

void loop()  {
  // llegim el potenciometre
  int sensorValue = analogRead(A0);
  //fem una regla de 3 (1023 - 255)
  int brightness = (sensorValue/10)*255/102;
  // set the brightness of pin 9:
  analogWrite(led, brightness);
  // esperem 30 milisegons
  delay(30);        
}

Com queda tot plegat

Connectar un led a l'Arduino (mode analògic)

A l'article anterior vaig posar com connectar un led a una sortida digital de l'Arudino (això vol dir que només està encès al màxim o apagat). Tot i això, l'Arduino té alguns ports que poden emetre valors analògics i que, per tant, poden regular la lluminositat del led. A l'Arduino Uno aquests ports estan marcats amb un símbol "#" (com ara el #3, #5, #6, #9, #10 i #11).


L'exemple l'he tret de: http://arduino.cc/en/Tutorial/Fade i fa servir la funció "analogWrite()" per enviar una senyal pel port 9.

Connexió al port 9 (via http://arduino.cc/en/Tutorial/Fade)

Com en el cas anterior, la pota llarga del led es connecta al port 9 i la pota curta al GND, La única diferència és que la resistència de 220-ohm està posada a la pota llarga (del que dedueixo que no canvia res perquè tant és que estigui a un costat com a l'altre mentre hi sigui).

Això és com queda

Connectar un led a l'Arduino (mode digital)

Degut a que la meva base d'electrònica és zero. El que em costa més d'entendre amb l'Arduino és com connectar  els diferents sensors i interactuar amb ells. Per això, he decidit anar escrivint com connecto cada sensor perquè serveixi de guia.

Ja aviso que el que aniré explicant només aplica als sensors que tinc. Intentaré sempre anar posant les referències si és que les tinc a ma, però no em faig responsable del que pugui passar amb d'altres sensors.

Connectar un led

L'exemple del led l'he tret d'aquí: http://arduino.cc/en/Tutorial/Blink. A grans trets consisteix en aprofitar el programa "blink" que emet pels port 13.

Diagrama de com es connecta (via http://arduino.cc/en/Tutorial/Blink)

En el meu cas es tracta d'un led i una resistència 220-ohm. La pota llarga del led es connecta al port 13 i la curta a la resistència, que anirà a petar al GND de l'arduino.

Fàcil.

Configurar Arduino Uno en Windows 7

Farà cosa d'un any em vaig posar una mica amb l'Arduino i, si bé vaig fer algunes coses interessants, la veritat és que el món real es va imposar i no vaig poder dedicar-m'hi massa. Mesos després de l'últim intent i amb l'ordinador recent formatejat, em proposo continuar.

Com que no recordo com s'instal·lava l'entorn, crec que serà una bona idea deixa-ho escrit. En el meu cas es tracta d'un Arduino Uno (amb un starter pack de l'estil d'aquest) i, pel que sé, les versions posteriors són força més senzilles d'instal·lar.

NOTA: la guia oficial d'instal·lació és aquesta: http://arduino.cc/en/Guide/Windows.

1. Descarregar l'entorn

Des de la pàgina http://arduino.cc/en/Main/Software ens baixem l'instal·lador per windows. En el meu cas m'he baixat la 1.0.5. La instal·lació és un wizard normal i corrent.

2. Connectar el trasto

L'última vegada que ho vaig fer vaig haver d'instal·lar el driver a ma per l'Uno, però ara veig que ja l'han integrat a l'instal·lador. En connectar-lo el windows instal·lar els controladors.

Molt possiblement en fer això el led 13 (és un led integrat a la placa) de l'Arduino es posarà a pampalluguejar o es quedarà estàtic. Això és perquè té carregat un programa bàsic en memòria.

3. Engegar l'entorn d'Arduino i carregar el programa blink

Ara ja podem obrir el programa d'arduino i us apareixerà una finestra com aquesta:

Entorn Arduino

Després anem a "Archivo -> Ejemplos -> 01.basics ->Blink" i s'ens carregarà el primer programa.

Molt probablement l'aplicació no haurà detectat en quin port tenim el dispositiu, així que la solució més fàcil és l'assaig i error.

A la barra blau fosc on hi ha botons, el segon botó (rodó amb una fletxa cap a la dreta) és enviar el programa cap a l'Arduino. Si fem clic apareixerà una barra a la part superior. Si al cap d'una estona el led taronja de l'Arduino comença a pampalluguejar ràpid vol dir que està carregant i ja ho tindrem tot bñe. Sinó el programa ens donarà error i vol dir que hem de indicar el port i el model.

Per indicar el model es fa anant a "herramientas -> tarjeta" i seleccionant el model (en el meu cas Arduino Uno). I per indicar el port es va a "herramientas -> puerto serial", en el meu cas ha sigut COM3, però només es qüestió d'anar provant.

Si tot us ha funcionat, quan carregueu el programa "blink" a l'Arduino, el led 13 es posarà en mode intermitent amb una freqüència d'un segon.