光明使者

来自Labplus盛思维基百科
跳转至: 导航搜索
光明使者.png

概述

本作品可通过光线传感器驱动直流电机,使其可跟随光照前进。使用时先根据制作说明将作品组装完整,然后 接上电源(9V电池或USB供电),打开主控板开关,将作品放置在水平地/桌面上即可。本作品用光线传感器作 为输入装置,直流电机作为输出装置,当光线传感器检测值高于预设阈值时,电机启动,同时根据左右测量值 的不同可实现让其左右转弯。DIY动手组装,锻炼动手能力,了解智能创意电子套件的使用,激发创新思维, 增加学习乐趣。

使用教程


组装说明

点击下载.png
  1. File:光明使者_装配.pdf
  2. File:跟随小车制作说明.rar


光明使者装配.png

电子模块清单

模块名称 数量
W1控制板 x1
灵敏光线 x2
直流电机 x2

电子模块连接说明

模块 引脚 说明
灵敏光线(左) W1-A2/A3接口
灵敏光线(右) W1-A0/A1接口
直流电机(左) W1-5/6接口
直流电机(右) W1-2/4接口

Arduino程序/图形化程序


点击下载.png
光明使者程序包


//----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 新增/删除/修复