将3个火焰传感器和伺服系统连接到Arduino Fire Fighter时出现问题
将3个火焰传感器和伺服系统连接到Arduino Fire Fighter时出现问题
我一直在尝试制作 Arduino 消防机器人,但在将 3 个火焰传感器和伺服系统连接在一起时遇到了一些问题。当我上传以下代码(我在写作结尾处发布)时,我的机器人向后移动并检测到前传感器处的火焰,并在 16×2 LCD 显示屏上显示“Flame on Front”,并且 5v 泵泵出水和红色LED 闪烁。但我希望我的机器人能够按以下方式工作 – 最初,我的机器人将处于静止状态。
机器人前部安装有 3 个传感器。还有一个SG90伺服器用于旋转水箱(该水箱中有一个5v水泵电机,水泵电机将从该水箱中抽出水)。
当三个火焰传感器中的任何一个检测到火焰时,舵机将朝该方向旋转,当前面的火焰传感器检测到火焰时,舵机将呈 90 度角,水将被泵出。
LCD 将显示火焰传感器的状态。但机器人无法正常工作。我无法将 3 个火焰传感器和伺服系统连接在一起。正如我之前所说,我的机器人没有按照我的预期工作。
int pos = 0;
boolean fire = false;
#include <LiquidCrystal.h>
int Contrast=20;// for adjusting the brightness of the LCD , 20 is selected for the contrast of LCD
LiquidCrystal lcd(30,31,32,33,34,35);
int buzz= 38; //for led or buzzer
#define Left_S 9 // left sensor
#define Right_S 8 // right sensor
#define Forward_S 23 //forward sensor
#define LM1 52 //for pump motor
#define LM2 53 //for pump motor
#define IN1 5 //for motor
#define IN2 4 // for motor
#define IN3 3 //for motor
#define IN4 22 // for motor
//int flame_pin1 = HIGH ;
int LEDR= 36; // for danger signal
int LEDB=37;// for safe signal
void setup ( ) {
analogWrite(6,Contrast);
lcd.begin(16, 2);
pinMode(Left_S, INPUT);
pinMode(Left_S, INPUT);
pinMode(Right_S, INPUT);
pinMode (Forward_S,OUTPUT);
pinMode (LEDB,OUTPUT);
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode( buzz,OUTPUT );
pinMode(LEDR,OUTPUT);
pinMode(LEDB, OUTPUT);
// pinMode ( flame_sensor_pinM , INPUT );
//Serial.begin ( 9600 );
myservo.attach(25);
myservo.write(90);
}
void put_off_fire()
{
delay (500);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
delay(500);
for (pos = 50; pos <= 130; pos += 1) {
myservo.write(pos);
delay(10);
}
for (pos = 130; pos >= 50; pos -= 1) {
myservo.write(pos);
delay(10);
}
digitalWrite(LM1,LOW);
digitalWrite(LM2,LOW);
myservo.write(90);
fire=false;
}
void loop ( ){
myservo.write(90); //Sweep_Servo();
if (digitalRead(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not detected all sensors are zero
{
//Do not move the robot
lcd.setCursor(0, 1);
lcd.print("No flame");
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
digitalWrite(LEDR,LOW);
digitalWrite(LEDB,HIGH);
digitalWrite(buzz,LOW);
}
else if (digitalRead(Left_S) ==0) //If Fire is straight ahead
{
//Move the robot forward
lcd.setCursor(0, 1);
lcd.print("Flame on Left");
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(LEDR,HIGH);
digitalWrite(LEDB,LOW);
digitalWrite(buzz,HIGH);
fire = true;
}
else if (digitalRead(Forward_S) ==0) //If Fire is straight ahead
{
//Move the robot forward
lcd.setCursor(0, 1);
lcd.print("Flame on front");
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(LEDR,HIGH);
digitalWrite(LEDB,LOW);
digitalWrite(buzz,HIGH);
fire = true;
}
else if (digitalRead(Right_S) ==0) //If Fire is to the right
{
//Move the robot right
lcd.setCursor(0, 1);
lcd.print("Flame on Right");
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
digitalWrite(LEDR,HIGH);
digitalWrite(LEDB,LOW);
digitalWrite(buzz,HIGH);
fire= true;
}
delay(300); //Slow down the speed of robot
while (fire == true)
{
put_off_fire();
}
}
欢迎关注我们微信公众号:计算机程序吧,每天了解最新的物联网传感器知识,推送物联网行业最新的技术和行业动态。