Proyecto 22: Tanque Extintor de Incendios
(1)Descripción:
La función de seguimiento de línea del tanque inteligente se explicó en el proyecto anterior. En este proyecto utilizamos el sensor de llama para crear un robot extintor de incendios.
Cuando el carro encuentra llamas, el motor del ventilador girará para apagar el fuego. Por supuesto, primero necesitamos reemplazar el sensor ultrasónico y los dos fotorresistores con un módulo de ventilador y sensores de llama.
La lógica específica del carro inteligente seguidor de línea se muestra en la tabla a continuación:
Sensor de Llama Izquierdo |
Sensor de Llama Derecho |
Estado |
|---|---|---|
≤700 |
≤700 |
El carro se detiene, el ventilador comienza a girar para apagar la llama |
≥700 |
≥700 |
El carro se detiene, el ventilador comienza a girar para apagar la llama |
≥700 |
≥700 |
El carro se detiene, el ventilador comienza a girar para apagar la llama |
>700 |
>700 |
El ventilador se detiene, el carro se mueve |
Nota:
Este experimento requiere el uso de una fuente de fuego. Por favor, manténgalo alejado de materiales inflamables para prevenir incendios. Los niños deben experimentar bajo supervisión de adultos. Si no puede confirmar que está seguro, abandone el experimento.
El sensor de llama no es ignífugo, por favor no lo queme directamente con una llama. Podemos controlar un LED externo con el sensor de llama. El LED sigue conectado a D9. Cuando se detecta fuego, el LED se encenderá.
(2)Diagrama de flujo:

(3)Diagrama de Conexión:

(4)Código de Prueba:
(Nota: No conecte el módulo Bluetooth antes de cargar el código, porque la carga del código también utiliza comunicación serial, y puede haber conflictos con la comunicación serial Bluetooth, lo que puede causar que la carga falle.)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 22
Fire extinguishing tank
http://www.keyestudio.com
*/
int flame_L = A1; //Define la interfaz de llama en el lado izquierdo como el pin analógico A1
int flame_R = A2; //Define la interfaz de llama en el lado derecho como el pin analógico A2
//El cableado del sensor de seguimiento de línea
#define L_pin 11 //izquierda
#define M_pin 7 //centro
#define R_pin 8 //derecha
//El pin del servo 130
int INA = 12;
int INB = 13;
#define ML_Ctrl 4 //Define el pin de control de dirección del motor izquierdo
#define ML_PWM 6 //Define el pin de control PWM del motor izquierdo
#define MR_Ctrl 2 //Define el pin de control de dirección del motor derecho
#define MR_PWM 5 //Define el pin de control PWM del motor derecho
int L_val, M_val, R_val, flame_valL, flame_valR;
void setup()
{
Serial.begin(9600);
//Establece todos los pines del sensor de seguimiento de línea como modo de entrada
pinMode(L_pin, INPUT);
pinMode(M_pin, INPUT);
pinMode(R_pin, INPUT);
//Define la llama como INPUT
pinMode(flame_L, INPUT);
pinMode(flame_R, INPUT);
//Define el motor como OUTPUT
pinMode(ML_Ctrl, OUTPUT);
pinMode(ML_PWM, OUTPUT);
pinMode(MR_Ctrl, OUTPUT);
pinMode(MR_PWM, OUTPUT);
pinMode(INA, OUTPUT);//Establece el puerto digital INA como OUTPUT
pinMode(INB, OUTPUT);//Establece el puerto digital INB como OUTPUT
}
void loop ()
{
//Lee el valor analógico de los sensores de llama
flame_valL = analogRead(flame_L);
flame_valR = analogRead(flame_R);
Serial.print(flame_valL);
Serial.print(" ");
Serial.print(flame_valR);
Serial.println(" ");
// delay(500);
if (flame_valL <= 700 || flame_valR <= 700)
{
Car_Stop();
fan_begin();
}
else
{
fan_stop();
L_val = digitalRead(L_pin); //Lee el valor del sensor izquierdo
M_val = digitalRead(M_pin); //Lee el valor del sensor central
R_val = digitalRead(R_pin); //Lee el valor del sensor derecho
if (M_val == 1) //el del centro detecta líneas negras
{
if (L_val == 1 && R_val == 0) //Si se detecta una línea negra a la izquierda, pero no a la derecha, girar a la izquierda
{
Car_left();
}
else if (L_val == 0 && R_val == 1) //Si se detecta una línea negra a la derecha, no a la izquierda, girar a la derecha
{
Car_right();
}
else //de lo contrario, avanzar
{
Car_front();
}
}
else //El del centro no detecta líneas negras
{
if (L_val == 1 && R_val == 0) //Si se detecta una línea negra a la izquierda, pero no a la derecha, girar a la izquierda
{
Car_left();
}
else if (L_val == 0 && R_val == 1) //Si se detecta una línea negra a la derecha, no a la izquierda, girar a la derecha
{
Car_right();
}
else //de lo contrario, detenerse
{
Car_Stop();
}
}
}
}
void fan_stop()
{
//dejar de girar
digitalWrite(INA, LOW);
digitalWrite(INB, LOW);
}
void fan_begin()
{
//el ventilador gira
digitalWrite(INA, LOW);
digitalWrite(INB, HIGH);
}
void Car_front()
{
digitalWrite(MR_Ctrl, HIGH);
analogWrite(MR_PWM, 150);
digitalWrite(ML_Ctrl, HIGH);
analogWrite(ML_PWM, 150);
}
void Car_back()
{
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 100);
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 100);
}
void Car_left()
{
digitalWrite(MR_Ctrl, HIGH);
analogWrite(MR_PWM, 150);
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 100);
}
void Car_right()
{
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 100);
digitalWrite(ML_Ctrl, HIGH);
analogWrite(ML_PWM, 150);
}
void Car_Stop()
{
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 100);
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 100);
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 0);
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 0);
}
(5)Resultado de la Prueba:
Después de cargar el código de prueba correctamente y encenderlo, el carro inteligente apaga el fuego cuando detecta llamas y continúa moviéndose a lo largo de la línea negra.

Nota: Por favor, manténgalo alejado de materiales inflamables para prevenir incendios. Los niños deben experimentar bajo supervisión de adultos. Si no puede confirmar que está seguro, abandone el experimento. El sensor de llama no es ignífugo, por favor no lo queme directamente con una llama.