Control de ventilador, servomotor y led con un menú en el monitor serial.

Funcionamiento

El objetivo de este proyecto es crear un menú principal en un Arduino que permita controlar un ventilador, un LED y un servomotor mediante el monitor serial. A continuación se detallan las opciones y funciones del menú.

Menú Principal

Menú ventilador

  1. Encender ventilador
  2. Apagar ventilador

Menú led

  1. Encender led
  2. Apagar led

Menú servomotor

  1. Introduce el ángulo


Componentes

  • Placa Arduino (por ejemplo, Arduino Uno)
  • Relé de 5V
  • Resistencia de 330 ohmios
  • Ventilador de 5V
  • Led
  • Servomotor 5v
  • Protoboard (opcional)

Conexiones

Conexión del teclado 4×4:

  • Fila 1 del teclado matricial a pin 9 del Arduino.
  • Fila 2 del teclado matricial a pin 8 del Arduino.
  • Fila 3 del teclado matricial a pin 7 del Arduino.
  • Fila 4 del teclado matricial a pin 6 del Arduino.
  • Fila 5 del teclado matricial a pin 5 del Arduino.
  • Fila 6 del teclado matricial a pin 4 del Arduino.
  • Fila 7 del teclado matricial a pin 3 del Arduino.
  • Fila 8 del teclado matricial a pin 2 del Arduino.

Conexiones del Rele:

  • Conecta la entrada del relé (IN) al pin 11 de la placa Arduino.
  • Conecta el pin VCC del relé al pin de 5V de la placa Arduino.
  • Conecta el pin GND del relé al pin GND de la placa Arduino.
  • Conecta el ventilador a la fuente de alimentación(5v) y al relé(común y normalmente cerrado).

Conexiones del Servo:

  • Conecta la entrada del servo(IN) al pin 10 de la placa Arduino.
  • Conecta el pin VCC del servo al pin de 5V de la placa Arduino.
  • Conecta el pin GND del servo al pin GND de la placa Arduino.

Conexión del LED:

  • Conecta el LED al pin 12 del Arduino y al GND, usando una resistencia 330 ohmios.

Código

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <Arduino.h>
#include <Keypad.h>
#include <Servo.h>

  void fanMenu();
  void ledMenu();
  void servoMenu();
  void mainMenu();
  void handleMainMenu(char);

const byte ROWS = 4; // Cuatro filas
const byte COLS = 4; // Cuatro columnas

char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6}; // Conectar a las salidas de fila del teclado
byte colPins[COLS] = {5, 4, 3, 2}; // Conectar a las salidas de columna del teclado

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
Servo myservo;

int servoPin = 10;
int fanPin = 11;
int ledPin = 12;

void setup() {
  Serial.begin(9600);
  pinMode(fanPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  myservo.attach(servoPin);
  mainMenu();
}

void loop() {
  char key = keypad.getKey();
  if (key) {
    handleMainMenu(key);
  }
}

void mainMenu() {  
  Serial.println();
  Serial.println("Menu Principal");  
  Serial.println();
  Serial.println("1: Ventilador");
  Serial.println("2: LED");
  Serial.println("3: Servomotor");
}

void handleMainMenu(char key) {
  switch (key) {
    case '1':
      fanMenu();
      break;
    case '2':
      ledMenu();
      break;
    case '3':
      servoMenu();
      break;
    default:
      mainMenu();
  }
}

void fanMenu() {
  Serial.println();
  Serial.println("Menu Ventilador");  
  Serial.println();
  Serial.println("1: Encender Ventilador");
  Serial.println("2: Apagar Ventilador");
  char key = keypad.waitForKey();
  switch (key) {
    case '1':
      digitalWrite(fanPin, HIGH);
      mainMenu();
      break;
    case '2':
      digitalWrite(fanPin, LOW);
      mainMenu();
      break;
    case '#':
      mainMenu();
      break;
  }
}

void ledMenu() {
  Serial.println();
  Serial.println("Menu Led");  
  Serial.println();
  Serial.println("1: Encender LED");
  Serial.println("2: Apagar LED");
  char key = keypad.waitForKey();
  switch (key) {
    case '1':
      digitalWrite(ledPin, HIGH);
      mainMenu();
      break;
    case '2':
      digitalWrite(ledPin, LOW);
      mainMenu();
      break;
    case '#':
      mainMenu();
      break;
  }
}

void servoMenu() {
  Serial.println();
  Serial.println("Menu Servo");  
  Serial.println();
  Serial.println("Ingrese el angulo:");
  String angleStr = "";
  char key;
  while ((key = keypad.waitForKey()) != '*') {
    if (key >= '0' && key <= '9') {
      angleStr += key;
      Serial.print(key);
    } else if (key == '#') {
      mainMenu();
      return;
    }
  }
  int angle = angleStr.toInt();
  myservo.write(angle);
  mainMenu();
}


Diseños


Videos


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compra