Движение вентилятора не следует за движением лица
У меня есть проект об умной системе поклонников. Я искал документы о последнем проекте системы Smart Fan. Этот исследователь использует ультразвуковые датчики и инфракрасные датчики для проекта.
Я хочу заменить два датчика с помощью камеры. поэтому я внедрил отслеживание лица в систему интеллектуальных вентиляторов, где система интеллектуальных вентиляторов по-прежнему контролирует скорость вращения вентилятора в зависимости от температуры. Когда я комбинирую его, в коде нет ошибки, но когда я запускаю программу, я нахожу ошибку, когда вентилятор больше не реагирует на мое положение лица.
Когда я ищу, где находится ошибка, я могу только догадываться, что причина ошибки - в последовательной связи, но я не уверен на 100%, что она вызывает ошибку. Вы можете мне помочь?
Это мой код:
#include <Servo.h>
#include <DHT.h>;
#include <Wire.h>;
#include <LiquidCrystal_I2C.h>
Servo servo;
int UserIn[3]; // raw input from serial buffer, 3 bytes
int ini_byt; // start byte, begin reading input//initial byte
int servo_num; // which servo to pulse?
int pos; // servo angle 0-180
int i; // iterator
int t=90; //variable to move to according angle
// Common servo setup values
int mini_Pul = 600; // minimum servo position, us (microseconds)
int maxi_Pul = 2400; // maximum servo position, us
LiquidCrystal_I2C lcd(0x3f,16,2);
#define fanlow 10
#define fanmid 11
#define fanhigh 12
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int chk;
float hum;
float temp;
void suhuprint(){
hum = dht.readHumidity();
temp= dht.readTemperature();
//print ke lcd
lcd.setCursor(4,0);
lcd.print("Temp: ");
lcd.setCursor(10,0);
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Humidity: ");
lcd.setCursor(10,1);
lcd.print(hum);
lcd.print("%");
delay(2000);
}
void kipasangin(){
if ((temp >= 25) && (temp < 28))
{
digitalWrite(fanlow, LOW);
digitalWrite(fanmid, HIGH);
digitalWrite(fanhigh, HIGH);
}
else if ((temp >= 28) && (temp < 32))
{
digitalWrite(fanlow, HIGH);
digitalWrite(fanmid, LOW);
digitalWrite(fanhigh, HIGH);
}
else if (temp >= 32)
{
digitalWrite(fanlow, HIGH);
digitalWrite(fanmid, HIGH);
digitalWrite(fanhigh, LOW);
}
else
{
digitalWrite(fanlow, HIGH);
digitalWrite(fanmid, HIGH);
digitalWrite(fanhigh, HIGH);
}
delay(2000);
}
void setup()
{
servo.attach(9, mini_Pul, maxi_Pul); // Attach each Servo object to a digital pin
Serial.begin(9600); // Open the serial connection, 9600 baud
dht.begin();
pinMode(fanlow, OUTPUT);
pinMode(fanmid, OUTPUT);
pinMode(fanhigh, OUTPUT);
lcd.init();
lcd.backlight();
digitalWrite(fanlow, HIGH);
digitalWrite(fanmid, HIGH);
digitalWrite(fanhigh, HIGH);
}
void loop()
{
suhuprint();
if (Serial.available() > 2) // Wait for serial input (min 3 bytes in buffer)
{
ini_byt = Serial.read();// Read the first byte
kipasangin();
if (ini_byt == 255) // If it's really the startbyte (255) ...
{
for (i=0;i<2;i++) // ... then get the next two bytes
{
UserIn[i] = Serial.read();
}
servo_num = UserIn[0];// First byte = servo to move?
pos = UserIn[1];// Second byte = which position?
if (pos == 255) // Packet error checking and recovery
{
servo_num = 255;
}
if (pos==1)
{
t=t+3;
servo.write(t);
}
else if (pos==2)
{
t=t-3;
servo.write(t);
}
}
}
else{
digitalWrite(fanlow, HIGH);
digitalWrite(fanmid, HIGH);
digitalWrite(fanhigh, HIGH);
}
}