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

Posted 极客先锋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进阶之路(中级篇) - 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. 没有电源停电检

 

以上是关于进阶之路(中级篇) - 018 基于arduino的简易版智能衣架的主要内容,如果未能解决你的问题,请参考以下文章

进阶之路(基础篇) - 010 Arduino 函数(基本串口SPI)

进阶之路(基础篇) - 020 放弃Arduino IDE,拥抱Sublime Text 3

进阶之路(基础篇) - 012 Arduino IDE 添加DHT11传感器第三方库的方法

树莓派进阶之路 (018) - 树莓派通过filezilla,samba与PC文件共享(转)

LabVIEW控制Arduino采集热电偶温度数值(进阶篇—2)

LabVIEW控制Arduino采集热电偶温度数值(进阶篇—2)