代码改变世界

Arduino智能风扇系统

2022-01-12 00:12  jym蒟蒻  阅读(676)  评论(0编辑  收藏  举报

研究方法与思路:
我们小组一开始找的是一个别人做好的项目,按键控制风扇挡位,不同挡位对应不同LED灯。但是实现过程中存在bug。而且仅仅通过按键控制风扇着实有局限性,因此我觉定用串口控制风扇开关的模式,输入1,风扇变为光敏自动调节,输入2,变为按钮人工控制调节。
我们的思路首先是拆开,把每个功能单独列出来实现,最后再进行合并

按键控制风扇开关:
我在这里遇到了问题,就是按钮按一下它关闭一会又自动开始转。最后找到了徐大佬,才解决了问题。
猛地关闭风扇,电流会回流,然后把相应的下限变高(我也没听太明白)这个大概就是(buttonValue = analogRead(buttonpin)) > 15而不是大于0的原因。
一开始我用的数字信号,最后用了模拟信号才调出来。。

const int IB = 6;
const int IA = 5;
int buttonpin = A1;
boolean state = false;

void setup() {

  Serial.begin(9600);
  pinMode(IA, OUTPUT);
  pinMode(IB, OUTPUT);
  pinMode(buttonpin, INPUT_PULLUP);
}

void loop()
{
  int buttonValue = 0;
  while ((buttonValue = analogRead(buttonpin)) > 15)
  {
    Serial.println(buttonValue);
  }

  Serial.print("a");
  if (state == true)
  {
    analogWrite(IA, 0);
    analogWrite(IB, 0);
  }
  else
  {
    analogWrite(IA, 105);
    analogWrite(IB, 0);
  }
  state = !state;
  delay(600);
}

 

串口控制风扇挡位:

 

const int IB=6;
const int IA=5;
void setup(){

   Serial.begin(9600);
   pinMode(IA,OUTPUT);
   pinMode(IB,OUTPUT);
  
}

void loop(){


    if(Serial.available()>0){
  char ch=Serial.read();
  Serial.println(ch);
  if(ch == 'l'){
    analogWrite(6,0); 
    analogWrite(5,0); 
    //Serial.println("l");
    }
 else if(ch == 'm'){
 analogWrite(6,0); 
   analogWrite(5,150);
  // Serial.println("m");
    }
else if(ch =='h'){
 analogWrite(6,0); 
   analogWrite(5,250);
 //  Serial.println("h");
}
}

}

 

 

光敏电阻控制风扇挡位:

const int IB=6;
const int IA=5;
void setup(){

   Serial.begin(9600);
   pinMode(IA,OUTPUT);
   pinMode(IB,OUTPUT);
  
}

void loop(){

 int sv=analogRead(A0);
  Serial.println(sv);
 //光越大sv越小
 analogWrite(IB,0);
  analogWrite(IA,(600-sv)*0.425 );
   
}

 

串口控制风扇模式:
主要是用了一些条件语句把上面的模块拼到一块,应该能看明白,我就不多说了

 

const int IB = 6;
const int IA = 5;
int buttonpin = A1;
boolean state = false;

void setup() {

  Serial.begin(9600);
  pinMode(IA, OUTPUT);
  pinMode(IB, OUTPUT);
  pinMode(buttonpin, INPUT_PULLUP);
}

void loop() {


  if (Serial.available() > 0) {

    char ch = Serial.read();

    if (ch == '4')
    {
      Serial.println("你想要智能风扇的哪个功能");
      Serial.println("1.按键控制风扇") ;
      Serial.println("3.光敏传感器控制风扇");
      Serial.println("4.从新选择");
    }
    else
    {
      while (1) {
        if (ch == '1')
        {
          int buttonValue = 0;

          if (Serial.available() > 0)
          {
            char bb = Serial.read();
            if (bb == '4')
            {
              analogWrite(IA, 0);
              analogWrite(IB, 0);
              break;
            }
          }

          else {
            while ((buttonValue = analogRead(buttonpin)) > 15)
            {
              // Serial.println(buttonValue);
            }

            //  Serial.print("a");
            if (state == true)
            {
              analogWrite(IA, 0);
              analogWrite(IB, 0);
            }
            else
            {
              analogWrite(IA, 105);
              analogWrite(IB, 0);
            }
            state = !state;
            delay(600);
          }


        }

        else if (ch == '3')
        {

          int sv = analogRead(A0);
          //   Serial.println(sv);
          //光越大sv越小
          analogWrite(IB, 0);
          analogWrite(IA, (600 - sv) * 0.425 );
          if (Serial.available() > 0)
          {
            char ch = Serial.read();
            if (ch == '4')
            {

              analogWrite(IA, 0);
              analogWrite(IB, 0);

              break;
            }
            else {
              Serial.println("如果想要切换功能请输入4");
            }
          }
        }
      }
    }
  }
}