光明使者
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献)2018年5月29日 (二) 17:16的版本
概述
本作品可通过光线传感器驱动直流电机,使其可跟随光照前进。使用时先根据制作说明将作品组装完整,然后 接上电源(9V电池或USB供电),打开主控板开关,将作品放置在水平地/桌面上即可。本作品用光线传感器作 为输入装置,直流电机作为输出装置,当光线传感器检测值高于预设阈值时,电机启动,同时根据左右测量值 的不同可实现让其左右转弯。DIY动手组装,锻炼动手能力,了解智能创意电子套件的使用,激发创新思维, 增加学习乐趣。
使用教程
组装说明
电子模块清单
模块名称 | 数量 |
---|---|
W1控制板 | x1 |
灵敏光线 | x2 |
直流电机 | x2 |
电子模块连接说明
模块 | 引脚 | 说明 |
---|---|---|
灵敏光线(左) | W1-A2/A3接口 | |
灵敏光线(右) | W1-A0/A1接口 | |
直流电机(左) | W1-5/6接口 | |
直流电机(右) | W1-2/4接口 |
Arduino程序/图形化程序
光明使者程序包 |
//----2016/09/21 #include<Arduino.h> #define Light A0 #define Light1 A2 #define M_OUT_right_2 2 #define M_OUT_right_4 4 #define M_OUT_left_5 5 #define M_OUT_left_6 6 unsigned int Light_sr = 0; unsigned int Light_sr1 = 0; unsigned int potVal; unsigned int lightVal; unsigned int flag = 0; int vala,valb; unsigned int vala_ref; unsigned int valb_ref; int sumab,sumba; void receivedata(); void M_move(); void M_right_move(); void M_lefe_move(); void M_stop(); void around(); void setup() { // put your setup code here, to run once: pinMode(M_OUT_right_2,OUTPUT); pinMode(M_OUT_right_4,OUTPUT); pinMode(M_OUT_left_5,OUTPUT); pinMode(M_OUT_left_6,OUTPUT); digitalWrite(M_OUT_right_2,LOW); digitalWrite(M_OUT_right_4,LOW); digitalWrite(M_OUT_left_5,LOW); digitalWrite(M_OUT_left_6,LOW); Serial.begin(115200); } void loop() { Light_sr = analogRead(Light); Light_sr1 = analogRead(Light1); Serial.print("Light_right:"); Serial.println(Light_sr); Serial.print("Light_left:"); Serial.println(Light_sr1); receivedata(); } void receivedata() { vala = analogRead(Light); //设定光传感器模拟数据读取端口 valb = analogRead(Light1); sumab = (vala-valb); //左右光传感器读入数值求差 sumba = (valb-vala); //左右光传感器读入数值求差 if((vala<20)&&(valb<20)) // { M_move(); } else if((vala<800)&&(valb<800)) { if(sumab>10) { M_right_move(); } else if(sumba>20) { M_lefe_move(); } else { M_stop(); } } else if((vala>=800)&&(valb>=800)&&(vala<=1020)&&(valb<=1020)) // { if(sumab>10) { M_right_move(); } else if(sumba>10) { M_lefe_move(); } else { M_stop(); } } else if((vala>1020)&&(valb>1020)) { around(); } else { M_stop(); } } void M_move() { digitalWrite(M_OUT_right_2, LOW); digitalWrite(M_OUT_right_4,HIGH); digitalWrite(M_OUT_left_5, HIGH); digitalWrite(M_OUT_left_6,LOW); } void M_lefe_move() { digitalWrite(M_OUT_right_4, LOW); digitalWrite(M_OUT_left_5, HIGH); digitalWrite(M_OUT_left_6,LOW); } void M_right_move() { digitalWrite(M_OUT_right_2, LOW); digitalWrite(M_OUT_right_4,HIGH); digitalWrite(M_OUT_left_5, LOW); } void M_stop() { digitalWrite(M_OUT_right_4, LOW); digitalWrite(M_OUT_left_5, LOW); } void around() { digitalWrite(M_OUT_right_4, LOW); digitalWrite(M_OUT_left_5, HIGH); digitalWrite(M_OUT_left_6,LOW); digitalWrite(M_OUT_right_2, HIGH); digitalWrite(M_OUT_right_4,LOW); delay(2000); digitalWrite(M_OUT_right_2,LOW); digitalWrite(M_OUT_right_4,LOW); digitalWrite(M_OUT_left_5,LOW); digitalWrite(M_OUT_left_6,LOW); }
FAQ
版本历史记录
Version | Date | 新增/删除/修复 |
---|---|---|