Treat Flux like your intern. Tell it what you'd like to build and it'll get to work. You can also ask it questions, brainstorm ideas, and teach it your preferences. Learn More
Para conectar un módulo Bluetooth HC−06 a un Arduino Mega, puedes seguir estos pasos:
Conexiones
HC-06:VCC a Arduino Mega:5V: Suministra la energía necesaria al módulo Bluetooth.
HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
HC-06:TXD a Arduino Mega:RX1 (Pin 19): Permite que el módulo Bluetooth envíe datos al Arduino.
HC-06:RXD a Arduino Mega:TX1 (Pin 18): Permite que el Arduino envíe datos al módulo Bluetooth.
Notas
Asegúrate de que el módulo HC-06 esté funcionando a 5V. Algunos módulos pueden requerir un divisor de voltaje o un adaptador de nivel lógico para el pin RX del HC-06, ya que está diseñado para 3.3V. Sin embargo, muchos usuarios lo conectan directamente al pin TX del Arduino sin problemas.
En el código del Arduino, utiliza el puerto serial correspondiente (por ejemplo, Serial1 para los pines 18 y 19 en el Mega) para comunicarte con el HC-06.
Para conectar un módulo Bluetooth HC-06 a un Arduino Mega y controlar un LED, puedes seguir estos pasos:
Conexiones
Módulo Bluetooth HC-06:
HC-06:VCC a Arduino Mega:5V: Alimenta el módulo Bluetooth.
HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
HC-06:TXD a Arduino Mega:RX1 (Pin 19): Para recibir datos.
HC-06:RXD a Arduino Mega:TX1 (Pin 18): Para enviar datos. (Considera un divisor de voltaje si es necesario).
LED:
Conecta el ánodo (+) del LED a Arduino Mega:Pin digital 13 (o el que prefieras usar).
Conecta el cátodo (-) del LED a GND a través de una resistencia (por ejemplo, 220 ohmios) para limitar la corriente.
Código de Ejemplo
Aquí tienes un ejemplo de código que enciende un LED cuando el Arduino recibe el carácter '1' a través del módulo Bluetooth y lo apaga cuando recibe '0'.
Cpp
voidsetup(){ Serial1.begin(9600);// Inicializa la comunicación serial con el módulo BluetoothpinMode(13, OUTPUT);// Configura el pin 13 como salida para el LED}voidloop(){if(Serial1.available()){// Verifica si hay datos disponibles en el puerto serialchar data = Serial1.read();// Lee el dato recibidoif(data =='1'){digitalWrite(13, HIGH);// Enciende el LED}elseif(data =='0'){digitalWrite(13, LOW);// Apaga el LED}}}
Notas
Asegúrate de que el módulo Bluetooth esté configurado para comunicarse a la misma velocidad de baudios que usas en el Arduino (9600 en este caso).
Puedes utilizar cualquier aplicación de terminal Bluetooth en tu teléfono para enviar los caracteres '1' y '0' al Arduino Mega.
@copilot hazme un circuito para arduino uno y un Bluetooth HC-06 sobre unas direccionales indicando que vas para la izquierda o para la derecha con botones
Para crear un circuito que controle luces direccionales utilizando un Arduino Uno, un módulo Bluetooth HC-06, y dos botones (para indicar izquierda y derecha), podemos seguir este diseño general:
Componentes Necesarios
Arduino Uno
Módulo Bluetooth HC-06
2 LEDs (uno para cada direccional)
2 resistencias para los LEDs (220 ohmios es un buen valor)
2 botones pulsadores
2 resistencias pull-down para los botones (10k ohmios)
Cables de conexión
Protoboard
Conexiones
Módulo Bluetooth HC-06:
HC-06:VCC a Arduino Uno:5V
HC-06:GND a Arduino Uno:GND
HC-06:TXD a Arduino Uno:RX (Pin 0)
HC-06:RXD a Arduino Uno:TX (Pin 1) (utiliza un divisor de voltaje si es necesario).
LEDs:
LED para izquierda:
Ánodo: Conectar a Arduino Uno:Pin digital 8
Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
LED para derecha:
Ánodo: Conectar a Arduino Uno:Pin digital 9
Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
Botones:
Botón para izquierda:
Un extremo a Arduino Uno:Pin digital 2
Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
Botón para derecha:
Un extremo a Arduino Uno:Pin digital 3
Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
Código de Ejemplo
Aquí tienes un ejemplo de código que enciende un LED al presionar un botón y envía una señal a través del módulo Bluetooth.
Cpp
voidsetup(){ Serial.begin(9600);// Inicializa la comunicación serialpinMode(2, INPUT);// Configura el pin 2 como entrada (botón izquierda)pinMode(3, INPUT);// Configura el pin 3 como entrada (botón derecha)pinMode(8, OUTPUT);// Configura el pin 8 como salida (LED izquierda)pinMode(9, OUTPUT);// Configura el pin 9 como salida (LED derecha)}voidloop(){int leftButtonState =digitalRead(2);int rightButtonState =digitalRead(3);if(leftButtonState == HIGH){digitalWrite(8, HIGH);// Enciende el LED izquierda Serial.println("L");// Envía 'L' por Bluetooth}else{digitalWrite(8, LOW);// Apaga el LED izquierda}if(rightButtonState == HIGH){digitalWrite(9, HIGH);// Enciende el LED derecha Serial.println("R");// Envía 'R' por Bluetooth}else{digitalWrite(9, LOW);// Apaga el LED derecha}delay(100);// Pequeño retraso para estabilidad}
Este código enciende el LED correspondiente cuando el botón está presionado y envía un carácter por el puerto serial. ¿Necesitas algún ajuste o explicación adicional sobre este circuito?
Claro, puedo crear un diagrama para representar el circuito con un Arduino Uno, un módulo Bluetooth HC-06, botones, y LEDs para direccionales. Vamos a usar el lenguaje de diagramación Mermaid para mostrar las conexiones:
Diagram
Descripción:
Arduino Uno: Es el controlador principal del sistema.
Módulo HC-06: Se conecta a los pines de 5V, GND, RX y TX del Arduino para permitir la comunicación Bluetooth.
Botones: Uno para la señal de giro a la izquierda conectado al pin digital 2 y otro para la derecha conectado al pin digital 3, ambos con resistencias pull-down de 10kΩ.
LEDs: El LED de la izquierda está conectado al pin digital 8 y el de la derecha al pin digital 9, cada uno con una resistencia limitadora de corriente de 220Ω hacia GND.
Si necesitas más ajustes o tienes alguna pregunta sobre el diagrama, házmelo saber.
@copilot // declaramos los leds
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 11;
// declaramos los pulsadores de las dirrecionales
int pul_izq = A0;
int pul_par = A1;
int pul_der = A2;
// declarar el estado de los pulsadores
int dir_izq = 0;
int dir_der = 0;
int dir_par = 0;
// El tiempo
int tiempo=200;
void setup()
{
//crear un contador que esta los pin
for(int i=0;i<10;i++){
}
// los pulsadores son de entrada
pinMode(pul_izq,INPUT);
pinMode(pul_der,INPUT);
pinMode(pul_par,INPUT);
Para configurar el código de tu proyecto actual para que funcione con un módulo Bluetooth HC-06, necesitarás modificarlo para incluir una comunicación serial que reciba comandos a través del módulo Bluetooth. Supongamos que el HC-06 estará esperando comandos para activar las luces direccionales ("L" para izquierda, "R" para derecha, y "P" para parqueo) que se enviarán desde un dispositivo Bluetooth emparejado.
Aquí te muestro cómo puedes integrar esto:
Cpp
// Declaramos los LEDsint led1 =2;int led2 =3;int led3 =4;int led4 =5;int led5 =6;int led6 =7;int led7 =8;int led8 =9;int led9 =10;int led10 =11;// Declaramos los pulsadores de las direccionalesint pul_izq = A0;int pul_par = A1;int pul_der = A2;// Declaro el estado de las direccionales (iniciar apagados)bool dir_izq =false;bool dir_der =false;bool dir_par =false;// El tiempoint tiempo =200;voidsetup(){ Serial.begin(9600);// Inicializa la comunicación serial para el módulo Bluetooth// Los pulsadores son de entradapinMode(pul_izq, INPUT);pinMode(pul_der, INPUT);pinMode(pul_par, INPUT);// Configurar los pines de los LEDs como salidafor(int i =2; i <=11; i++){pinMode(i, OUTPUT);}}voidloop(){// Leer el estado de los pulsadores dir_izq =digitalRead(pul_izq); dir_der =digitalRead(pul_der); dir_par =digitalRead(pul_par);// Leer comandos desde el módulo Bluetoothif(Serial.available()){char command = Serial.read();// Lee un único carácterif(command =='L'){ dir_izq =true; dir_der =false; dir_par =false;}elseif(command =='R'){ dir_izq =false; dir_der =true; dir_par =false;}elseif(command =='P'){ dir_izq =false; dir_der =false; dir_par =true;}}// Procesar la señal de la direccional izquierdaif(dir_izq){toggleLeds({led3, led6, led10});toggleLeds({led2, led5, led9});toggleLeds({led1, led4, led8});}// Procesar la señal de la direccional derechaif(dir_der){toggleLeds({led1, led5, led8});toggleLeds({led2, led6, led9});toggleLeds({led3, led7, led10});}// Procesar la señal de parqueoif(dir_par){toggleAllLeds();}}voidtoggleLeds(std::initializer_list<int> leds){for(int led : leds){digitalWrite(led, HIGH);}delay(tiempo);for(int led : leds){digitalWrite(led, LOW);}delay(tiempo);}voidtoggleAllLeds(){for(int i =2; i <=11; i++){digitalWrite(i, HIGH);}delay(tiempo);for(int i =2; i <=11; i++){digitalWrite(i, LOW);}delay(tiempo);}
Descripción del código:
Bluetooth: Ahora está configurado para recibir caracteres 'L', 'R', y 'P' para encender las luces direccionales izquierda, derecha, y de parqueo respectivamente.
Pulsadores: Continúan funcionando como antes, puedes ejecutarlos manualmente.
Funciones toggleLeds y toggleAllLeds: Estas funciones facilitan alternar los LEDs en el patrón deseado.
Puedes enviar los caracteres apropiados desde cualquier aplicación de terminal Bluetooth en un dispositivo móvil para probar la funcionalidad. ¿Te gustaría ajustar algo más?
De acuerdo, eliminaré el código relacionado con los pulsadores y ajustaré el resto para que las direccionales se controlen exclusivamente a través del módulo Bluetooth HC-06. Aquí tienes la versión modificada:
Cpp
// Declaramos los LEDsint led1 =2;int led2 =3;int led3 =4;int led4 =5;int led5 =6;int led6 =7;int led7 =8;int led8 =9;int led9 =10;int led10 =11;// El estado de las direccionalesbool dir_izq =false;bool dir_der =false;bool dir_par =false;// El tiempoint tiempo =200;voidsetup(){ Serial.begin(9600);// Inicializa la comunicación serial para el módulo Bluetooth// Configurar los pines de los LEDs como salidafor(int i =2; i <=11; i++){pinMode(i, OUTPUT);}}voidloop(){// Leer comandos desde el módulo Bluetoothif(Serial.available()){char command = Serial.read();// Lee un único carácterif(command =='L'){ dir_izq =true; dir_der =false; dir_par =false;}elseif(command =='R'){ dir_izq =false; dir_der =true; dir_par =false;}elseif(command =='P'){ dir_izq =false; dir_der =false; dir_par =true;}}// Procesar la señal de la direccional izquierdaif(dir_izq){toggleLeds({led3, led6, led10});toggleLeds({led2, led5, led9});toggleLeds({led1, led4, led8});}// Procesar la señal de la direccional derechaif(dir_der){toggleLeds({led1, led5, led8});toggleLeds({led2, led6, led9});toggleLeds({led3, led7, led10});}// Procesar la señal de parqueoif(dir_par){toggleAllLeds();}}voidtoggleLeds(std::initializer_list<int> leds){for(int led : leds){digitalWrite(led, HIGH);}delay(tiempo);for(int led : leds){digitalWrite(led, LOW);}delay(tiempo);}voidtoggleAllLeds(){for(int i =2; i <=11; i++){digitalWrite(i, HIGH);}delay(tiempo);for(int i =2; i <=11; i++){digitalWrite(i, LOW);}delay(tiempo);}
Descripción:
Control mediante Bluetooth: Los caracteres 'L' (izquierda), 'R' (derecha), y 'P' (parqueo) se reciben a través del módulo Bluetooth y controlan los LEDs conforme a ellos.
Eliminación de pulsadores: Todos los elementos relacionados con los pulsadores han sido eliminados del código para que la operación se base completamente en los comandos recibidos vía Bluetooth.
Ahora el sistema es completamente controlado por señales Bluetooth. Si necesitas más cambios, házmelo saber.
@copilot // Declaramos los LEDs
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 11;
// Declaramos el estado de las señales
char comando; // Variable para almacenar el comando recibido por Bluetooth
int tiempo = 200;
void setup() {
// Configurar los pines de los LEDs como salida
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);
// Inicializamos la comunicación serial para el HC-06
Serial.begin(9600);
}
void loop() {
// Verificamos si hay datos disponibles en el Bluetooth
if (Serial.available() > 0) {
comando = Serial.read(); // Leer el comando recibido
// Realizar acción según el comando
switch (comando) {
case 'L': // Señal izquierda
senalIzquierda();
break;
case 'R': // Señal derecha
senalDerecha();
break;
case 'P': // Señal de parqueo
senalParqueo();
break;
case 'O': // Apagar todas las luces
apagarLuces();
break;
default:
// Comando desconocido
break;
}
void senalParqueo() {
for (int i = led1; i <= led10; i++) {
digitalWrite(i, HIGH);
}
delay(tiempo);
for (int i = led1; i <= led10; i++) {
digitalWrite(i, LOW);
}
delay(tiempo);
}
void apagarLuces() {
for (int i = led1; i <= led10; i++) {
digitalWrite(i, LOW);
}
} Corrige si algo está mal, ya que quiero que el código solo esté relacionado con el Bluetooth HC-06
Tu código parece estar bastante bien estructurado para controlar los LEDs mediante comandos enviados por un módulo Bluetooth HC-06. Haré una revisión y algunos ajustes menores para garantizar que todo funcione correctamente:
Código corregido y comentado
Cpp
// Declaramos los LEDsint led1 =2;int led2 =3;int led3 =4;int led4 =5;int led5 =6;int led6 =7;int led7 =8;int led8 =9;int led9 =10;int led10 =11;// Declaramos el estado de las señaleschar comando;// Variable para almacenar el comando recibido por Bluetoothint tiempo =200;voidsetup(){// Configurar los pines de los LEDs como salidafor(int i = led1; i <= led10; i++){pinMode(i, OUTPUT);}// Inicializamos la comunicación serial para el HC-06 Serial.begin(9600);}voidloop(){// Verificamos si hay datos disponibles en el Bluetoothif(Serial.available()>0){ comando = Serial.read();// Leer el comando recibido// Realizar acción según el comandoswitch(comando){case'L':senalIzquierda();break;case'R':senalDerecha();break;case'P':senalParqueo();break;case'O':// Apagar todas las lucesapagarLuces();break;default:// Comando desconocidobreak;}}}voidsenalIzquierda(){digitalWrite(led3, HIGH);digitalWrite(led6, HIGH);digitalWrite(led10, HIGH);delay(tiempo);digitalWrite(led3, LOW);digitalWrite(led6, LOW);digitalWrite(led10, LOW);delay(tiempo);digitalWrite(led2, HIGH);digitalWrite(led5, HIGH);digitalWrite(led9, HIGH);delay(tiempo);digitalWrite(led2, LOW);digitalWrite(led5, LOW);digitalWrite(led9, LOW);delay(tiempo);digitalWrite(led1, HIGH);digitalWrite(led4, HIGH);digitalWrite(led8, HIGH);delay(tiempo);digitalWrite(led1, LOW);digitalWrite(led4, LOW);digitalWrite(led8, LOW);}voidsenalDerecha(){digitalWrite(led1, HIGH);digitalWrite(led5, HIGH);digitalWrite(led8, HIGH);delay(tiempo);digitalWrite(led1, LOW);digitalWrite(led5, LOW);digitalWrite(led8, LOW);delay(tiempo);digitalWrite(led2, HIGH);digitalWrite(led6, HIGH);digitalWrite(led9, HIGH);delay(tiempo);digitalWrite(led2, LOW);digitalWrite(led6, LOW);digitalWrite(led9, LOW);delay(tiempo);digitalWrite(led3, HIGH);digitalWrite(led7, HIGH);digitalWrite(led10, HIGH);delay(tiempo);digitalWrite(led3, LOW);digitalWrite(led7, LOW);digitalWrite(led10, LOW);}voidsenalParqueo(){for(int i = led1; i <= led10; i++){digitalWrite(i, HIGH);}delay(tiempo);for(int i = led1; i <= led10; i++){digitalWrite(i, LOW);}delay(tiempo);}voidapagarLuces(){for(int i = led1; i <= led10; i++){digitalWrite(i, LOW);}}
Explicaciones:
Configuración inicial: Los pines se configuran como salidas mediante un bucle for, lo cual es más compacto.
Recepción de comandos: La comunicación serial se utiliza para recibir comandos específicos ('L', 'R', 'P', 'O').
Funciones dedicadas: Las funciones senalIzquierda, senalDerecha, senalParqueo y apagarLuces manejan las acciones correspondientes.
Tu código ahora se centra exclusivamente en recibir instrucciones del módulo Bluetooth para controlar los LEDs según los comandos especificados. Si necesitas agregar o cambiar algo, házmelo saber.
@copilot ayudame a hacer un círcuito para intermitentes o direccionales para un proyecto de carro con Arduino mega, que cuando presione el botón de la izquierda, prendan los leds de la izquierda, cuando presione el botón de la derecha, prendan otros leds de la derecha, y si el carro frena (presionando el botón de en medio) otros leds prendan, cada uno con sus respectivos leds, y que los leds tengan una secuencia
Para diseñar un circuito para un carro que controle las luces direccionales izquierda y derecha, así como las luces de freno utilizando un Arduino Mega, necesitarás los siguientes componentes:
Componentes Necesarios
Arduino Mega
6 LEDs (2 para cada direccional y 2 para freno)
6 resistencias (220 ohmios para limitar la corriente de los LEDs)
3 botones pulsadores
3 resistencias pull-down (10k ohmios para los botones)
Cables de conexión
Protoboard
Conexiones de Hardware
Direccionales Izquierda:
LEDs conectados a pines digitales 8 y 9.
Botón conectado al pin digital 2.
Direccionales Derecha:
LEDs conectados a pines digitales 10 y 11.
Botón conectado al pin digital 3.
Luces de Freno:
LEDs conectados a pines digitales 12 y 13.
Botón conectado al pin digital 4.
Conexiones Detalladas
Cada LED necesita estar en serie con una resistencia de 220 ohmios, con el cátodo del LED conectado a GND.
Cada botón de entrada necesita conectarse a GND a través de una resistencia de 10k ohmios (resistencia pull-down).
Código Ejemplo
Aquí tienes un ejemplo para implementar el comportamiento de las luces:
Cpp
// Pines para los LEDsint ledsIzq[]={8,9};int ledsDer[]={10,11};int ledsFreno[]={12,13};// Pines para los botonesint botonIzq =2;int botonDer =3;int botonFreno =4;// Tiempo de retardo para la secuenciaint tiempo =200;voidsetup(){// Configuración de pines para LEDs como salidafor(int i =0; i <2; i++){pinMode(ledsIzq[i], OUTPUT);pinMode(ledsDer[i], OUTPUT);pinMode(ledsFreno[i], OUTPUT);}// Configuración de pines para botones como entradapinMode(botonIzq, INPUT);pinMode(botonDer, INPUT);pinMode(botonFreno, INPUT);}voidloop(){// Leer el estado de los botonesbool estadoIzq =digitalRead(botonIzq);bool estadoDer =digitalRead(botonDer);bool estadoFreno =digitalRead(botonFreno);// Secuencia de intermitentes izquierdaif(estadoIzq){for(int i =0; i <2; i++){digitalWrite(ledsIzq[i], HIGH);delay(tiempo);digitalWrite(ledsIzq[i], LOW);}}// Secuencia de intermitentes derechaif(estadoDer){for(int i =0; i <2; i++){digitalWrite(ledsDer[i], HIGH);delay(tiempo);digitalWrite(ledsDer[i], LOW);}}// Luz de freno encendidaif(estadoFreno){for(int i =0; i <2; i++){digitalWrite(ledsFreno[i], HIGH);}}else{for(int i =0; i <2; i++){digitalWrite(ledsFreno[i], LOW);}}}
Descripción:
Intermitentes: Los LEDs parpadean en secuencia cuando se presionan los botones correspondientes a las direccionales izquierda o derecha.
Luces de Freno: Se encienden continuamente cuando se presiona el botón de freno.
Este código configura un sistema básico para el control de luces direccionales y de freno. Los botones se leen directamente, y el estado HIGH les indica estar presionados. Si necesitas ajustes o un diseño más avanzado, avísame.
Parece que tu mensaje estaba vacío. Si necesitas más información o tienes alguna pregunta sobre el proyecto de las luces direccionales, los circuitos, o cualquier otra cosa relacionada con tu diseño, por favor házmelo saber. Estoy aquí para ayudarte.
Este código juntalo con el siguiente que son intermitentes, los leds de freno configuralo con "Y" hasta que apretemos otro comando para avanzar se apagan, mientras se mantienen prendidos en el mismo freno
Los leds de izquierda configuralo al comando de "A" Y los leds de derecha configuralo al comando "O" Para cuando apretemos ese botón prendan, pero no muevas nada del primer código que es la movilidad del carro.
const int btnIzq = 2; const int btnDer = 3; const int btnFreno = 4;
const int ledsIzq[] = {5, 6, 7, 8, 9, 10}; const int ledsDer[] = {11, 12, 13, 14, 15, 16}; const int ledsFreno[] = {17, 18, 19, 20};
for (int i = 0; i < 6; i++) { pinMode(ledsIzq[i], OUTPUT); pinMode(ledsDer[i], OUTPUT); } for (int i = 0; i < 4; i++) { pinMode(ledsFreno[i], OUTPUT); }
void secuenciaIntermitente(const int leds[], int cantidad) { for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], HIGH); delay(50); } delay(200); for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], LOW); delay(50); } }
void encenderFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], LOW); } }
void apagarFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], HIGH); } }
Para fusionar ambos fragmentos de código y ajustar las funciones de los LEDs según los comandos que especificaste, haremos algunos cambios. Mantendremos la lógica de movimiento del carro intacta y combinaremos el funcionamiento de los intermitentes y las luces de freno con los comandos adicionales 'A' para las luces de izquierda, 'O' para las luces de derecha, y 'Y' para las luces de freno.
Código Combinado
Cpp
// Configuración de pines para el movimiento del carro#defineIN15#defineIN26#defineIN39#defineIN410// Configuración de pines para los LEDsconstint ledsIzq[]={22,23,24,25,26,27};// Cambié los números de pins para no interferir con IN1-IN4constint ledsDer[]={28,29,30,31,32,33};constint ledsFreno[]={34,35,36,37};voidsetup(){// Configuración de pines de salida para movimientopinMode(IN1, OUTPUT);pinMode(IN2, OUTPUT);pinMode(IN3, OUTPUT);pinMode(IN4, OUTPUT);// Configuración de pines de salida para LEDsfor(int i =0; i <6; i++){pinMode(ledsIzq[i], OUTPUT);pinMode(ledsDer[i], OUTPUT);}for(int i =0; i <4; i++){pinMode(ledsFreno[i], OUTPUT);} Serial.begin(9600);// Velocidad del módulo Bluetooth}voidloop(){if(Serial.available()){char command = Serial.read();switch(command){// Movimiento del carrocase'U':// AdelantedigitalWrite(IN1, HIGH);digitalWrite(IN2, LOW);digitalWrite(IN3, HIGH);digitalWrite(IN4, LOW);apagarFreno();break;case'D':// AtrásdigitalWrite(IN1, LOW);digitalWrite(IN2, HIGH);digitalWrite(IN3, LOW);digitalWrite(IN4, HIGH);apagarFreno();break;case'L':// IzquierdadigitalWrite(IN1, LOW);digitalWrite(IN2, LOW);digitalWrite(IN3, HIGH);digitalWrite(IN4, LOW);apagarFreno();break;case'R':// DerechadigitalWrite(IN1, HIGH);digitalWrite(IN2, LOW);digitalWrite(IN3, LOW);digitalWrite(IN4, LOW);apagarFreno();break;case'Y':// Stop y enciende luces de frenodigitalWrite(IN1, LOW);digitalWrite(IN2, LOW);digitalWrite(IN3, LOW);digitalWrite(IN4, LOW);encenderFreno();break;// Lógica de LEDscase'A':// Intermitentes izquierdasecuenciaIntermitente(ledsIzq,6);break;case'O':// Intermitentes derechasecuenciaIntermitente(ledsDer,6);break;}}}voidsecuenciaIntermitente(constint leds[],int cantidad){for(int i =0; i < cantidad; i++){digitalWrite(leds[i], HIGH);delay(50);}delay(200);for(int i =0; i < cantidad; i++){digitalWrite(leds[i], LOW);delay(50);}}voidencenderFreno(){for(int i =0; i <4; i++){digitalWrite(ledsFreno[i], HIGH);// Activa las luces de freno}}voidapagarFreno(){for(int i =0; i <4; i++){digitalWrite(ledsFreno[i], LOW);// Apaga las luces de freno}}
Notas:
Pins de LEDs: Asegúrate de que los pines usados para los LEDs (22-37 en este código) no interfieran con los pines IN1-IN4 para la movilidad.
Comandos adicionales: 'A' para intermitentes izquierda y 'O' para intermitentes derecha añaden capacidad de control a través del Bluetooth.
Luces de freno: Se encienden al recibir el comando 'Y', permaneciendo encendidas hasta que se reciba un nuevo comando de movimiento.
Si hay algo específico que necesitas cambiar o ajustar en el código, házmelo saber y puedo ayudarte con eso.
// Configuración de pines para los LEDs
const int ledsIzq[] = {22, 23, 24, 25, 26, 27}; // Cambié los números de pins para no interferir con IN1-IN4
const int ledsDer[] = {28, 29, 30, 31, 32, 33};
const int ledsFreno[] = {34, 35, 36, 37};
void setup() {
// Configuración de pines de salida para movimiento
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Configuración de pines de salida para LEDs
for (int i = 0; i 10) {
myServo.write(i);
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
checkAlerts(distance);
i++; // Incrementar solo si el objeto está lejos
stopped = false;
} else {
if (!stopped) {
Serial.println("Movimiento detenido, objeto cerca.");
stopped = true;
}
checkAlerts(distance); // Mantener alerta activada
}
delay(20);
}
i = 180;
// Rotar el servo de 180 a 0 grados y medir distancia
while (i >= 0) {
distance = calculateDistance();
displayDistanceOnLCD(distance); // Siempre mostrar la distancia
if (distance > 10) {
myServo.write(i);
Serial.print(i);
Serial.print(",");
Serial.print(distance);
Serial.print(".");
checkAlerts(distance);
i--; // Decrementar solo si el objeto está lejos
stopped = false;
} else {
if (!stopped) {
Serial.println("Movimiento detenido, objeto cerca.");
stopped = true;
}
checkAlerts(distance); // Mantener alerta activada
}
delay(20);
}
}
// Función para calcular la distancia usando el sensor ultrasónico
int calculateDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Función para mostrar la distancia en el LCD en todo momento
void displayDistanceOnLCD(int distance) {
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.print(distance);
lcd.print(" cm ");
lcd.setCursor(0, 1);
if (distance 0) {
lcd.print("OBJETO MUY CERCA ");
} else if (distance > 10 && distance 0 && distance <= 10) {
digitalWrite(led1, HIGH); // Activar LED de alerta
digitalWrite(buzzer, HIGH); // Activar buzzer
digitalWrite(led2, LOW); // Apagar LED de fuera de rango
} else {
digitalWrite(led1, LOW); // Apagar LED de alerta
digitalWrite(buzzer, LOW); // Apagar buzzer
digitalWrite(led2, HIGH); // Encender LED de fuera de rango
}
}
Para combinar ambos fragmentos de código sin interferir en la lógica de cada uno, y reasignando los pines del segundo código para acomodar los que están ocupados en el Arduino Mega, aquí está la solución:
Consideraciones de Pines
Mantendremos los pines del primer código tal como están.
Cambiaremos los pines usados en el segundo código, asegurándonos de no usar los pines 5-13 y 22-37.
Código Combinado
Cpp
#include<Servo.h>#include<LiquidCrystal.h>// Configuración de pines para el movimiento del carro#defineIN15#defineIN26#defineIN39#defineIN410// Configuración de pines para los LEDsconstint ledsIzq[]={22,23,24,25,26,27};constint ledsDer[]={28,29,30,31,32,33};constint ledsFreno[]={34,35,36,37};// Definición de pines para el LCDLiquidCrystal lcd(38,39,40,41,42,43);// Cambié los números de pines para el LCD// Definición de pines para el sensor HC-SR04constint trigPin =44;constint echoPin =45;// Pines adicionalesconstint led1 =46;// LED de alertaconstint led2 =47;// LED de objeto fuera de rangoconstint buzzer =48;// Buzzer para alerta sonoralong duration;int distance;Servo myServo;// Objeto servovoidsetup(){// Configuración de pines de salida para movimientopinMode(IN1, OUTPUT);pinMode(IN2, OUTPUT);pinMode(IN3, OUTPUT);pinMode(IN4, OUTPUT);// Configuración de pines de salida para LEDsfor(int i =0; i <6; i++){pinMode(ledsIzq[i], OUTPUT);pinMode(ledsDer[i], OUTPUT);}for(int i =0; i <4; i++){pinMode(ledsFreno[i], OUTPUT);}// Configuración de pines de Ultrasonido y otrospinMode(trigPin, OUTPUT);pinMode(echoPin, INPUT);pinMode(led1, OUTPUT);pinMode(led2, OUTPUT);pinMode(buzzer, OUTPUT); Serial.begin(9600); myServo.attach(49);// Configuración del LCD lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("BIENVENIDOS"); lcd.setCursor(0,1); lcd.print("UNIVDEP PRESENTE");delay(2000); lcd.clear();}voidloop(){// Lógica del primer código (Movimientos y LEDs)if(Serial.available()){char command = Serial.read();switch(command){// Movimiento del carrocase'U':// AdelantedigitalWrite(IN1, HIGH);digitalWrite(IN2, LOW);digitalWrite(IN3, HIGH);digitalWrite(IN4, LOW);apagarFreno();break;case'D':// AtrásdigitalWrite(IN1, LOW);digitalWrite(IN2, HIGH);digitalWrite(IN3, LOW);digitalWrite(IN4, HIGH);apagarFreno();break;case'L':// IzquierdadigitalWrite(IN1, LOW);digitalWrite(IN2, LOW);digitalWrite(IN3, HIGH);digitalWrite(IN4, LOW);apagarFreno();break;case'R':// DerechadigitalWrite(IN1, HIGH);digitalWrite(IN2, LOW);digitalWrite(IN3, LOW);digitalWrite(IN4, LOW);apagarFreno();break;case'Y':// Stop y enciende luces de frenodigitalWrite(IN1, LOW);digitalWrite(IN2, LOW);digitalWrite(IN3, LOW);digitalWrite(IN4, LOW);encenderFreno();break;// Lógica de LEDscase'A':// Intermitentes izquierdasecuenciaIntermitente(ledsIzq,6);break;case'O':// Intermitentes derechasecuenciaIntermitente(ledsDer,6);break;}}// Lógica del segundo código (Ultrasonido, Servo, LCD)int i =0;bool stopped =false;// Rotar el servo de 0 a 180 grados y medir distanciawhile(i <=180){ distance =calculateDistance();displayDistanceOnLCD(distance);// Siempre mostrar la distanciaif(distance >10){ myServo.write(i); Serial.print(i); Serial.print(","); Serial.print(distance); Serial.print(".");checkAlerts(distance); i++;// Incrementar solo si el objeto está lejos stopped =false;}else{if(!stopped){ Serial.println("Movimiento detenido, objeto cerca."); stopped =true;}checkAlerts(distance);// Mantener alerta activada}delay(20);} i =180;// Rotar el servo de 180 a 0 grados y medir distanciawhile(i >=0){ distance =calculateDistance();displayDistanceOnLCD(distance);// Siempre mostrar la distanciaif(distance >10){ myServo.write(i); Serial.print(i); Serial.print(","); Serial.print(distance); Serial.print(".");checkAlerts(distance); i--;// Decrementar solo si el objeto está lejos stopped =false;}else{if(!stopped){ Serial.println("Movimiento detenido, objeto cerca."); stopped =true;}checkAlerts(distance);// Mantener alerta activada}delay(20);}}// Funciones del primer códigovoidsecuenciaIntermitente(constint leds[],int cantidad){for(int i =0; i < cantidad; i++){digitalWrite(leds[i], HIGH);delay(50);}delay(200);for(int i =0; i < cantidad; i++){digitalWrite(leds[i], LOW);delay(50);}}voidencenderFreno(){for(int i =0; i <4; i++){digitalWrite(ledsFreno[i], HIGH);// Activa las luces de freno}}voidapagarFreno(){for(int i =0; i <4; i++){digitalWrite(ledsFreno[i], LOW);// Apaga las luces de freno}}// Funciones del segundo códigointcalculateDistance(){digitalWrite(trigPin, LOW);delayMicroseconds(2);digitalWrite(trigPin, HIGH);delayMicroseconds(10);digitalWrite(trigPin, LOW); duration =pulseIn(echoPin, HIGH); distance = duration *0.034/2;return distance;}voiddisplayDistanceOnLCD(int distance){ lcd.setCursor(0,0); lcd.print("Distancia: "); lcd.print(distance); lcd.print(" cm "); lcd.setCursor(0,1);if(distance <=10&& distance >0){ lcd.print("OBJETO MUY CERCA ");}elseif(distance >10&& distance <=500){ lcd.print(" ");}else{ lcd.print("FUERA DE RANGO ");}}voidcheckAlerts(int distance){if(distance >0&& distance <=10){digitalWrite(led1, HIGH);// Activar LED de alertadigitalWrite(buzzer, HIGH);// Activar buzzerdigitalWrite(led2, LOW);// Apagar LED de fuera de rango}else{digitalWrite(led1, LOW);// Apagar LED de alertadigitalWrite(buzzer, LOW);// Apagar buzzerdigitalWrite(led2, HIGH);// Encender LED de fuera de rango}}
Explicaciones:
Definición de Pines: Los pines para el LCD, el sensor HC-SR04, los LEDs adicionales y el buzzer fueron reasignados para evitar conflictos.
Separación de Lógica: La lógica de movimiento del carro y de los LEDs se mantiene independiente de la lógica del sensor y la pantalla LCD, combinando ambas funcionalidades en el loop().
Este código unifica las funcionalidades de ambos fragmentos de código y debe funcionar siempre que las conexiones físicas coincidan con los pines en el código. Si necesitas más cambios o ajustes, por favor avísame.
1y
2
U1
No files yet
Reviews
Documents
Documents are markdown text files which describe project goals, capture details, or even simulation outputs.
beree
copilot
- HC-06:VCC a Arduino Mega:5V: Suministra la energía necesaria al módulo Bluetooth.
- HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
- HC-06:TXD a Arduino Mega:RX1 (Pin 19): Permite que el módulo Bluetooth envíe datos al Arduino.
- HC-06:RXD a Arduino Mega:TX1 (Pin 18): Permite que el Arduino envíe datos al módulo Bluetooth.
NotasSerial1para los pines 18 y 19 en el Mega) para comunicarte con el HC-06.beree
copilot
-
Módulo Bluetooth HC-06:
- HC-06:VCC a Arduino Mega:5V: Alimenta el módulo Bluetooth.
- HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
- HC-06:TXD a Arduino Mega:RX1 (Pin 19): Para recibir datos.
- HC-06:RXD a Arduino Mega:TX1 (Pin 18): Para enviar datos. (Considera un divisor de voltaje si es necesario).
-
LED:
- Conecta el ánodo (+) del LED a Arduino Mega:Pin digital 13 (o el que prefieras usar).
- Conecta el cátodo (-) del LED a GND a través de una resistencia (por ejemplo, 220 ohmios) para limitar la corriente.
Código de Ejemploberee
copilot
- Arduino Uno
- Módulo Bluetooth HC-06
- 2 LEDs (uno para cada direccional)
- 2 resistencias para los LEDs (220 ohmios es un buen valor)
- 2 botones pulsadores
- 2 resistencias pull-down para los botones (10k ohmios)
- Cables de conexión
- Protoboard
Conexiones-
Módulo Bluetooth HC-06:
- HC-06:VCC a Arduino Uno:5V
- HC-06:GND a Arduino Uno:GND
- HC-06:TXD a Arduino Uno:RX (Pin 0)
- HC-06:RXD a Arduino Uno:TX (Pin 1) (utiliza un divisor de voltaje si es necesario).
-
LEDs:
- LED para izquierda:
- Ánodo: Conectar a Arduino Uno:Pin digital 8
- Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
- LED para derecha:
- Ánodo: Conectar a Arduino Uno:Pin digital 9
- Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
-
Botones:
- Botón para izquierda:
- Un extremo a Arduino Uno:Pin digital 2
- Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
- Botón para derecha:
- Un extremo a Arduino Uno:Pin digital 3
- Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
Código de Ejemploberee
copilot
beree
copilot
toggleLedsytoggleAllLeds: Estas funciones facilitan alternar los LEDs en el patrón deseado.beree
copilot
beree
copilot
for, lo cual es más compacto.senalIzquierda,senalDerecha,senalParqueoyapagarLucesmanejan las acciones correspondientes.beree
copilot
- Arduino Mega
- 6 LEDs (2 para cada direccional y 2 para freno)
- 6 resistencias (220 ohmios para limitar la corriente de los LEDs)
- 3 botones pulsadores
- 3 resistencias pull-down (10k ohmios para los botones)
- Cables de conexión
- Protoboard
Conexiones de Hardware-
Direccionales Izquierda:
- LEDs conectados a pines digitales 8 y 9.
- Botón conectado al pin digital 2.
-
Direccionales Derecha:
- LEDs conectados a pines digitales 10 y 11.
- Botón conectado al pin digital 3.
-
Luces de Freno:
- LEDs conectados a pines digitales 12 y 13.
- Botón conectado al pin digital 4.
Conexiones Detalladas- Cada LED necesita estar en serie con una resistencia de 220 ohmios, con el cátodo del LED conectado a GND.
- Cada botón de entrada necesita conectarse a GND a través de una resistencia de 10k ohmios (resistencia pull-down).
Código Ejemploberee
copilot
beree
copilot
beree
copilot
beree
copilot
- Mantendremos los pines del primer código tal como están.
- Cambiaremos los pines usados en el segundo código, asegurándonos de no usar los pines 5-13 y 22-37.
Código Combinado Explicaciones:loop().