前言
学了一段时间Arduino板,也买了一些零件,看电影中自己便想做一个报警器,给自己无聊的暑假生活一点乐趣。
一、什么是报警器?
所为报警器,则是利用红外避障感应器来感知前方是否有物体移动,有则直接中断将当前度数及距离直接输出至Lcd显示屏当中,并且将一个报警灯变常亮。
二、准备材料
- Arduino uno板
- 面包板
- 红外避障传感器
- 1602A Lcd显示屏
- sg90 舵机
- hc-sr04 超声波测距模块
三、连接材料
- 将他们都连接起来,将超声波测距仪与红外避障传感器安装在舵机上面,连接电脑,进行上传。
四、代码
1.主程序部分
#include<Servo.h>//调用舵机函数
#include<LiquidCrystal.h>//调用显示屏函数
int Trig=12;//设定口
int Echo=10;
int sensor=11;
int gy=2;
float distance;
float pos;
int LED=3;
Servo myservo;//设定舵机名字 myservo
LiquidCrystal lcd(4,5,6,7,8,9);
unsigned long previousTime;//定义一个变量
int blinkInterval = 50; //LED闪烁时间间隔
2.setup
void setup()
{
Serial.begin(9600);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
myservo.attach(sensor);
attachInterrupt(digitalPinToInterrupt(gy),hw,FALLING);//中断
lcd.begin(16,2);
myservo.write(0);
}
3.loop
void loop()
{
unsigned long currentMillis = millis(); // 获取当前时间
millistime(currentMillis);
}
int millistime(unsigned long currentTime)
{
if (currentTime - previousTime >= blinkInterval)//如过当前时间减去过了的时间>=设定的次数
{
myservo.write(pos); //设定转的角度
pos++;
previousTime = currentTime; // 将检查时间复位
if(pos==180)
{ pos=0;}
}
4.红外避障部分
void hw()
{
int distance = calculateDistance();//取得距离
lcd.setCursor(0,0);
lcd.print("dergee:");
lcd.setCursor(7,0);
lcd.print(pos);
lcd.setCursor(0,1);
lcd.print("distance:");
lcd.setCursor(10,1);
lcd.print(distance);
if(distance<50)
{digitalWrite(LED,HIGH);}
else
{ digitalWrite(LED,LOW);}
}
5.距离部分
int calculateDistance()//计算时间函数
{
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
int duration = pulseIn(Echo, HIGH);
distance= duration/58.5;
return distance;
}