Движение вентилятора не следует за движением лица

У меня есть проект об умной системе поклонников. Я искал документы о последнем проекте системы 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);
    }
}

0 ответов

Другие вопросы по тегам