进阶之路(中级篇) - 018 基于arduino的简易版智能衣架

一.    设备及要求

目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒。

基础装置:可伸缩的晾衣架。

开发环境:Arduino1. 8.1

主控板:Arduino UNO

动力装置:二相四线步进电机、电机控制板

供电设备:5V/500mA电源、12V/2A电机供电电源

传感器:雨滴传感器、接触传感器

其它:双面胶若干(固定传接触感器)

 

二.    布线:

三.代码:

  1 // I/O引脚定义
  2 #define PUL 2         //电机时钟
  3 #define L_ENA 3     //A电机使能
  4 #define L_DIR 4     //A电机转向
  5 #define L_key 5        //A电机复位按键(0)
  6 #define R_ENA 6        //B电机使能
  7 #define R_DIR 7        //B电机转向
  8 #define R_key 8        //B电机复位按键(1)
  9 #define Rain A0        //雨水
 10 
 11 //宏定义
 12 bool Clock_status = 0;
 13 
 14 void set_init_pinMode(){
 15     pinMode(PUL,OUTPUT);        //时钟
 16     pinMode(L_ENA,OUTPUT);        //L
 17     pinMode(L_DIR,OUTPUT);
 18     pinMode(L_key,INPUT);
 19     pinMode(R_ENA,OUTPUT);        //R
 20     pinMode(R_DIR,OUTPUT);
 21     pinMode(R_key,INPUT);
 22     pinMode(Rain,INPUT);        //雨水
 23 }
 24 /*************************************/
 25 //时钟函数
 26 void Clock_function(void){
 27     delayMicroseconds(10000);                 //时钟
 28     digitalWrite(PUL,Clock_status);
 29     Clock_status = !Clock_status;
 30 }
 31 /***********************************/
 32 //电机使能关闭
 33 void Close_motor(void){
 34     digitalWrite(L_ENA,1);
 35     digitalWrite(R_ENA,1);
 36 }
 37 //电机使能开启
 38 void start_motor(void){
 39     digitalWrite(L_ENA,0);
 40     digitalWrite(R_ENA,0);
 41 }
 42 /**********************************/
 43 //拉回方向
 44 void Pull_direction(){
 45     digitalWrite(L_DIR,0);
 46     digitalWrite(R_DIR,0);
 47 }
 48 //推出方向
 49 void Push_direction(){
 50     digitalWrite(L_DIR,1);
 51     digitalWrite(R_DIR,1);                                                                                                                                                                                                                                                                                                                                                                                                              
 52 }
 53 /********************************/
 54 //拉回电机
 55 void Pull_motor(){
 56     start_motor();            //开启电机
 57     Pull_direction();        //拉回电机凤方向设置
 58 }
 59 //推出电机
 60 void Push_motor(){
 61     start_motor();            //开启电机
 62     Push_direction();        //拉回电机凤方向设置
 63 }
 64 //无检验停止
 65 void No_test_stop_motor(){
 66     Close_motor();            //关闭使能
 67 }
 68 //检验停止
 69 void test_stop_motor(int key1,int key2){
 70     if(key1)digitalWrite(L_ENA,1);
 71     else digitalWrite(L_ENA,0);
 72     if(key2)digitalWrite(R_ENA,1);
 73     else digitalWrite(L_ENA,0);
 74 }
 75 /********************************/
 76 void printf_all(int mode,unsigned int step1){
 77     Serial.print("mode =");
 78     Serial.print(mode);
 79     Serial.print("  ");
 80     Serial.print("PUL =");
 81     Serial.print(digitalRead(PUL));
 82     Serial.print("  ");
 83     Serial.print("L_DIR =");
 84     Serial.print(digitalRead(L_DIR));
 85     Serial.print("  ");
 86     Serial.print("L_ENA =");
 87     Serial.print(digitalRead(L_ENA));
 88     Serial.print("  ");
 89     Serial.print("L_key =");
 90     Serial.print(digitalRead(L_key));
 91     Serial.print("  ");
 92     Serial.print("R_DIR =");
 93     Serial.print(digitalRead(R_DIR));
 94     Serial.print("  ");
 95     Serial.print("R_ENA =");
 96     Serial.print(digitalRead(R_ENA));
 97     Serial.print("  ");
 98     Serial.print("R_key =");
 99     Serial.print(digitalRead(R_key));
100     Serial.print("  ");
101     Serial.print("Rain =");
102     Serial.print(analogRead(Rain));
103     Serial.print("  ");
104     Serial.print("step1 =");
105     Serial.println(step1);
106 }
107 //初始化
108 void setup(){
109     set_init_pinMode();
110     Serial.begin(19200); 
111     Serial.println("DHTxx test!");
112 }
113 void loop(){
114     int mode = 0;        //模式
115     int a,b;
116     unsigned int step1 = 0;
117     while(1){
118         switch(mode){
119         case 0:{        //拉回电机
120             Pull_motor();
121             mode = 1;
122             }break;
123         case 1:{        //检测状态
124             a = digitalRead(L_key);
125             b = digitalRead(R_key);
126             digitalWrite(L_ENA,a);
127             digitalWrite(R_ENA,b-1);
128             step1--;
129             if((1==a)&&(0==b)&&(analogRead(Rain) > 850)){
130                 mode = 2;
131                 step1 = 0;
132                 Push_motor();
133                 }
134             }break;
135         case 2:{        //雨板检测
136             if(analogRead(Rain) < 850)mode = 0;
137             else if(7000 < step1++){
138                 Close_motor();
139                 step1 = 65000;
140                 }
141             }break;
142         }
143     //printf_all(mode,step1);
144     Clock_function();
145     }
146 }

 

四.    缺陷与不足:

  1. 雨板模拟量干扰没有处理
  2. 按键干扰没有处理
  3. 没有电源检测
  4. 没有光线检测
  5. 没有衣物干燥度检测
  6. 没有备用电源
  7. 没有电源停电检

 

posted @ 2017-05-08 16:41  极客先锋  阅读(1709)  评论(0编辑  收藏  举报