Reg Arduino

Què és Arduino? Què ens permet fer?

 

arduino.png

Arduino és una plataforma open source per prototip electrònic basat en un hardware i software de fàcil ús. Arduino ens ofereix una plataforma amb dos components claus:

-          Software: entorn de desenvolupament integrat (EDI), que ens permet escriure, compilar els programes i carregar-los al hardware. El software és de codi obert i ampliable amb les llibreries que necessitem.

-          Hardware: amb la placa Arduino. Nosaltres utilitzarem la placa Arduino UNO. Aquest hardware és ampliable per diferents components electrònics.

Arduino ens permet crear objectes que interactuïn amb l’entorn, sensor d’humitat.

Documental de la aparició de Arduino: http://arduinothedocumentary.org

Si voleu aprendre el llenguatge d’Arduino però no teniu la placa podeu utilitzar el VIRTUALBREADBOARD per fer proves a casa. Per a fer sistemes petits.

 

 

Quin és el llenguatge utilitzat per l’Arduino?

 

El llenguatge que utilitza Arduino es basa en C/C++.: http://arduino.cc/es/Reference/HomePage

Les primeres regles que hem d’aprendre alhora de realitzar la programació són:

-          Sempre acaben les línies amb un ;

-          /*  */ i // aquest símbols ens serveixen per fer comentaris del nostre codi per tal de que altres persones puguin entendre les nostre línies de codi. És molt recomanable explicar tot el codi d’una manera fàcil i clara, per a que tothom ho pugui entendre. Veurem que són comentaris perquè es veuran d’un altre color (això també passa quan escrivim una paraula reservada per alguna llibreria per exemple les paraules que ens serveixen per indicar bucles con loop, while o per crear condicionals if).

/*  Això és un comentari

  */

// Això és un comentari

-          Per fer més senzill el codi haurem de tabular bé totes les línies del nostre codi.

-          Hem de tenir presents de declarar () al principi del programa les nostre variables o constants.

Variable:  una variable és un nom associat a un element de les nostres dades i el seu valor pot canviar durant l’execució del nostre programa. En el nostre projecte una variable seria la humitat. Ja que aquesta ens variarà durant l’execució del nostre programa.

Constant: una constant és una dada que té un valor que no pot canviar durant l’execució del programa. Rep un valor en el moment de la seva definició.

 

La diferència entre les dues són:

1.    Les constants reben un valor inicial en la seva declaració.

2.    Les variables primer es declaren, després s’inicien i després s’utilitzen.

3.    Les constant mantenen el seu valor durant tota l’execució del programa. En canvi les variables poden canviar aquest valor inicial.

 

-          Sempre al començament dels nostres programes hem d’informar al programa de quines llibreries volem que llegeixi. Per fer això sempre hem de posar primer #include<’el nom de la llibreria que volen carregar’>

Llibreria: són unes col·leccions o conjunt de subprogrames utilitzats per desenvolupar software.

 

EX:

// Codi de les llibreries que volem utilitzar
#include <LiquidCrystal.h

 

 

Exemple de codi Arduino amb un LED amb VIRTUALBREADBOARD:

 

/* El que sempre hem de fer abans de començar el programa es pensar en les variables o constants que necessitem per poder fer el codi. */

// Definició de constants

// Definició de variables

/*

 Com definim les variables?

Totes les variables també pertanyen un grup de dades (int, char...). Per tant, per definir-les haurem de donar-li un nom i un grup de dades. EX:  int number;

Un cop la hem declarat en aquest apartat, normalment, la inicialitzem a un valor neutre. EX: number = 0;

Finalment, fent aquests passos, podem utilitzar el nom de number en qualsevol part del nostre codi. Canviant el valor cada cop que sigui necessari. EX: number = number + 1;

 */

/ * La funció de inicialització */

void setup() {

                       // inicialitzar el pin digital com sortida

                       // en el nostre cas el pin 13 té connectat un LED

                       pinMode(13, OUTPUT);

                       }         

/* La funció següent s’anomena loop i ens serveix per executar les línies de codi que trobem dintre d’aquesta part infinites vegades. Aquesta serà la nostra funció principal, ja que ens dirà que ha de fer el nostre programa */

void loop() {

       digitalWrite(13, HIGH);  // encendrem el LED

       delay(1000);   // esperem un segon

       digitalWrite(13, LOW);  // apaguem el LED

       delay(1000);   // esperem un segon

      }

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

 

 

 

Exemple de prova

 

Connectar placa LCD amb l’Arduino UNO. Primer hem de mirar els tutorials per poder saber com connectem la placa LCD a la placa Arduino. Aquesta placa LCD utilitza una llibreria anomenada LiquidCrystal.

Totes les accions que podem fer amb aquesta llibreria la podem trobar a la pàgina oficial: http://arduino.cc/en/Reference/LiquidCrystal

La placa LCD té unes quantes potes i hem de verificar quina funció fa cada una d’elles. Definició de les potes:

- Pin RS: és un pin de registre que controla on estem escrivint les dades en la pantalla. Ens serveix per controlar la pantalla, per saber que ha de fer en cada moment.

- Pin R/W: és el pin que s’encarrega de llegir i escriure. Si esta habilitat ens permet escriure en la pantalla.

- D0 – D7: són 8 pins de dades. Aquests pins poden estar alts o baix i són els bits que escriurem a la pantalla o els valors que podrem llegir des de la pantalla.

- V0: és el pin de contrast. Com totes les pantalles hem de tenir present el contrast per tal de visualitzar bé les dades a la pantalla.

Per fer-ho necessitem un potenciòmetre per tal de poder variar la seva resistència per tal de que nosaltres la posem al nostre gust.

 

 

 

Ara ja podem passar a connectar els cables entre l’Arduino i la placa LCD: http://arduino.cc/en/Tutorial/LiquidCrystal

Haurem de connectar els següents pins entre LCD - Arduino:

-          Pin LCD RS para pin digital 12

-          LCD Habilitar pin a pin digital 11

-          LCD D4 pin a pin digital 5

-          LCD D5 pin a pin digital 4

-          LCD D6 pin a pin digital 3

-          LCD D7 pin a pin digital 2

A més, hem de connectar als volts 5V i a terra GND. Per donar-li energia per funcionar.

Codi per fer funcionar la pantalla LCD:

/ * 
  LiquidCrystal Biblioteca - Hello World
  Demuestra el uso de una pantalla LCD de 16x2. El LiquidCrystal  biblioteca trabaja con todas las pantallas LCD que son compatibles con el  controlador Hitachi HD44780. Hay muchos de ellos por ahí, y que  por lo general se les puede decir por la interfaz de 16 pines.  Imprime bosquejo "Hello World!" al LCD  y muestra el tiempo.   El circuito:  * pin LCD RS para pin digital 12  * LCD Habilitar pin a pin digital 11  pines * D4 LCD para pin digital 5  * pin D5 LCD para pin digital 4  * pin D6 LCD para pin digital 3  * pin D7 LCD digital pin 2  * LCD R / W clavija a tierra  * resistencia de 10K:  * termina a + 5V y tierra  * limpiaparabrisas al pin VO LCD (pin 3)  Biblioteca originalmente añadido 18 de abril 2008  por David A. Mellis  biblioteca modificada 05 de julio 2009  por Limor Fried (http://www.ladyada.net)  ejemplo añadió 09 de julio 2009  por Tom Igoe  modificado 22 de noviembre 2010 por Tom Igoe  Este código de ejemplo se encuentra en el dominio público.  http: //www.arduino. cc / es / Tutorial / LiquidCrystal  * /

// incluir el código de la biblioteca: 
#include <LiquidCrystal.h

// inicialitzar la biblioteca amb els números del pins que volem utilitzar

LiquidCrystal lcd ( 12 , 11 , 5 , 4 , 3 , 2 ) ; 

void setup ( ) { 
  
// establir el número de la pantalla LCD de columnes i files
  lcd.begin( 16 , 2 ) ; 
  
// Mostra un missatge en la pantalla LCD
  lcd
print "Hola, mundo!" ) ; 


void loop ( ) { 
  
// situar el cursor en la columna 0, la línea 1
  
// (nota: la línea 1 es la segona fila, ja que el s’inicia en 0):
    lcd.setCursor
 ( 0 , 1 ) ; 
  
// imprimeix el número de segons des de la seva execució 

    Lcd.printmillis ( ) / 1000 ) ; 
}

 

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

 

 

 

Comencem el nostre projecte:

 

Vídeo del que volem fer:

https://www.youtube.com/watch?v=e8bxwW4NDtU

1-    Revisar el material que ens farà falta pel projecte. Aquests materials són:

- Sensor d’humitat.

- Bomba d’aigua (transistor)

- Placa Arduino UNO.

- Pantalla LCD.

- Resistències o potenciòmetre.

- Cables.

- ProtoBoard.

- ....

 

2-    Connecten tots els nostres elements a l’Arduino, mirant i apuntant en quins punts connectem.

Hem de tenir en compte el pol + i el pol – en tots els nostres elements. Mirem els manuals per a cada un dels elements que volem connectar.

 

 

 

Fins aquí només hem utilitzat la placa Arduino i els elements necessaris pel bon funcionament del nostre aparell. Ara passem a realitzar el codi a fer per tal de que l’Arduino pugui comunicar-se amb els elements que hem connectat a la seva placa. Per fer això primer haurem de respondre les següents qüestions:

 

Quines llibreries hem d’utilitzar per tal de realitzar el nostre programa?

Quines variables -  constants hem de declarar pel nostre programa?

On tenim connectats els nostres elements a la placa Arduino? (quins pins?, són analògics o digitals?)

 

 

 

Comencem el nostre codi!

 

// include the library code:

#include <Wire.h>

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Pins utilitzat en la pantalla LCD

int humitat;   // Valor de la humitat actual de la planta

int humitatTall;   // Humitat que fixa l’usuari girant el potenciòmetre

int control=8;   //Pin que activa o no el relé

/*

 Ara escrivim la funció principal i la nostra funció loop per tal de que el programa sàpiga que ha de fer

*/

void setup() {

  lcd.begin(16, 2);

  pinMode(control,OUTPUT);   // Declarem el control de la bomba com sortida

}

 

void loop() {

     /* Per a que el sistema converteixi la lectura analògica en % hi ha que establir una relació:
*/

     humitat = analogRead(0);  // Converteix la lectura del sensor a %

     humitatTall = 400;  /* Ens converteix la lectura del potenciòmetre a %. La humitat s’ajusta enter un 15 i un 90 per cent. 0.07*analogRead(1)+15; */

     /*

El següent bloc ens mostrarà per pantalla el valor de la humitat que llegeix el sensor, i la humitat de tall pel potenciòmetre.

*/

     lcd.setCursor(0,1);

     lcd.print("HUM. PLANTA:");

     lcd.setCursor(12,0);

     lcd.print(humedad);

     lcd.setCursor(15,0);

     lcd.print("%");

     lcd.setCursor(0,1);

     lcd.print("HUM. TALL:");

     lcd.setCursor(12,1);

     lcd.print(humedadcorte);

     lcd.setCursor(15,1);

     lcd.print("%");

/*

 Depenent de la nostra variable humitat la bomba començarà a treballar o no

*/

     if(humedad<100)

     {

     digitalWrite(control,HIGH);  // Posem la variable a 1

     }

     else if(humedad>humedadcorte)

     {

     digitalWrite(control,LOW);   // Posem la variable a 0

     }

     delay(1000); // Esperem un temps

     lcd.clear();     // Netegem la pantalla LCD

}

 

 

Millora del projecte

 

Podem fer una millora del projecte connectant un mòdul Bluetooth en la placa Arduino per tal de poder accionar de manera manual, amb el mòbil, el reg de la nostra planta.

Què necessitem per fer la millora?

Quins serien els passos a seguir?