效果:
硬件:
Arduino UNO
三相四线步进电机 x1
光敏电阻 x2
电阻 x 2
LED X 2
接线图:
代码:
//追光器(光敏电阻+步进电机 利用光敏电阻阻值差控制步进电机旋转)
#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);
}
}
|