本帖最后由 gada888 于 2020-8-24 16:50 编辑
引言: Arduino做的各种应用广泛被开源硬件爱好者喜欢。今天给大家介绍一个互动性强的arduino游戏,特别适合这个炎热的夏天户外娱乐,这个项目利用了特别精确灵敏的微波传感来对移动物体进行识别,达到可以在传感识别后发送指令给伺服电机,由伺服电机和跟它固定在一起的喷水头同时进行随机的转动。并且同时喷出水来。由于是伺服随机转角,所以经过传感前面的人并不能用经验判断喷水方向,因此互动娱乐性更强。 第一步:展示内容 人从微波传感前经过后,伺服和水泵同时工作。一个转角度,一个喷水。 第二步:伺服的随机转角 用random命令,并且建立一个函数来更高效的控制随机转角。 第三步:硬件搭建 所需器材:A rduino UNO控制器(2);DF的微博传感器(3);5V伺服电机(4);12v 锂电池;(5);USB数据线;(6);12V水泵 (7);大功率场效应模块
第四步:了解一下关键硬件的参数 根据测试,微波的方向性很好 探测距离: 2-16m连续可调,我最远测试是5M。 第五步: 发一些硬件的图片。让人有个直观的认识 第六步:总体介绍 水炮系统是由微波传感器,伺服电机和水泵来完成的。测试距离是5M,但可以到16M最大距离。 伺服转角是随机的,随机的转角和水泵喷水时同步的。 第七部:连线图
第八部:代码部分的设计 [mw_shl_code=applescript,false]/*
This sketch is made by gada888
2020-07-30
*/
#include <ServoTimer1.h>
int MosPin = 8; // transistor base connected to pin 8
ServoTimer1 servo1; // defines the servo
long randOff = 0;
long randNumber;
#include <MsTimer2.h>
int pbIn = 0;
int count=0;
volatile int state = LOW; //Define ledOut, default is off
void setup()
{
servo1.attach(10); //servo on pin 10
//pinMode(8, OUTPUT);
pinMode(2, INPUT);
digitalWrite(8, LOW);
randomSeed (analogRead (0)); // randomize
pinMode(MosPin, OUTPUT);
attachInterrupt(pbIn, stateChange, FALLING);
MsTimer2::set(1000,process);
MsTimer2::start();
}
int pinin = 0;
long countint = 0;
void loop()
{
pinin = digitalRead(2); // reads the PIR sensor
while (pinin == 0)
{
pinin = digitalRead(2);
}
Serial.println(count); // Printing times of 1000ms suspension
delay(1);
if(state == HIGH)
{
delay(1000);
state = LOW;
digitalWrite(MosPin, LOW);
//delay(500);
}
}
//--------------FUNCTION------------------
void stateChange()
{
count++;
}
void process()
{
if(count>1)
{
state = HIGH;
servo1.write(90);
randOff = random (500, 2000);
delay(randOff);
servo1.write(randNumber = random(45, 135));
delay(400); //gives servo time to get there
digitalWrite(MosPin, HIGH); // turns pump on
delay(500); //fires pump for 1/2 second
digitalWrite(MosPin, LOW); // turns pump off
servo1.write(90); // moves servo back to center
randOff = random (500, 2000);
delay(randOff);
servo1.write(randNumber = random(45, 135));
delay(400);
digitalWrite(MosPin, HIGH);
delay(500);
count=0; //Count zero
}
else
count=0;
}[/mw_shl_code]
|