找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8500|回复: 4
收起左侧

Arduino追光器(光敏电阻+步进电机)实验

[复制链接]
ID:426684 发表于 2018-12-7 21:55 | 显示全部楼层 |阅读模式
效果:


硬件:
Arduino UNO
三相四线步进电机 x1
光敏电阻 x2
电阻 x 2
LED X 2

接线图:
连线图.jpg


代码:
//追光器(光敏电阻+步进电机   利用光敏电阻阻值差控制步进电机旋转)
#include <Arduino.h>
#define ADpin1 A0  //光敏电阻1
#define ADpin2 A1  //光敏电阻2
#define LED1 6  
#define LED2 7

//步进电机
#define A 8      //引脚命名
#define B 9
#define C 10
#define D 11

int ADBuffer1 = 0;
int ADBuffer2 = 0;
int temp=0;
void setup()
{
//设置引脚为输出引脚
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(A,OUTPUT);   
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
  Serial.begin(9600);                                //波特率9600
}

void loop(){
  ADBuffer1 = analogRead(ADpin1);                //读取AD值
  Serial.print("AD1 = ");
  Serial.println(ADBuffer1);
  ADBuffer2 = analogRead(ADpin2);          //读取AD值
  Serial.print("AD2 = ");
  Serial.println(ADBuffer2);
  temp=ADBuffer2-ADBuffer1;                     
  Serial.print("temp = ");
  Serial.println(temp);
  if(temp>0 and temp>5){
    digitalWrite(LED1,HIGH);                          //点亮LED
    digitalWrite(LED2,LOW);                         //熄灭LED
    delay(500);          //延时500ms
    bjdjzz();                                         //步进电机正旋转
    }else{
    digitalWrite(LED1,LOW);                          //熄灭LED
    digitalWrite(LED2,LOW);                           //熄灭LED
    delay(500);          //延时500ms
  }


  if(temp<0 and temp<-5) {
    digitalWrite(LED1,LOW);                //熄灭LED
    digitalWrite(LED2,HIGH);                //点亮LED
   delay(500);                                        //延时500ms
   bjdjfz();                                         //步进电机反旋转
     }else{
    digitalWrite(LED1,LOW);    //熄灭LED
    digitalWrite(LED2,LOW);    //熄灭LED
    delay(500);          //延时500ms
  }
}

void Phase_A()
{
  digitalWrite(A,HIGH);    //A1引脚高电平
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
}

void Phase_B()
{
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);    //B1引脚高电平
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
}

void Phase_C()
{
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,HIGH);    //C1引脚高电平
  digitalWrite(D,LOW);
}

void Phase_D()
{
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,HIGH);    //D1引脚高电平
}
//电机正转
void bjdjzz(){
for(int i=1;i<35;i++){
  Phase_A();      //设置A相位
  delay(5);     //改变延时可改变旋转速度
  Phase_B();      //设置B相位
  delay(5);
  Phase_C();      //设置C相位
  delay(5);
  Phase_D();      //设置D相位
  delay(5);
}
}
//电机反转
void bjdjfz(){
for(int i=1;i<35;i++){
  Phase_D();      //设置A相位
  delay(5);         //改变延时可改变旋转速度
  Phase_C();      //设置B相位
  delay(5);
  Phase_B();      //设置C相位
  delay(5);
  Phase_A();      //设置D相位
  delay(5);
}
}




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:441552 发表于 2018-12-8 08:36 来自手机 | 显示全部楼层
豁然开朗
回复

使用道具 举报

ID:536314 发表于 2019-5-12 18:11 | 显示全部楼层
烧录时出错是怎么回事 楼主能告诉一下吗
回复

使用道具 举报

ID:452731 发表于 2019-5-22 00:05 | 显示全部楼层
非常不错
回复

使用道具 举报

ID:171746 发表于 2019-12-18 17:21 | 显示全部楼层
三相四线步进电机是什么样的啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表