Category Archives: Arduino

ARDUINO: Pràctica 4: LDR, funció analogRead

A les entrades analògiques es posen elements que poden donar més d’un valor, com ara un sensor de llum, LDR, que pot rebre diferents intensitats de llum i donar diferents valors de resistència. Aquests elements es connecten a les entrades analògiques (A0, A1, A2, A3, A4, A5), i la instrucció per connectar-lo a la placa Arduino és analogRead.
Sensors analògics poden ser:
  • LDR
  • Potenciòmetres
  • NTC, PTC
El valor de l’entrada (analogRead) està entre 0 i 1023, mentre que la sortida (analogWrite) és entre 0 i 255
Com a exemple, modificarem la intensitat de la llum d’un LED en funció de la llum ambiental. Per fer-ho, usarem un LED com element de sortida analògica (analogWrite) i un LDR com element d’entrada analògic(analogRead). La connexió del LDR es fa de la següent manera:

feu el muntatge de sota i comprobeu el funcionament. La resistència és de 1 kohm. Podeu provar diferents valors de resistència per veure el resultat
El codi és el següent:
void setup()
{
pinMode(9,OUTPUT); // es defineix el led al pin 9 com a sortida
}

void loop()
{
int val=0; // es declara una variable que serà el valor de LDR
val=analogRead(A3); // el LDR està ubicat a l'entrada analògica A3
val=val / 4; // es reajusta el valor del LDR per la sortida digital del led
analogWrite(9,val); // el led agafa la intensitat del valor del LDR
}

  • int val: es defineix una variable que es diu val
  • pinMode(9,OUTPUT): el pin 9 es defineix com de sortida
  • val=analogRead(A3): la variable val agafa el valor del LDR connectat al pin A3
  • val=val/4: es divideix per 4 el valor de l’entrada. Es fa perquè analogRead pot arribar fins 1023, i la sortida analogWrite només fins 255. Al dividir per 4, s’ajusten el valors.
  • analogWrite(9,val): el pin 9 agafa el valor recollit del LDR.
PRÀCTICA AVANÇADA
Connecta un segon LED de manera que mentre un s’apagui, l’altre s’encengui per l’acció del LDR

ARDUINO: Pràctica 3: Comptador binari

Les entrades digitals són interruptors, polsadors, sensors, qualsevol element que s’usi per controlar un element de sortida com un motor o un LED. digitalRead  dóna només dos valors, HIGH i LOW, ja que es tracta de senyals digitals. 
Per veure com funciona, farem un contador binari amb 3 LEDs, contant de 0 a 7. Fes el muntatge següent:
  • Tres leds als pins 6,7 i 8
  • Un polsador al pin 13

Copieu el codi al IDE d’Arduino
void setup()
{
pinMode(13,INPUT_PULLUP);// polsador a la sortida
pinMode(6,OUTPUT);// es defineixen els 3 leds
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}

void loop()
{
int val=0;// es defineix una variable que és la lectura del polsador
int x=0; // comptador de polsades del polsador
val=digitalRead(13); // es defineix l'entrada digital del poldador
if (val == HIGH) { // condició if, quan es pulsi el polsador, puja el comptador de pulsos
x=x + 1;
}
if (x == 8) { // quan el nombre de pulsos sigui 8, es reinicia
x=0;
}
if (((x == 1) || (x == 3)) || ((x == 5) || (x == 7))) { // si es compleixen aquestes 3 condicions, s'encen el led 6
digitalWrite(6,HIGH);
}else { // si no es compleixen el led s'apaga
digitalWrite(6,LOW);
}
if (((x == 2) || (x == 3)) || ((x == 6) || (x == 7))) {
digitalWrite(7,HIGH);
}else {
digitalWrite(7,LOW);
}
if (((x == 4) || (x == 5)) || ((x == 6) || (x == 7))) {
digitalWrite(8,HIGH);
}else {
digitalWrite(8,LOW);
}
delay(200);

}

  • digitalRead(13): el polsador està a la variable 13. Per escursar el programa es renombra com a val.
  • digitalWrite(6,LOW): hi ha les sortides digitals, en aquest cas la 6, que se li dona l'ordre LOW, apagat.
  • if(x==4 || x==5 || x==6 || x==7) digitalWrite(8,HIGH): si el que hi ha dintre els parentesi, es cumpleix, es produeix la instrucció que ve després, en aquest cas encen la sortida 8 (HIGH)
  • else {digitalWrite(8,LOW): si no es compleix la instrucció if, es cumpleix el que hi ha a l'ordre else, en aquest cas apaga la sortida 8 (LOW)

PRÀCTICA AVANÇADA

Posa un quart LED de manera que es pugui comptar fins a 15

ARDUINO: Pràctica 2: El LED d’intensitat variable

analogWrite és una instrucció que indica a una sortida un valor entre 0V i 5V. Els valors van entre 0 (0V), i 265 (5V). Per exemple, analogWrite(11,214) indica que la sortida 11 té un valor a la sortida de 214, que equival a uns 4V. El següent exemple és un LED que varia la seva intensitat de llum.

  • Feu el mateix muntatge que amb el programa blink amb la placa protoboard i l’arduino.
El codi del programa és el següent:

int brillo=0; // es declara una variable que es diu brillo
int increment=5;// es declara una variable que es diu increment

void setup() // es declaren les entrades i sortides
{
 pinMode(9,OUTPUT); // al pin 90 hi ha una sortida
}
void loop()
{
 brillo=brillo + increment; // el brillo s’incrementa de 5 en 5
 analogWrite(9,brillo); // el LED s’encen amb la intensitat de brillo
 if ((brillo == 0) || (brillo == 255)) {
   increment=1 increment;
  }
 delay(30);
}
  • Les instruccions int defineixen 2 variables i canvia el nom d’una entrada.
  • analogWrite(9, brillo): la sortida 9  pren el valor de brillo i li dóna el voltatge corresponent al LED. 
  • brillo = brillo + incremento: la variable brillo augmenta en 5 el seu valor.
  • if(brillo==0 || brillo==255): if és una condició que, en aquest cas, si arriba a un d’aquests dos valors, s’executa l’ació de dintre els claudàtors, en aquest cas el decreixement.

ARDUINO: Pràctica 1:Blink

El primer programa que fareu serà un led parpellejant. Munteu el següent circuit a la placa Arduino i a la placa protoboard:

  • El terminal llarg al pin 9, i el curt a una resistència de 220 ohms 
  • L’altre terminal del resistor al negatiu de la paca (GND) 

Carregueu el següent codi a l’IDE d’arduino:

void setup()
{
pinMode(9,OUTPUT); // al pin 9 hi ha una sortida
}

void loop() // el que hia dintre el loop es repeteix indefinidament
{
digitalWrite(9,HIGH); // encen el LED que hi ha al pin 9
delay(1000); // espera 1 segon
digitalWrite(9,LOW); // apaga el LED del pin 9
delay(1000); // espera un segon
}

Mirem què significa els elements que surten:

  • digitalWrite s’usa per connectar sortides digitals: LEDs, motors, servomotors. A les sortides se’ls hi pot donar dos valors: alt (1) i baix (0): HIGH/LOW (encendre/apagar)
  • HIGH/LOW són dues instruccions que encenen (HIGH) o apagen (LOW) una entrada o sortida de l’Arduino
Les primeres ordres que veureu seran aquestes:
  • void setup() {pinMode(9, OUTPUT);}: dintre void setup() es defineixen com seran les connexions. pinMode(9, OUTPUT) indica que la sortida 9 serà de sortida (OUTPUT). Es posa OUTPUT quan es connecten LEDS, motors, servomotors. Si voleu que sigui d’entrada, heu de posar INPUT, que seran els interruptors i els sensors.
  • void loop() { }: dintre els claudàtors es posen les instruccions que el programa repetirà indefinidament:
  • digitalWrite(9, HIGH): aquesta instrucció encén el led (HIGH)
  • digitalWrite(9, LOW): aquesta instrucció apaga el led (LOW)
  • delay(1000): entre instrucció i instrucció, el programa espera 1 segon (1000 ms). Podeu canviar el número de segons i veureu com varia el parpelleig del LED.
  • //: comentaris de línia. Desprès de cada instrucció, es pot posar un comentari sobre el què fa cada línia. No és obligat, però va bé per saber què es vol fer. El que es posa darrera de // no influeix en el programa.

PRÀCTICA AVANÇADA

Mireu ara de fer el mateix, però posant un altre LED al pin 8, de manera que quan un s’apagui, l’altre s’encengui. Pistes:

  • Aprofitant el codi que teniu, poseu un altre bloc de leds però connectats a l’entrada 8 
  • A la placa protoboard, poseu un altre led i resistor igual com teniu l’altre.