“光明使者”的版本间的差异
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献) (创建页面,内容为“ 300px|缩略图|右 <br /> == 概述 == 本作品可通过光线传感器驱动直流电机,使其可跟随光照前进。使用时先…”) |
Tangliufeng(讨论 | 贡献) |
||
第29行: | 第29行: | ||
|W1控制板||x1 | |W1控制板||x1 | ||
|- | |- | ||
− | | | + | |灵敏光线||x2 |
|- | |- | ||
− | | | + | |直流电机||x2 |
|} | |} | ||
=== <font size=3px>电子模块连接说明</font> === | === <font size=3px>电子模块连接说明</font> === | ||
第40行: | 第40行: | ||
! 模块 !!引脚 !! 说明 | ! 模块 !!引脚 !! 说明 | ||
|- | |- | ||
− | | | + | | 灵敏光线(左)|| W1-A2/A3接口|| |
|- | |- | ||
− | | | + | | 灵敏光线(右)|| W1-A0/A1接口|| |
|- | |- | ||
+ | | 直流电机(左)|| W1-5/6接口|| | ||
+ | |- | ||
+ | | 直流电机(右)|| W1-2/4接口|| | ||
|} | |} | ||
=== <font size=3px>Arduino程序/图形化程序</font> === | === <font size=3px>Arduino程序/图形化程序</font> === | ||
第50行: | 第53行: | ||
|-style="vertical-align:center;" | |-style="vertical-align:center;" | ||
|[[File:点击下载.png|30px|center]] | |[[File:点击下载.png|30px|center]] | ||
− | |[[:File: | + | |[[:File:follw_dolly_V1.3_Release.ra|光明使者程序包]] |
|} | |} | ||
<br/> | <br/> | ||
<pre style="color:blue"> | <pre style="color:blue"> | ||
− | #include | + | //----2016/09/21 |
+ | #include<Arduino.h> | ||
+ | #define Light A0 | ||
+ | #define Light1 A2 | ||
− | #define | + | #define M_OUT_right_2 2 |
+ | #define M_OUT_right_4 4 | ||
− | + | #define M_OUT_left_5 5 | |
− | #define | + | #define M_OUT_left_6 6 |
− | #define | ||
− | int | + | unsigned int Light_sr = 0; |
− | + | unsigned int Light_sr1 = 0; | |
− | |||
− | int | + | unsigned int potVal; |
+ | unsigned int lightVal; | ||
+ | unsigned int flag = 0; | ||
− | int | + | int vala,valb; |
− | int | + | unsigned int vala_ref; |
− | int | + | 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); | ||
− | void | + | 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() | |
− | void | + | { |
+ | 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() | |
− | void | ||
{ | { | ||
− | + | 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); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
</pre> | </pre> |
2018年5月29日 (二) 17:01的版本
概述
本作品可通过光线传感器驱动直流电机,使其可跟随光照前进。使用时先根据制作说明将作品组装完整,然后 接上电源(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 | 新增/删除/修复 |
---|---|---|