极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10948|回复: 1

超声波自动感应门

[复制链接]
发表于 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[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
void setOutput(int out)
{
  digitalWrite(motorPin1, bitRead(lookup[out], 0));
  digitalWrite(motorPin2, bitRead(lookup[out], 1));
  digitalWrite(motorPin3, bitRead(lookup[out], 2));
  digitalWrite(motorPin4, bitRead(lookup[out], 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();
  }
回复

使用道具 举报

发表于 2015-4-7 10:13:58 | 显示全部楼层
解决极限位置最好加一个微动开关之类的

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

这样更可靠
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 01:30 , Processed in 0.055112 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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