天天看點

【Arduino綜合項目】改造飲水機

背景說明:辦公室的飲水機壞了,剛好最近在玩Arduino,就想用Arduino來改造一下,廢物利用,于是就有了這個項目。直接上圖看成果:
【Arduino綜合項目】改造飲水機

正面

【Arduino綜合項目】改造飲水機

背面

【Arduino綜合項目】改造飲水機

側面

實作功能

1.在按鍵1為on的狀态下,杯子放在壓力傳感器上即可出水;

2.按下按鍵2即可出水,再按一下便關閉;

3.側面的lcd顯示屏可以記錄喝水次數,按下按鍵3可将次數清零。

物料清單

  • 飲水機 *1(壞的。。沒壞你想改造我也沒話說)
  • Arduino Uno *1
  • 按鈕 *3
  • LED燈 *3
  • FSR402力敏電阻器 (壓力傳感器) *1
  • LCD 1602顯示屏 (帶轉接闆) *1
  • 小型水泵 *1
  • 繼電器 *1
  • 導線、跳線若幹
  • 熱縮管若幹
  • 電烙鐵、熱風槍、十字螺絲刀、鑽孔器等

    附上部分元件圖:

    【Arduino綜合項目】改造飲水機
    小型水泵
    【Arduino綜合項目】改造飲水機
    按鈕
    【Arduino綜合項目】改造飲水機
    LCD顯示屏
    【Arduino綜合項目】改造飲水機
    LED燈

元件接線

  • FSR402力敏電阻器和Arduino
FSR402 Arduino
+ -> 5v
- 10kOhm GND
同上 A0
  • 繼電器和Arduino
IN 8
VCC 5V
  • 繼電器和小型水泵

    小型水泵的電源線剝開可以看到正負兩條線,正極從中間剪斷,負極不要動,正極(從電源過來的一端)接常開端,正極(接小型水泵的一端)接公共端,如下圖所示。

    【Arduino綜合項目】改造飲水機
    小型水泵與繼電器接線示意圖
  • 按鈕和Arduino

    (按鈕兩端都是一樣的)

按鈕1
一端
另一端 10kOhm電阻
2
按鈕2
3
按鈕3
4
  • LED和Arduino
LED1
正極 5
負極
LED2
6
LED3
7
  • LCD和Arduino
LCD
SDA A4
SCL A5

源程式

#include <SCoop.h>
#include <Wire.h> 
#include <LCD.h> 
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); 

int Button1 = 2;
int Button2 = 3;
int Button3 = 4;
int Led1 = 5;
int Led2 = 6;
int Led3 = 7;
int sensorPin = A0;
int value;
void button1Function();
void button2Function();
void button3Function();
boolean switchFlag = LOW;
boolean waterFlag = LOW;
int times = 0;

defineTask(Task1) 
void Task1::setup() { 

}
void Task1::loop() { 
    button1Function();
}

defineTask(Task2) 
void Task2::setup() { 

}
void Task2::loop() { 
    button2Function();
}

defineTaskLoop(Task3) { 
  button3Function();
} 


void setup() {
  mySCoop.start(); 
  lcd.begin (16,2); // for 16 x 2 LCD module 
  lcd.setBacklightPin(3,POSITIVE); 
  lcd.setBacklight(HIGH); 
  pinMode(Button1,INPUT);
  pinMode(Button2,INPUT); 
  pinMode(Button3,INPUT); 
  pinMode(Led1,OUTPUT); 
  pinMode(Led2,OUTPUT); 
  pinMode(Led3,OUTPUT); 
  pinMode(sensorPin,INPUT);
  pinMode(8,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int a1,a2,a3;
  yield();  //本函數必須放在主線的loop循環體中 
  
  a1 = analogRead(sensorPin);
  a2 = analogRead(sensorPin);
  a3 = analogRead(sensorPin);
  value = (a1+a2+a3)/3;
    Serial.println(value);
  if(value > 15 && switchFlag == HIGH){
    digitalWrite(8,LOW);
    times++;
    delay(2000);
    digitalWrite(8,HIGH);
  }else
    digitalWrite(8,HIGH);
  if(waterFlag == HIGH){
     digitalWrite(8,LOW);
  }else
    digitalWrite(8,HIGH);

  lcd.home (); // set cursor to 0,0 
  lcd.print("Drink Water Times"); 
  lcd.setCursor (6,1); // go to start of 2nd line 
  lcd.print(times);  
  lcd.setCursor (12,1); // go to start of 2nd line 
  lcd.print("CUPS");
  
}

void button1Function(){
  if(digitalRead(Button1)==LOW)  //由于本例檢測上升沿觸發,是以先檢測輸入是否低電平,
  {
    delay(10); //然後延時一段時間,
    if(digitalRead(Button1)==HIGH) //然後檢測是不是電平變為高了。是的話,就是剛好按鈕按下了。
    { 
      switchFlag = !switchFlag;
      Serial.println(switchFlag);
      digitalWrite(Led1,switchFlag);
      delay(10);  //延時一段時間,防止按鈕突然斷開再按下。
      while(digitalRead(Button1)==HIGH) //判斷按鈕狀态,如果仍然按下的話,等待松開。防止一直按住導緻LED輸出端連續反轉
      {
        delay(1);
      }
    }
  }
}

void button2Function(){
  if(digitalRead(Button2)==LOW)  //由于本例檢測上升沿觸發,是以先檢測輸入是否低電平,
  {
    delay(10); //然後延時一段時間,
    if(digitalRead(Button2)==HIGH) //然後檢測是不是電平變為高了。是的話,就是剛好按鈕按下了。
    { 
      waterFlag = !waterFlag;
      Serial.println(waterFlag);
      digitalWrite(Led2,waterFlag);
      if(waterFlag == HIGH)
        times++;
      delay(10);  //延時一段時間,防止按鈕突然斷開再按下。
      while(digitalRead(Button2)==HIGH) //判斷按鈕狀态,如果仍然按下的話,等待松開。防止一直按住導緻LED輸出端連續反轉
      {
        delay(1);
      }
    }
  }
}

void button3Function(){
  if(digitalRead(Button3)==LOW)  //由于本例檢測上升沿觸發,是以先檢測輸入是否低電平,
  {
    delay(10); //然後延時一段時間,
    if(digitalRead(Button3)==HIGH) //然後檢測是不是電平變為高了。是的話,就是剛好按鈕按下了。
    { 
      times = 0;
      delay(10);  //延時一段時間,防止按鈕突然斷開再按下。
      while(digitalRead(Button3)==HIGH) //判斷按鈕狀态,如果仍然按下的話,等待松開。防止一直按住導緻LED輸出端連續反轉
      {
        delay(1);
      }
    }
  }
}
           

寫在最後

1.壓力感應子產品在加入小型水泵後,讀出的值就會不穩定,建議采取各種濾波。

2.項目完整實作下來,存在一個問題,就是會漏水,就是水泵停止泵水後水龍頭還會滴水,目前還在想解決方案。

3.過程寫得有點粗略,如果你在實作的過程遇到任何問題,或者有更好的建議,随時歡迎溝通交流,共同進步哈~