map() – Adaptar señales – Ejemplo con Arduino Nº 13

Con la función map(), podemos adaptar un valor de un rango determinado a otro con un rango diferente, es decir, podemos “escalar” una señal a nuestra conveniencia. En el ejemplo siguiente, vas a adaptar una señal de entrada analógica, que va de 0 a 1023, a una señal también analógica, pero esta vez con un margen de valores que va de 0 a 255. osea que cuando la señal de entrada vale cero la señal de salida también valdrá cero, pero cuando la señal de entrada sea 1023 la señal de salida tomará un valor de 255, y así proporcionalmente para todos los valores intermedios.

Además de todo lo anterior, colocarás un LED en la salida analógica del pin número 9, y utilizarás el monitor serie para ver los valores, tanto el valor de entrada (0-1023), como el valor de salida(0-255).

HARDWARE NECESARIO:

Para realizar este circuito necesitarás:

  • Tarjeta Arduino o Genuino
  • Potenciómetro
  • Led rojo
  • Resistencia de 220 ohmios
  • Protoboard
  • Cables de conexión

CIRCUITO:

Para montar este ejemplo utilizarás cualquiera de los circuitos que ya has utilizado antes, para trabajar con entradas analógicas

CÓDIGO:

En este programa la placa Arduino está constantemente leyendo el valor de la entrada analógica, y mediante la función map(valor, MinimoValorEntrada, MaximoValorEntrada, MinimoValorSalida, MaximoValorSalida), escalaremos el valor de la variable y lo mostraremos en la salida 9.

El programa definitivo queda así:

const int PinEntradaAnalogico=A0;

const int PinSalidaAnalogico=9;

int ValorLeido=0;

int ValorSalida=0;

void setup()

{

Serial.begin(9600);

}

void loop()

{

ValorLeido=analogRead(PinEntradaAnalogico);

ValorSalida=map(ValorLeido,0,1023,0,255);

analogWrite(PinSalidaAnalogico,ValorSalida);

Serial.print(“sensor = “);

Serial.print(ValorLeido);

Serial.print(“\t output = “);

Serial.println(ValorSalida);

delay(2);

}

 

Contar el número de pulsaciones – Ejemplo con Arduino Nº 12

Para hacer un contador con Arduino para contar el número de pulsaciones, debemos contar las veces que se acciona un pulsador, recuerda que cuando decimos pulsador, puede ser un final de carrera o cualquier otro detector de dos estados, en definitiva, contaremos las veces que cambia de estado el pulsador, esto se denomina detección de cambio de estado o detector de flanco.

HARDWARE NECESARIO:

Para realizar este circuito necesitarás:

  • Tarjeta Arduino o Genuino
  • Pulsador
  • Resistencia de 10K
  • Protoboard
  • Cables de conexión

CIRCUITO:

Para montar este ejemplo utilizarás cualquiera de los circuitos que ya has utilizado antes, para trabajar con entradas digitales.

Para ello conectarás uno de los extremos de la resistencia a masa y el otro extremo a una de las patillas del pulsador, la otra patilla del pulsador la conectarás a +Vcc, y por último el nudo que hay entre los dos componentes lo conectarás a la entrada digital número 2.

CÓDIGO:

En este programa la placa Arduino está constantemente leyendo el estado del pulsador, y si este ha cambiado respecto al estado anterior, y el estado es alto, incrementa en uno el contador. Además de ello si el número contado es múltiplo de 3 enciende un led, de lo contrario lo apaga.

El programa definitivo queda así:

const int Pulsador=2;

const int Led=13;

int ContadorDePulsaciones=0;

int EstadoDelPulsador=0;

int AnteriorEstadoDelPulsador=0;

void setup()

{

                pinMode(Pulsador,INPUT);

                pinMode(Led,OUTPUT);

                Serial.begin(9600);

}

void loop()

{

EstadoDelPulsador=digitalRead(Pulsador);

If(EstadoDelPulsador ¡=AnteriorEstadoDelPulsador)

{

                If(EstadoDelPulsador==HIGH)

{

ContadorDePulsaciones++;

Serial.println(“Pulsador pulsado”);

Serial.print(“El número de veces que has accionado el pulsador es: “

Serial.println(ContadorDePulsaciones);

}

else

{

                Serial.println(“Pulsador sin pulsar”);

}

AnteriorEstadoDelPulsador=EstadoDelPulsador;

If(ContadorDePulsaciones % 3 == 0)

{

                digitalWrite(Led, HIGH);

}

else

{

                digitalWrite(Led,LOW);

}

}

}

 

Resistencia INPUT_PULLUP – Ejemplo con Arduino Nº 11

En este ejemplo te enseñaré el uso de la resistencia INPUT_PULLUP con pinMode(). También monitorizaremos el estado del pulsador mediante el puerto serie que comunica la placa Arduino al PC mediante el cable USB (Universal Serial Bus).

HARDWARE NECESARIO:

Para realizar este circuito necesitarás:

  • Tarjeta Arduino o Genuino
  • Pulsador
  • Protoboard
  • Cables de conexión

CIRCUITO:

En este circuito simplemente te quiero enseñar el concepto de la resistencia INPUT_PULLUP, que es una resistencia interna que tiene el arduino para evitar sobreintensidades. Así que en este circuito utilizaremos solamente un pulsador conectado a masa y al pin 2 de la placa de Arduino, así pues, cuando acciones el pulsador la entrada leerá LOW, pues estarás conectándolo a masa, y cuando no presiones el pulsador estará leyendo HIGH.

CÓDIGO:

En este programa la placa Arduino está constantemente leyendo el estado del pulsador, a través de la función digitalRead(), y hará una comparación sencilla, si la lectura del pulsador es HIGH, apagará el Led del pin número 13, y si la lectura del pulsador es LOW, encenderá el citado pin, además de todo ello, mostrarás la lectura del pulsador en el monitor del puerto serie con la instrucción Serial.println().

 

El programa definitivo queda así:

// Resistencia interna INPUT_PULLUP – www.aprobarfacil.com

void setup()

{

                Serial.begin(9600);

                pinMode(2, INPUT_PULLUP);

                pinMode(13, OUTPUT);

}

void loop()

{

int LecturaPulsador=digitalRead(2);

Serial.println(LecturaPulsador);

If(LecturaPulsador==HIGH)

{

digitalWrite(13,LOW);

}

else

{

                digitalWrite(13,HIGH);

}

}

Evitar rebotes de los pulsadores – Ejemplo con Arduino Nº 10

En algunos casos es necesario evitar rebotes de los pulsadores, como por ejemplo en el caso de contadores, los rebotes se generan por problemas mecánicos o físicos, estos rebotes es posible que la placa de Arduino los lea como múltiples pulsaciones en un corto periodo de tiempo, consiguiendo así engañar al programa.

En este ejemplo te muestro como conseguir evitar el efecto de los rebotes mediante software, para ello comprobaremos varias veces el estado de la entrada en un muy corto periodo de tiempo, para asegurar que el botón ha sido presionado, para ello utilizaremos de nuevo la función millis() y un periodo de tiempo en el que no se contarán los rebotes del pulsador.

En este ejemplo, cada vez que le des al pulsador cambiará el estado del Led, si está encendido se apagará y si está apagado se encenderá.

CIRCUITO:

Para este circuito utilizaremos de nuevo el circuito utilizado en el ejemplo de entradas digitales.

CÓDIGO:

const int Boton=2;

const int Led=13;

int EstadoDelLed=HIGH;

int EstadoDelBoton;

int EstadoAnteriorDelLed=LOW;

unsigned long TiempoDeLaUltimaPulsacion=0;

unsigned long MargenDePulsacion=50;

void setup()

{

                pinMode(Boton, INPUT);

                pinMode(Led, OUTPUT);

                digitalWrite(Led, EstadoDelLed);

}

void loop()

{

                int Lectura=digitalRead(Boton);

                if (Lectura !=EstadoAnteriorDelLed)

                {

                TiempoDeLaUltimaPulsacion=millis();

}

                If((millis() – TiempoDeLaUltimaPulsacion) > MargenDePulsacion)

                {

                if(Lectura != EstadoDelBoton)

                {

                EstadoDelBoton=Lectura;

                If(EstadoDelBoton=HIGH)

                {

                                EstadoDelLed= ¡EstadoDelLed;

}

}

}

}

Evitar rebotes de los pulsadores – Ejemplo con Arduino Nº 09

En algunos casos es necesario evitar rebotes de los pulsadores, como por ejemplo en el caso de contadores, los rebotes se generan por problemas mecánicos o físicos, estos rebotes es posible que la placa de Arduino los lea como múltiples pulsaciones en un corto periodo de tiempo, consiguiendo así engañar al programa y c0ntar tres o cuatro pulsaciones en vez de una.

En este ejemplo te muestro como conseguir evitar el efecto de los rebotes mediante software, para ello comprobaremos varias veces el estado de la entrada en un muy corto periodo de tiempo, para asegurar que el botón ha sido presionado, para ello utilizaremos de nuevo la función millis() y un periodo de tiempo en el que no se contarán los rebotes del pulsador.

En este ejemplo, cada vez que le des al pulsador cambiará el estado del Led, si está encendido se apagará y si está apagado se encenderá.

CIRCUITO:

Para este circuito utilizaremos de nuevo el circuito utilizado en el ejemplo de entradas digitales.

CÓDIGO:

const int Boton=2;

const int Led=13;

int EstadoDelLed=HIGH;

int EstadoDelBoton;

int EstadoAnteriorDelLed=LOW;

unsigned long TiempoDeLaUltimaPulsacion=0;

unsigned long MargenDePulsacion=50;

void setup()

{

                pinMode(Boton, INPUT);

                pinMode(Led, OUTPUT);

                digitalWrite(Led, EstadoDelLed);

}

void loop()

{

int Lectura=digitalRead(Boton);

if (Lectura !=EstadoAnteriorDelLed)

{

TiempoDeLaUltimaPulsacion=millis();

}

                If((millis() – TiempoDeLaUltimaPulsacion) > MargenDePulsacion)

{

if(Lectura != EstadoDelBoton)

                {

                EstadoDelBoton=Lectura;

                If(EstadoDelBoton=HIGH)

                {

                                EstadoDelLed= ¡EstadoDelLed;

}

}

}

}

Timbre con un pulsador – Ejemplo con Arduino Nº 08

En este ejemplo te voy a enseñar cómo crear un circuito de un timbre con un pulsador, eso sí, sustituiremos el timbre por un diodo LED, aunque te invito a probar con un piezoeléctrico, si quieres obtener un sonido en vez de una luz, aunque para aprender el concepto es suficiente con un LED.

Antes de nada, debes comprender el funcionamiento del pulsador, el pulsador es un componente electrónico que une dos puntos del circuito cuando lo presionas, también es llamado Botón.

CIRCUITO:

En este montaje utilizaremos el mismo circuito que en el ejemplo de entradas digitales, es decir utilizaremos una resistencia de 10K conectada a GND por un extremo, y por el otro conectaremos uno de los extremos del pulsador y el otro del pulsador lo conectaremos a Vcc, y es del nudo de la intersección de estos dos componentes de donde sacaremos la señal que llevaremos a la entrada digital 2 de la placa de Arduino.

Cuando el pulsador no está accionado, la patilla 2 del Arduino lee un “cero” es decir cero voltios, y cuando el componente es pulsado, la patilla 2 del Arduino lee un “uno” es decir cinco voltios.

Es necesario recordar, que si en una entrada digital de Arduino, no está conectada ni a GND ni a Vcc, no se puede saber cuál será el valor que estará leyendo en ese momento.

CÓDIGO:

En este caso en la función setup(), inicializamos el Pin 13 como salida mediante la variable Led, y el Pin 2 como entrada mediante la variable, Boton.

En la función loop() leemos si está accionado o no el pulsador mediante la función digitalRead(), la cual nos deja su lectura en la variable EstadoDelBoton.

Por último, simplemente hacemos una comparación para conocer el EstadoDelBoton, y en el caso de que esté activado encenderemos el Led mediante la función digitalWrite(), pasándole el parámetro HIGH y en caso contrario, apagaremos el Led con la misma función digitalWrite(), pero en este último caso, pasándole el parámetro LOW.

El código definitivo queda de la siguiente manera:

const int Boton =2;

const int Led=13;

int EstadoDelBoton=0;

void setup()

{

                pinMode(Led, OUTPUT);

                pinMode(Boton, INPUT);

}

void loop()

{

                EstadoDelBoton=digitalRead(Boton);

                If (EstadoDelBoton==HIGH)(

                {

                               digitalWrite(Led,HIGH);

}

else

{

                digitalWrite(Led,LOW);

}

}

Espero que te haya sido útil este ejemplo, y recuerda que tienes cursos completos de Arduino en el aula virtual de aprobarfacil.com.


Entrada al AULA VIRTUAL de aprobarfacil.com

Parpadeo sin utilizar delay – Ejemplo con Arduino Nº 07

Para utilizar las funciones de tipo parpadeo sin utilizar delay, porque a veces necesitas hacer dos cosas a la vez con Arduino, por ejemplo, en el ejemplo del parpadeo, mientras utilizas la función delay(), el procesador está inactivo y no puede responder a los posibles cambios en las entradas, es decir, que si quiere hacer por ejemplo un semáforo interactivo, en el que exista un pulsador de peatones, es imposible hacerlo utilizando la función delay().

En el siguiente ejemplo te mostraré como hacer una secuencia de LEDs y además leer el valor de una entrada. Para ello utilizaremos una función propia del IDE de Arduino llamada millis(), que es una función propia del IDE que nos devuelve un valor que expresa el tiempo que ha pasado desde que se inició el programa, en milisegundos.

El concepto que existe detrás de este algoritmo es ir comprobando si el botón se ha pulsado continuamente, dentro de la función loop(), cada vez que apaguemos o encendamos el LED, anotaremos el momento en el que ha sucedido, y si el tiempo que ha pasado desde que se inició el programa menos el último cambio supera el valor del tiempo de cambio de estado, cambiaremos de nuevo el estado del LED.

En este programa te enseñaré como hacerlo.

CIRCUITO:

Para hacer este circuito utilizaremos cualquier montaje de un LED con una resistencia.

CÓDIGO:

const int Led = LED_BUILTIN;

int EstadoDelLed=LOW;

unsigned long TiempoUltimoCambio=0;

const long Intervalo = 1000;

void setup()

{

pinMode(Led, OUTPUT);

}

void loop()

{

unsigned long TiempoAhora = millis();

if (TiempoAhora – TiempoUltimoCambio >= Intervalo)

{

TiempoUltimoCambio = TiempoAhora;

If ( EstadoLed = LOW)

{

EstadoLed=HIGH;

}

Else

{

EstadoLed=LOW;

}

digitalWrite(Led, EstadoLed);

}

}

 

Voltímetro – Ejemplo con Arduino Nº 06

En este ejemplo te voy a enseñar como hacer un voltímetro con Arduino, leiendo el valor de un pin analógico y mostrar el valor de tensión correspondiente en el monitor serie, es decir vamos a construir un votímetro simple con Arduino.

Para ello conectaremos un potenciómetro con sus dos patillas de los extremos conectadas a GND y Vcc respectivamente y la patilla común del potenciómetro en la entrada A0, que es una entrada analógica de la placa de Arduino.

Si conectamos correctamente el potenciómetro, en uno de los extremos mostrará 5 voltios en la patilla A0 y en el otro extremo 0 Voltios pasando por todos los valores que nos proporciona el conversor analógico a digital es decir 5 Voltios/1023 valores. Así que para obtener el valor de tensión, multiplicarás el valor obtenido de dividir 5/1023 por el valor leído en la patilla A0 de la placa Arduino, mediante la función analogRead().

En este programa utilizaremos una variable de tipo float, que nos permitirá tener una medición más ajustada al valor real de la tensión.

CÓDIGO

void setup()

{

Serial.begin(9600);

}

void loop()

{

int ValorLeido=analogRead(A0);

float Voltaje = ValorLeido * (5.0 / 1023.0);

Serial.println (Voltaje);

}

analogRead() – Lectura de entradas analógicas – Ejemplo con Arduino Nº 05

En este ejemplo te enseñare como leer el valor presente en una entrada analógica, mediante la función analogRead(), usando un potenciómetro que simulará una señal proveniente de un sensor.

El potenciómetro es el mecanismo más simple para obtener una señal eléctrica variable. Conectando los dos extremos del potenciómetro a la tensión de alimentación y a masa respectivamente, dispondrás en la patilla común una señal eléctrica variable entre 0 voltios y Vic (Tensión de alimentación), podrás crear un divisor de tensión que simulará la señal eléctrica que te proporcionaría un sensor de cualquier magnitud física.

En este ejemplo, además veremos el valor que nos proporciona el conversor analógico integrado dentro de la placa arduino, a través del monitor del puerto serie.

CIRCUITO ELÉCTRICO

analogreadserial_bb
analogreadserial_bb

Para la realización de este circuito, conectaremos una de las patillas del extremo del potenciómetro a masa (GND) y el otro extremo a 5 voltios (Vcc), la patilla del centro del potenciómetro la conectaremos a la entrada analógica A2.

Cuando el potenciómetro se encuentra en uno de los extremos tendrás en la patilla del centro, O voltios y cuando este girado hasta el otro extremo tendrás 5 voltios en la patilla del medio del potenciómetro.

La placa de Arduino tiene un conversor de Analógico a Digital que te proporciona un valor de 0 cuando en la patilla tienes 0 Voltios y 1023 cuando la tensión en la patilla es de 5 voltios. El valor leído por el conversor analógico a digital (ADC) se lee mediante la función analogRead() que te devuelve un valor entre 0 y 1023, proporcionalmente a la tensión aplicada al pin de entrada analógica.

CÓDIGO

void setup()

{

Serial.begin(9600);

}

void loop()

{

int LecturaDelSensor= analogRead(A2);

Serial.println(LecturaDelSensor);

}

Recuerda abrir el monitor del Puerto serie que se encuentra en la esquina superior derecha del IDE de Arduino.

analogWrite() – Manejo de salidas analógicas – Ejemplo con Arduino Nº 04

En este ejemplo voy a tratar de explicarte cómo funciona la salida analógica de tu placa Arduino, para ello utilizaré la función analogWrite(), una salida con un “falso valor analógico” ya que utiliza una modulación por ancho de pulso para proporcionarnos un valor de tensión analógico (que puede variar entro dos valores sin perder su continuidad).

Así como la función analogRead() puede leer valores que van del 0 al 1023, con la función analogWrite() solamente podrás escribir valores de 0 a 255 en la salida analógica.

Las salidas analógicas son aquellas que tienen el símbolo de la corriente alterna ( ~ ) serigrafiado en su costado.

CIRCUITO:

Para realizar el circuito de este ejemplo conectarás el ánodo del diodo LED al pin de la salida digital 9, a través de una resistencia de 220 ohmios, y la otra patilla del LED, el cátodo la conectarás directamente a masa.

CÓDIGO:

Para comprobar el funcionamiento de esta función utilizaremos una variable Brillo que irá variando su valor de 0 a 255 y de 255 a 0 sucesivamente, con lo que conseguirás que el LED se valla encendiendo y apagando progresivamente, en lugar del ejemplo del parpadeo, en el que el LED se encendía y apagaba en un TODO / NADA, APAGADO / ENCENDIDO.

El programa definitivo quedará de la siguiente manera:

int LED=9;                                           // Asigno a la variable LED el valor 9

int Brillo = 0;                                      // Asigno a la variable Brillo el valor 0

int IncrementoBrillo = 5;               // Asigno a la variable IncrementoBrillo el valor 5

void setup()

{

pinMode( LED, OUTPUT);  // Establezco el pin 9 como salida

}

void loop()

{

analogWrite( LED, Brillo);                // Envío al pin 9 el valor de la variable Brillo

Brillo = Brillo + IncrementoBrilo   // Incremento el Brillo para la próxima iteración

If(Brillo <= 0 || Brillo >= 255)      // Si el brillo llega a su límite superior o inferior

{

IncrementoBrillo = -IncrementoBrillo     // Cambio de incremento a decremento según

}                                                                             // convenga

delay(30);            // Espero 30 milisegundos para poder observar el efecto

}

Con este simple programa podrás observar el efecto de la salida analógica, te invito a utilizar el monitor serie, y la función Serial.println() para poder observar cuantitativamente el valor que enviamos al LED y a hallar la correspondiente función de equivalencia en voltios de los valores de salida.