Buenos días, soy un granjero medio inventor y necesito ayuda, estoy construyendo un carro autónomo con ruedas de 12v, sensor de ultrasonidos con servomotor, todo ello para poder aplicar ozono y UVC a las naves para poder desinfectarlas.
El carro ya lo tengo construido pero llevo varias semanas atrancado con el Arduino ya que no tengo ni idea de programación y todo lo que he intentado me da error cuando hago la programación en arduino.
Tengo el arduino UNO R4 WIFI.
Este es el ultimo error:
Missing FQBN (Fully Qualified Board Name)
Compilation error: Missing FQBN (Fully Qualified Board Name)
El error se produce porque no has elegido una placa en el entorno de programación, te dejo el enlace (en ingles) donde lo explica:
Compilation error: Missing FQBN (Fully Qualified Board Name)
Ok, perfecto se ha quitado el error anterior pero al verificar ahora me sale esto.
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino: In function 'void setup()':
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino:164:6: error: redefinition of 'void setup()'
void setup() {
^~~~~
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino:113:6: note: 'void setup()' previously defined here
void setup() {
^~~~~
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino: In function 'void loop()':
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino:169:6: error: redefinition of 'void loop()'
void loop() {
^~~~
C:\Users\FCavas\Desktop\sketch_sep17a\sketch_sep17a.ino:133:6: note: 'void loop()' previously defined here
void loop() {
^~~~
exit status 1
Compilation error: redefinition of 'void setup()'
Por favor, edita el código de error y futuros códigos como si fuera un código, tal y como se indican en las NORMAS.
Sin tener tu código no podemos saber exactamente lo que estas haciendo, pero el error que te da se debe a que tienes dos funciones "setup".
Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)
También modifica el título. Ese título no indica nada. Coloca algo relativo a tu consulta.
Punto 5) de las normas.
Ok, perdón, no soy muy lucho en estos temas.
He corregido lo que me comentas "victorjam".
Y creo que me ha funcionado al menos ahora me ha dejado cargarlo al Arduino.
Lo que no tengo muy claro son las conexiones y si el carro será autónomo como quería, pero voy a intentarlo, muchas gracias por la ayuda.
El código ha quedado así:
#include <Servo.h> // Librería para el control del servomotor
// Pines del sensor ultrasonido
const int trigPin = 9;
const int echoPin = 10;
// Pines del controlador de motores
const int enA = 3;
const int in1 = 4;
const int in2 = 5;
const int enB = 6;
const int in3 = 7;
const int in4 = 8;
// Umbral de distancia para detectar obstáculos
const int distanciaUmbral = 150; // En centímetros
// Configuración del servomotor
Servo servo; // Crear objeto del servomotor
const int servoPin = 11; // Pin del servomotor
// Función para obtener la distancia del sensor ultrasonido
long obtenerDistancia() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracion = pulseIn(echoPin, HIGH);
long distancia = duracion * 0.034 / 2; // Convertir a centímetros
return distancia;
}
// Función para mover el robot hacia adelante
void moverAdelante() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, 255); // Velocidad del motor A
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, 255); // Velocidad del motor B
}
// Función para detener el robot
void detener() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Función para mover el robot hacia atrás
void moverAtras() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 200);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, 200);
}
// Función para girar a la derecha
void girarDerecha() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, 200);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, 200);
}
// Función para girar a la izquierda
void girarIzquierda() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 200);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, 200);
}
// Función para escanear a ambos lados y encontrar la mejor ruta
int escanearMejorRuta() {
int distIzquierda, distDerecha;
// Mover el servomotor a la izquierda
servo.write(0); // Ángulo 0 grados (izquierda)
delay(500); // Esperar para estabilizar la lectura
distIzquierda = obtenerDistancia();
// Mover el servomotor a la derecha
servo.write(90); // Ángulo 180 grados (derecha)
delay(500); // Esperar para estabilizar la lectura
distDerecha = obtenerDistancia();
// Regresar el servomotor al centro
servo.write(90); // Ángulo 90 grados (centro)
delay(500);
// Comparar las distancias y retornar la mejor opción
if (distIzquierda > distDerecha) {
return 0; // Izquierda es mejor
} else {
return 1; // Derecha es mejor
}
}
void setup() {
// Inicializar pines del sensor ultrasonido
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Inicializar pines del controlador de motores
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Inicializar el servomotor
servo.attach(servoPin);
servo.write(90); // Inicialmente centrado
Serial.begin(9600); // Para monitorización
}
void loop() {
long distancia = obtenerDistancia();
Serial.print("Distancia: ");
Serial.println(distancia);
if (distancia > distanciaUmbral) {
moverAdelante(); // Si no hay obstáculos, mover hacia adelante
} else {
detener(); // Detener si hay un obstáculo
delay(500);
moverAtras(); // Retroceder
delay(1000);
detener();
// Escanear el mejor camino usando el servomotor
int mejorRuta = escanearMejorRuta();
if (mejorRuta == 0) {
Serial.println("Girando a la izquierda.");
girarIzquierda(); // Girar a la izquierda si es el mejor camino
} else {
Serial.println("Girando a la derecha.");
girarDerecha(); // Girar a la derecha si es el mejor camino
}
delay(800); // Ajusta este valor según tu robot
detener();
}
delay(100); // Esperar un momento antes de la próxima lectura
}
Ok. perdón, echo.
Las conexiones son asi.
Usas un puente H y me llama la atención pero si se trata de un L298 te vas a quedar corto.
El L298 tiene

Ahi vas conectando los pines entre el puente y tu Arduino.
El sensor ultrasonico tiene 4 pines, GND y 5V o VCC son obvios.
const int trigPin = 9;
const int echoPin = 10;
un echo y un Trigger
No, no esta hecho, edita título, y edita post#3 con errores y postealos como si fuera código que lo has hecho bien
Pues si uso el L298, ¿a que te refieres que me quedo corto?
Moderador
Me refiero a que no sabes leer y disculpa si soy duro y no respondo tu pregunta del post#10. Te pedí que hicieras algo antes de seguir con tu problema
Lee de nuevo el post#5 que vuelvo a pedirlo en el post#9.
Perdona. Creo que ya esta.
Por si sirve para aclarar como se hacen las conexiones, hago una relación de los componentes de que dispongo:
Placa Arduino UNO R4 Wifi, placa módulo Dual L298N H CC, servomotor SG-5010 y sensor ultrasónico.
Bueno ya carga el código y dime que mas hace o no hace?
Ya que estas empezando, no te propongas muchas cosas juntas, ve de a una, y cuando la resuelvas pasa a la siguiente.
Ejemplo. Sensor ultrasónico, funciona? Si ok.. entonces sigamos con motores
Motores funcionan? No.. pero funcionan 2 o 3.. ahhh reviso contactos. Listo.. cable hacia mal contactor. Ya funciona todo.
Ahora pruebo servo.
Listo ahora pruebo todo.
Se ve la idea?
Ok. Empezaré a hacer pruebas y lo comento. Muchas gracias.
Toma tu código principal, lo copias y en la copia le pones Ultrasonico.
Borras todo y dejas algún Serial.print que muestre salida
Lo mismo con los demás.
Así vas probando todo en forma individual.
Una pregunta el controlador L298N. Es normal que pierda tanta tensión entran 12,4V pero solo manda 10,6V a los motores?
Esto hace que los motores no tengan casi fuerza.
El controlador aguantaría que entren 24V ?
Vayamos desde el principio.
Que motores usas?
Todos los datos de los motores. por favor.
Motoreductor 12V, 30RPM, par torsión 40kg/cm², 1'6A - max 6.5A
Ahi tienes la hoja de datos del L298
OPERATING SUPPLY VOLTAGE UP TO 46 V
Tolera 24V si, los tolera
. TOTAL DC CURRENT UP TO 4 A
Es adecuado para tus motores? Aparentemente si.
Ahora tu batería no debe estar entregando toda la potencia que requieren los motores.
Ok, muchas gracias, voy a probar.
Tengo instaladas tres baterías en paralelo para repartir la carga, cuando lo tenga todo instalado comprobare los amperios de consumo totales, ya que el carro lleva mas sistemas que funcionan a 220V suministrados por las mismas baterías con un inversor 1.000W
