Arduino Laser Tripwire
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
制作激光绊线
组件
我们将需要以下内容:
- 一些跳线
- 3 x 10k 电阻
- 2 x 光敏电阻
- 一个按钮
- 蜂鸣器
- 激光
- 一个 Arduino
- 面包板
- 和一面镜子
我还为激光检测电路使用了一个单独的面包板。 (这有助于将激光堆放在光敏电阻上。)
制作激光探测器
我将从电路的激光检测部分开始。
首先抓住两条跳线。我有红色的和黄色的。将两根跨接线放入 2 个单独的端子排中。抓住一个光电阻器并将其连接到红色引线和端子条。将另一个光敏电阻放在不同的端子排和红色引线之间。将一个 10k 电阻从黄色引线连接到一个光敏电阻器,将另一个 10K 电阻器连接到另一个光敏电阻器和黄色引线之间。再取两条引线并将它们连接到光电阻器和 10k 电阻器的每个交叉点。我使用了绿色和橙色跳线。
将黄色引线连接到面包板的负极,将红色引线连接到面包板的正极。将橙色连接到 A0(连接到此的光敏电阻将是激光探测器),将绿色连接到 A1(连接到此的光敏电阻将是环境光探测器)。
接下来让我们做蜂鸣器
将蜂鸣器放在面包板上的任何位置。在负极导轨和蜂鸣器的负极之间连接一根引线。将蜂鸣器的正极连接到Arduino的引脚3。
制作按钮
接下来,我们要制作按钮部分
将按钮放在 2 个端子排之间(确保只有在 2 个端子排之间按下按钮时才接触)。将最后一个 10k 电阻器放在按钮的一端和负极引脚上。我用跳线将它连接到地轨。将按钮的另一端连接到正极导轨。然后将按钮和电阻的交叉点连接到Arduino的引脚4。
是时候使用激光了!
最后让我们将激光器连接到引脚 2 和地。我已经将 Arduino 上的引脚用于这两个方面。我使用了一种廉价的激光器,通过将鳄鱼夹连接到弹簧和外壳,并用一些尼龙搭扣按住按钮来“破解”。
我已经编写了一个程序来运行激光绊线。
它会不断检查按钮是否被按下。如果按下我们进入设置模式,如果再次按下我们进入武装模式。
如果我们处于设置模式,它会执行以下操作:
- 它将值输出到串行端口。
- 当光敏电阻上的灯足够亮时,引脚 13 亮起。此功能允许您瞄准激光。
在武装模式下,它执行以下操作:
- 它每 3 秒通过串行通信报告一次。
- 它检查光敏电阻的值是否由于激光被破坏而下降,当激光束被破坏时,跳闸模式启动。
在跳闸模式下,绊线已“跳闸”:
- 蜂鸣3次,数据发送到串口,
- 然后返回到布防模式。
代码
- 激光绊线
激光绊线Arduino
// 5 针绊线// Variablesint mode =1;int ambiant;int trip =1000; // 使用laserint时得到的光值 minLight =900;int makeBeep =1; //0 表示没有哔哔声,1 表示哔哔声!int atAverage;long millisCount;// 输出 Pinsint LaserPin =2;int ledPin =13;int buzzerPin =3;String modeNames[3] ={"SETTINGS","ARMED", "TRIP"};// 输入 Pinsint modePin =4; int tripPin =A0;int ambiantPin =A1;void setup() { pinMode(ledPin, OUTPUT); pinMode(laserPin,输出); pinMode(蜂鸣器Pin,输出); pinMode(modePin, INPUT); Serial.begin(9600);}void loop() { // 当按钮被按下 if (digitalRead(modePin) ==1) { trip =analogRead(tripPin);模式=模式+1;如果(模式> =2){模式=0; } 哔(1);延迟(300); } //当模式改变时做一些事情 switch (mode) { case 0://校准模式 digitalWrite(laserPin,HIGH); ambiant =模拟读取(ambiantPin);旅行 =模拟读取(tripPin); atAverage =ambiant + ((trip - ambiant)/2);统计(); if (trip> =minLight) { digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); } 休息; case 1:// 武装模式 digitalWrite(laserPin,HIGH);数字写入(ledPin,低); ambiant =模拟读取(ambiantPin); atAverage =ambiant + ((trip - ambiant)/2); if (analogRead(tripPin)=3000) { millisCount =millis();统计(); } 休息; case 2://跳闸模式 if ((millis() - millisCount)>=1000) { millisCount =millis();统计();哔(3);模式 =1; } 休息; } 延迟(1); // 稍等一下}//It Beepsvoid beep(int qty) { int count; if (makeBeep ==1) { for (count =1;count<=qty;count++) { digitalWrite(buzzerPin, HIGH);延迟(50);数字写入(蜂鸣器引脚,低);延迟(50); } }}//将统计信息写入串口void stats() { Serial.print("A:"); Serial.print(环境); Serial.print(" T:");串行打印(旅行); Serial.print(" AT:"); Serial.print(atAverage); Serial.print(" 模式:"); Serial.print(modeNames[mode]); Serial.println("");}
示意图
面包板视图 示意图制造工艺