【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
  • 导线、跳线若干
  • 热缩管若干
  • 电烙铁、热风枪、十字螺丝刀、钻孔器等
    附上部分元件图
    小型水泵

    按钮

    LCD显示屏

    LED灯

元件接线

  • FSR402力敏电阻器和Arduino
FSR402 Arduino
+ -> 5v
- 10kOhm GND
同上 -> A0
  • 继电器和Arduino
继电器 Arduino
IN -> 8
VCC -> 5V
GND -> GND
  • 继电器和小型水泵
    小型水泵的电源线剥开可以看到正负两条线,正极从中间剪断,负极不要动,正极(从电源过来的一端)接常开端,正极(接小型水泵的一端)接公共端,如下图所示。


    小型水泵与继电器接线示意图
  • 按钮和Arduino
    (按钮两端都是一样的)

按钮1 Arduino
一端 -> 5v
另一端 10kOhm电阻 GND
同上 -> 2
按钮2 Arduino
一端 -> 5v
另一端 10kOhm电阻 GND
同上 -> 3
按钮3 Arduino
一端 -> 5v
另一端 10kOhm电阻 GND
同上 -> 4
  • LED和Arduino
LED1 Arduino
正极 -> 5
负极 -> GND
LED2 Arduino
正极 -> 6
负极 -> GND
LED3 Arduino
正极 -> 7
负极 -> GND
  • LCD和Arduino
LCD Arduino
GND -> GND
VCC -> 5V
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.过程写得有点粗略,如果你在实现的过程遇到任何问题,或者有更好的建议,随时欢迎沟通交流,共同进步哈~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容

  • Arduino Due有14个数字I/O,6个模拟I/O,一个复位开关,一个ICSP下载口,7-12v电源供电。 ...
    麦牛2013阅读 3,165评论 0 8
  • 回家已有数日,赞乡情未变之余,深忧陋习难改。 君不见,村中父老终年出入各大工地,一年一周期,十载一循环;出外挨累受...
    不肯沉默的羔羊阅读 205评论 0 2
  • 1 最近看了《亲爱的客栈》里有这样一个场景让我很是印象深刻: 厨房漏水了阚清子二话...
    书卷女子阅读 587评论 7 6
  • 既然活着,为什么不勇敢大胆地活着? 人生,从你降生的那一刻就注定要结束,一切的一切。害怕又有什么用。 因为害怕失败...
    小林大为阅读 82评论 0 0