本帖最后由 teq 于 2015-10-10 22:57 编辑
完全是菜鸟新手,没有经验,请高手们指点一下,特别是程序。如果有更简单的方法,还请赐教
要求功能:
1、电热水壶24小时通电,到指定时间自动加水到固定水位后,加热烧开。(6点半和17点)
2、同时有一键烧水的功能,只要按一下按钮,水壶自动加水到固定水位后,加热烧开。
水壶做了改装,装了一个浮球开关来判定水位,浮球开关常开,当水位上升,浮球上升后闭合;
原配的蒸汽开关换成90度的KSD301温度开关,温度开关常闭,贴在水壶外表面,当温度上升到90度,开关断开
2路继电器,一路控制12V电磁水阀(常闭)进水,当检测到浮球阀闭合,就断电停止加水
继电器另一路控制电热水壶底部加热管,当温度开关断开时,断开加热管的电路
按钮、温度开关、浮球开关都加了1个10K的电阻,这是参考《爱上arduino》书第41页的例子,具体是为什么,我还不清楚,可能是上拉或下拉的作用,至于什么是上拉下拉,我还不知道{:soso_e120:}
- //时钟模块按以下接线 SCL--A5 SDA--A4 VCC--5V GND--GND
- #include <DS3231.h>
- #include <Wire.h>
- //----------------
- #define LED 10 // 继电器CH1信号-电磁水阀
- #define HOT 11 // 继电器CH2信号-热水壶加热
- #define BUTTON 7 //按钮信号
- #define BALL 8 //浮球阀信号
- #define TEP 6 //温控开关信号
- int an = 0;
- int ba = 0;
- int te = 0;
- int n = 0;
- int h = 0;
- int m = 0;
- int s =0;
- //-----------------
- DS3231 Clock;
- bool Century = false;
- bool h12;
- bool PM;
- byte ADay, AHour, AMinute, ASecond, ABits;
- bool ADy, A12h, Apm;
- byte year, month, date, DoW, hour, minute, second;
- void setup() {
- // 启动I2C(IIC)接口
- Wire.begin();
- //以下部分是初始化时间,每次板子通电之后都会初始化成这个时间,只是测试用,以后可以删除。
- // Clock.setSecond(00);//Set the second
- // Clock.setMinute(31);//Set the minute 设置分钟
- // Clock.setHour(21); //Set the hour 设置小时
- // Clock.setDoW(7); //Set the day of the week 设置星期几
- // Clock.setDate(4); //Set the date of the month 设置月份
- // Clock.setMonth(10); //Set the month of the year 设置一年中的月份
- // Clock.setYear(15); //Set the year (Last two digits of the year) 设置年份(在今年的最后两位数——比如2013年最后的13)
- // Start the serial interface
- Serial.begin(115200);
- //---------------
- pinMode (LED, OUTPUT); // 继电器CH1信号-电磁水阀
- pinMode (HOT, OUTPUT); // 继电器CH2信号-热水壶加热
- pinMode (BUTTON, INPUT); //按钮信号
- pinMode (BALL, INPUT); //浮球阀信号
- pinMode (TEP, INPUT); //温控开关信号
- //-------------------
- }
- void loop()
- {
- // ReadDS3231();
- // delay(1000); //间隔1000ms(1000ms=1秒)循环一次。
- //--------------
- an = digitalRead (BUTTON);//读取按钮开关的信号
- ba = digitalRead (BALL); //读取浮球开关的信号
- te = digitalRead (TEP); //读取温控开关的信号
- m = Clock.getMinute(); //定时自动烧水的小时
- h = Clock.getHour(h12, PM); //定时自动烧水的分钟
- s= Clock.getSecond(); 定时自动烧水的秒钟
- if (te == LOW) //一开始就检查温控开关,如果温控开关是断开的,即水温已经达到95度,
- {
- digitalWrite(HOT, LOW); //则继电器CH2信号为断开,热水壶不加热
- }
- else {
- if (h == 6 && m == 35 && s==1||h == 16 && m == 50 && s==1) //检查时间是否符合定时自动烧水时间,如果到了
- { n = 1; //引入变量n
- digitalWrite(LED, HIGH); //继电器CH1信号通电,电磁水阀开始加水
- if (n == 1) {
- if (ba == HIGH) //如果浮球开关通电,即加水已经到达水位,
- { digitalWrite(LED, LOW); //则继电器CH1信号断电,电磁水阀停止加水
- digitalWrite(HOT, HIGH); //然后继电器CH2信号为通,热水壶开始加热
- n = 0; //一个定时烧水流程结束,变量n设为0
- }
- }
- }
- { if (an == HIGH) //如果按钮开关按下,即开始一键烧水
- {
- n = 1; //引入变量n
- digitalWrite(LED, HIGH); //继电器CH1信号通电,电磁水阀开始加水
- }
- if (n == 1) {
- if (ba == HIGH) //如果浮球开关通电,即加水已经到达水位,
- { digitalWrite(LED, LOW); //则继电器CH1信号断电,电磁水阀停止加水
- digitalWrite(HOT, HIGH); //然后继电器CH2信号为通,热水壶开始加热
- n = 0; //一个定时烧水流程结束,变量n设为0
- }
- }
- }
- }
- }
复制代码
|