Arduino Nano - Botón - Relé

Este tutorial explica cómo usar el Arduino Nano y un botón para controlar el relé. Al conectar el relé a una cerradura de solenoide, una bombilla, una tira de LEDs, un motor o un actuador, podemos usar un botón para controlarlos. Aprenderemos dos aplicaciones diferentes:

Aplicación 1 - El estado del relé está sincronizado con el estado del botón. En detalle:

Aplicación 2 - El estado del relé se alterna cada vez que se presiona el botón. Más específicamente:

En la Aplicación 2, necesitamos aplicar el filtrado de rebote al botón para asegurarnos de que funcione correctamente. Veremos por qué es importante al comparar cómo se comporta el relé cuando usamos el código de Arduino con y sin aplicar el filtrado de rebote al botón.

Acerca de Relé y Botón

Si no está familiarizado con el relé y el botón (incluyendo el pinout, el funcionamiento y la programación), los siguientes tutoriales pueden ayudar:

Diagrama de Cableado

Diagrama de cableado del relé de botón Arduino Nano

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

Aplicación 1 - El estado del relé está sincronizado con el estado del botón

Código de Arduino Nano

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-button-relay */ const int BUTTON_PIN = 8; // The Arduino Nano pin connected to button's pin const int RELAY_PIN = 2; // The Arduino Nano pin connected to relay's pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode pinMode(RELAY_PIN, OUTPUT); // set arduino pin to output mode } void loop() { int button_state = digitalRead(BUTTON_PIN); // read new state if (button_state == LOW) { Serial.println("The button is being pressed"); digitalWrite(RELAY_PIN, HIGH); // turn on } else if (button_state == HIGH) { Serial.println("The button is unpressed"); digitalWrite(RELAY_PIN, LOW); // turn off } }

Pasos R\u00e1pidos

  • Conecta un Arduino Nano a tu ordenador con un cable USB.
  • Abre el IDE de Arduino y selecciona la placa correcta y el puerto correcto.
  • Copia el código y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código al Arduino Nano.
Subir código en el IDE de Arduino
  • Presione el botón y manténgalo presionado durante unos segundos.
  • Observe el cambio en el estado del relé.

Verás que el estado del relé está sincronizado con el estado del botón.

Explicación del código

¡Consulta la explicación línea por línea contenida en los comentarios del código fuente!

Aplicación 2 - El botón alterna el relé

Código de Arduino Nano - El botón cambia el estado de un relé sin anti-rebote

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-button-relay */ const int BUTTON_PIN = 8; // The Arduino Nano pin connected to button's pin const int RELAY_PIN = 2; // The Arduino Nano pin connected to relay's pin int relay_state = LOW; // The current state of relay int prev_button_state; // The previous state of button int button_state; // The current state of button void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode pinMode(RELAY_PIN, OUTPUT); // set arduino pin to output mode button_state = digitalRead(BUTTON_PIN); } void loop() { prev_button_state = button_state; // save the last state button_state = digitalRead(BUTTON_PIN); // read new state if(prev_button_state == HIGH && button_state == LOW) { Serial.println("The button is pressed"); // toggle state of relay relay_state = !relay_state; // control relay according to the toggled state digitalWrite(RELAY_PIN, relay_state); } }

Explicación del código

Puede encontrar la explicación en las líneas de comentario del código del Arduino Nano que se encuentra arriba.

En el código, la expresión relay_state = !relay_state es equivalente al siguiente código:

if(relay_state == LOW) relay_state = HIGH; else relay_state = LOW;

Pasos R\u00e1pidos

  • Copia el código y ábrelo en el IDE de Arduino.
  • Sube el código al Arduino Nano.
  • Presiona el reinicio y el botón varias veces.
  • Comprueba el cambio en el estado del relé.

Puede que notes que el relé se enciende o apaga cada vez que presionas el botón, pero no siempre será lo mismo. A veces puede conmutar rápidamente varias veces con una sola pulsación del botón, o podría no conmutar en absoluto (conmutar dos veces muy rápido, lo cual no se puede ver a simple vista).

Para resolver este problema, necesitamos anti-rebote para el botón.

Código de Arduino Nano - Botón que alterna el relé con antirrebote

El rebote de un botón puede ser un desafío para los principiantes. Afortunadamente, la biblioteca ezButton facilita su uso.

¿Por qué es necesario el anti-rebote? Consulta el tutorial de rebote de botón de Arduino Nano para obtener más información.

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-button-relay */ #include <ezButton.h> const int BUTTON_PIN = 8; // The Arduino Nano pin connected to button's pin const int RELAY_PIN = 2; // The Arduino Nano pin connected to relay's pin ezButton button(BUTTON_PIN); // create ezButton object for pin 7; int relay_state = LOW; // The current state of relay void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(RELAY_PIN, OUTPUT); // set arduino pin to output mode button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if(button.isPressed()) { Serial.println("The button is pressed"); // toggle state of relay relay_state = !relay_state; // control relay according to the toggled state digitalWrite(RELAY_PIN, relay_state); } }

Pasos R\u00e1pidos

  • Instala la biblioteca ezButton. Consulta Cómo hacerlo para instrucciones.
  • Copia el código y ábrelo con Arduino IDE.
  • Haz clic en el botón Subir en el IDE de Arduino para cargar el código en el Arduino Nano.
  • Presiona y suelta el botón varias veces.
  • Observa el cambio de estado del relé.

Notará que el relé se encenderá o apagará solo una vez cada vez que presione el botón.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!