Introducindo Datos: ler un potenciómetro

Nas prácticas anteriores estivemos facendo que o Arduino actuase sobre o exterior, que fixera cousas "para afora". Agora imos ver como, desde fóra, nos podemos introducir datos que o Arduino procesará para modificar o seu comportamento. Ademais, imos ver como son as placas de prototipado ou Breadboards, que son moi útiles para facer montaxes provisionais.

Para esta montaxe só imos precisar un potenciómetro, por exemplo un de 5K ou 10K está ben, unha breadboard e cables.

(clica para ampliar)

Como ves, o potenciómetro leva a patilla do medio á entrada A0, e as dos extremos á 5V e a terra (GND). En realidade daría igual que extremo vaia a cada lado.

A Breadboard:

Utilizamos a Breadboard ou placa de prototipado rápido para facer montaxes provisionais de xeito rápido, cando queremos probar o funcionamento dun circuito antes de pasar a implementalo de xeito permanente. O seu esquema de conexións adoita ser deste xeito, hai pequenas variacións de forma pero sempre teñen as columnas de 5 furados unidas, e as ringleiras das beiras sempre están máis ou menos unidas tamén. Sempre comproba cun polímetro como funciona a túa breadboard antes de poñerte a traballar, evitarás incertidumes.

Cando cablees a breadboard lembra que, por convenio, os cables que van a terra soen poñerse de cor negra ou azul e os que van a alimentación de cor vermella.

Ler o potenciómetro:

/* Exemplo para facer a lectura dunha entrada analoxica, neste caso un potenciometro */

void setup() {

//Isto temos que facelo porque queremos ler datos no monitor serie

Serial.begin(9600);

}

void loop() {

//creamos unha variable lecturaPote onde gardamos a lectura en A0

int lecturaPote=analogRead(A0);

//dicimoslle que nos imprima ese valor no monitor serie

Serial.println (lecturaPote);

delay(100); //isto poñemosllo para que non saian demasiados datos

}

//Abre o monitor serie, a lupiña de arriba a dereita e mira as lecturas do pote

Co programa de arriba, o que facemos é ler o valor do potenciómetro. Este é un valor continuo, pero Arduino ten unha "resolución" de 1024, polo que nos devolverá valores entre 0 e 1023 (isto se debe a que almacena esta lectura en 10 bits).

Para poder ver a lectura, tes que ABRIR O MONITOR SERIE, cousa que fas premendo na lupiña de arriba á dereita no Arduino IDE. Move o potenciómetro e comproba que os valores cambian segundo a posición deste.

Blink regulado:

Agora imos mesturar o código que aprendimos no noso primeiro programa co que acabamos de aprender, para facer que a velocidade de parpadeo do LED sexa controlada por nós desde o potenciómetro.

//Parpadeo regulado con potenciómetro

//defino as variables que vou usar

int led=13;

int pote=A0;

int valorPote;

void setup(){

//defino o pin do led como saida e o pin do pote coma entrada

pinMode(led,OUTPUT);

pinMode(pote,INPUT);

}

void loop(){

//fago que a variable valorPote sexa igual que o que se le no pin pote (A0)

valorPote=analogRead(pote);

//encendo o led

digitalWrite(led,HIGH);

//espero aceso o valor que teña valorPote

delay(valorPote);

//apago o led

digitalWrite(led,LOW);

//espero apagado o valor que teña valorPote

delay(valorPote);

}

Observa o funcionamento do programa... que pasa se baixamos de todo o potenciómetro? e un chisco antes de chegar ao mínimo?

Retos:

- Consigue que o tempo que estea apagado sexa sempre de 1000 ms e que só regulemos o tempo aceso.

- Poderías facer que o tempo que estea apagado sexa a mitade do que está aceso? e o doble? PISTA: Arduino admite aplicar operacións directamente sobre as variables.

- Como conseguirías que o mínimo de tempo aceso fose de 1000 ms e o máximo de 2023 ms ?