No hice cambios en el proyecto en esta sesión. Sí te dejo el cableado recomendado y un programa base para que armes tu carrito seguidor de línea con Arduino Uno R3 + L298N + 2 motores DC + 2 sensores IR FC-51 + fuente de 9 V.
1) Conexiones recomendadas
Alimentación
Importante: una batería/fuente de 9 V tipo rectangular normalmente no sirve bien para 2 motores + Arduino; se cae mucho el voltaje y da poca corriente. Mejor usa:
- 6xAA, o
- 2 celdas Li-ion 18650, o
- una batería capaz de entregar al menos 1 A.
Si igual vas a probar con 9 V:
- 9 V → pin 12V/Vs del L298N
- GND de la fuente → GND del L298N
- GND del L298N → GND del Arduino
Esto es obligatorio para que todo comparta referencia.
Arduino
Puedes alimentar el Arduino así:
- opción simple: 9 V → VIN del Arduino, y GND común
- No recomiendo usar LM317 para esto si no sabes ajustarlo bien; además desperdicia energía en calor.
Motores al L298N
- Motor izquierdo → OUT1 y OUT2
- Motor derecho → OUT3 y OUT4
Control del L298N con Arduino
Usa estos pines:
- ENA → Arduino 5 (PWM)
- IN1 → Arduino 8
- IN2 → Arduino 9
- IN3 → Arduino 10
- IN4 → Arduino 11
- ENB → Arduino 6 (PWM)
Sensores FC-51
Cada FC-51 tiene típicamente:
- VCC
- GND
- DO (salida digital)
Conexión:
- Sensor izquierdo:
- VCC → 5V Arduino
- GND → GND Arduino
- DO → A0 o 2
- Sensor derecho:
- VCC → 5V Arduino
- GND → GND Arduino
- DO → A1 o 3
Yo usaré:
- Izquierdo DO → A0
- Derecho DO → A1
En muchos FC-51, cuando detectan negro/blanco el nivel puede invertirse según ajuste del potenciómetro. Eso se corrige en software.
2) Esquema rápido de conexión
Fuente
- Fuente 9V (+) → L298N 12V
- Fuente 9V (-) → L298N GND
- L298N GND → Arduino GND
- Fuente 9V (+) → VIN Arduino (opcional si alimentas el Arduino desde la misma fuente)
L298N a Arduino
- ENA → D5
- IN1 → D8
- IN2 → D9
- IN3 → D10
- IN4 → D11
- ENB → D6
Sensores
- FC-51 izquierdo DO → A0
- FC-51 derecho DO → A1
- Ambos VCC → 5V
- Ambos GND → GND
3) Sobre el LM317T
Para este proyecto no lo necesitas si ya tienes:
- la fuente de 9 V, y
- el regulador del Arduino / módulo L298N.
Si insistes en usar el LM317T, solo úsalo si entiendes bien:
- cálculo de resistencias para sacar 5 V,
- capacitores de entrada/salida,
- disipación térmica.
Para un carrito seguidor de línea escolar, lo más simple es no usar LM317.
4) Programa base Arduino
Este código asume:
- LOW = línea negra detectada
- HIGH = fondo blanco
Si te funciona al revés, te indico abajo cómo invertirlo.
// Pines L298N
const int ENA = 5;
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;
const int ENB = 6;
// Sensores
const int sensorIzq = A0;
const int sensorDer = A1;
// Velocidades
int velBase = 160;
int velGiro = 130;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(sensorIzq, INPUT);
pinMode(sensorDer, INPUT);
Serial.begin(9600);
detener();
}
void loop() {
int izq = digitalRead(sensorIzq);
int der = digitalRead(sensorDer);
Serial.print("Izq: ");
Serial.print(izq);
Serial.print(" Der: ");
Serial.println(der);
// Caso 1: ambos sobre blanco
if (izq == HIGH && der == HIGH) {
avanzar(velBase, velBase);
}
// Caso 2: sensor izquierdo detecta línea
else if (izq == LOW && der == HIGH) {
girarIzquierda(velGiro, velBase);
}
// Caso 3: sensor derecho detecta línea
else if (izq == HIGH && der == LOW) {
girarDerecha(velBase, velGiro);
}
// Caso 4: ambos detectan línea
else if (izq == LOW && der == LOW) {
detener();
}
}
void avanzar(int velIzq, int velDer) {
// Motor izquierdo adelante
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
// Motor derecho adelante
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, velIzq);
analogWrite(ENB, velDer);
}
void girarIzquierda(int velIzq, int velDer) {
// Reducir/parar motor izquierdo, mantener derecho
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, velDer);
}
void girarDerecha(int velIzq, int velDer) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, velIzq);
analogWrite(ENB, 0);
}
void detener() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
5) Si los sensores funcionan invertidos
A veces en el FC-51:
- LOW = blanco
- HIGH = negro
Si ves que se comporta al revés, cambia estas condiciones:
if (izq == HIGH && der == HIGH)
por la lógica inversa según tus lecturas del monitor serial.
Haz esta prueba:
- abre Monitor Serial
- mueve el sensor sobre blanco y negro
- anota cuándo marca 0 y cuándo 1
Luego ajustas la lógica.
6) Ajuste práctico del seguidor de línea
- Ajusta el potenciómetro de cada FC-51 hasta que detecte bien la línea.
- Separa los sensores unos centímetros, uno a la izquierda y otro a la derecha del centro.
- Empieza con velocidad baja: 120 a 160
- Si zigzaguea mucho, baja velocidad o cambia la lógica de giro.
7) Errores comunes
- No unir GND del Arduino con GND del L298N
- Usar batería rectangular de 9 V y que el carro no tenga fuerza
- Conectar sensores a 9 V en vez de 5 V
- No usar pines PWM en ENA/ENB
- Invertir cables del motor; si gira al revés, intercambia los dos cables de ese motor
8) Qué falta por hacer
- Montar el cableado físico
- Probar el sentido de giro de ambos motores
- Verificar si el FC-51 entrega lógica invertida o no
- Ajustar velocidades y sensibilidad
Si quieres, te puedo dar ahora un diagrama de conexiones pin por pin más ordenado o un código mejorado para que el carrito gire más suave.