潘书荣 发表于 2015-4-7 10:00:07

超声波自动感应门

我现在在做有关arduino的超声波自动感应门实验,遇到了问题
具体情况是这样的:我能实现超声波的双面测距,当测出的两面的距离只要有一侧小于100(即1米)时候,电机反转开门,当测出的距离都大于100时候正传关门   电机反转两圈刚好开门到极限位置,停止十秒正转两圈刚好把门关好但是还有种突发情况当关门的时候有人来了即测出的距离小于100时   电机要立即停止正转反转开门到极限位置我现在无法保证电机能刚好到极限位置请问 编程如何实现谢谢下面是我的程序
int inputPin1=4;
int inputPin2=2;
int outputPin1=5;
int outputPin2=3;
int motorPin1 = 8;    // Blue   - 28BYJ48 pin 1
int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2
int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3
int motorPin4 = 11;    // Orange - 28BYJ48 pin 4
                        // Red    - 28BYJ48 pin 5 (VCC)

int motorSpeed = 2400;//variable to set stepper speed
int count = 0;          // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup, 0));
digitalWrite(motorPin2, bitRead(lookup, 1));
digitalWrite(motorPin3, bitRead(lookup, 2));
digitalWrite(motorPin4, bitRead(lookup, 3));
}
void wise()
{
   for(int s=0;s<1024;s++)
   {
   for(int i =0; i<8; i++)
{
   setOutput(i);
    delayMicroseconds(motorSpeed);
    }
   }
   delay(10000);
for(int j=0;j<1024;j++)
for(int i =7; i >=0; i--)
{
    setOutput(i);
    delayMicroseconds(motorSpeed);
}
}
void setup()
{
Serial.begin(9600);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
pinMode(outputPin1, OUTPUT);
pinMode(outputPin2, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
digitalWrite(outputPin1,LOW);
delayMicroseconds(2);
digitalWrite(outputPin1,HIGH);
delayMicroseconds(10);
digitalWrite(outputPin1,LOW);
int distance1 =pulseIn(inputPin1,HIGH);
distance1=distance1/58;
Serial.print("distance1=");
Serial.println(distance1);
digitalWrite(outputPin2,LOW);
delayMicroseconds(2);
digitalWrite(outputPin2,HIGH);
delayMicroseconds(10);
digitalWrite(outputPin2,LOW);
int distance2 =pulseIn(inputPin2,HIGH);
distance2=distance2/58;
Serial.print("distance2=");
Serial.println(distance2);
if((distance1<70) || (distance2<70))
   wise();
    //else
    //break();
}

zoologist 发表于 2015-4-7 10:13:58

解决极限位置最好加一个微动开关之类的

就是 arduino发出开门的命令,一直收到“极限位置已到达”

这样更可靠
页: [1]
查看完整版本: 超声波自动感应门