光明使者
来自Labplus盛思维基百科
概述
本作品可通过光线传感器驱动直流电机,使其可跟随光照前进。使用时先根据制作说明将作品组装完整,然后 接上电源(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 | 新增/删除/修复 |
|---|---|---|

