效果:
硬件:
Arduino UNO
三相四線步進電機 x1
光敏電阻 x2
電阻 x 2
LED X 2
接線圖:
連線圖.jpg (63.96 KB, 下載次數: 78)
下載附件
2018-12-7 21:48 上傳
代碼:
//追光器(光敏電阻+步進電機 利用光敏電阻阻值差控制步進電機旋轉)
#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);
}
}
|