进阶之路(中级篇) - 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 }
四. 缺陷与不足:
- 雨板模拟量干扰没有处理
- 按键干扰没有处理
- 没有电源检测
- 没有光线检测
- 没有衣物干燥度检测
- 没有备用电源
- 没有电源停电检
以上是关于进阶之路(中级篇) - 018 基于arduino的简易版智能衣架的主要内容,如果未能解决你的问题,请参考以下文章
进阶之路(基础篇) - 010 Arduino 函数(基本串口SPI)
进阶之路(基础篇) - 020 放弃Arduino IDE,拥抱Sublime Text 3
进阶之路(基础篇) - 012 Arduino IDE 添加DHT11传感器第三方库的方法
树莓派进阶之路 (018) - 树莓派通过filezilla,samba与PC文件共享(转)