首页 > 代码库 > 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架
进阶之路(中级篇) - 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的简易版智能衣架
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。