Arduino Laser Tripwire: Создайте простой датчик проникновения
Компоненты и материалы
| Компонент | Описание | Кол-во |
|---|---|---|
| Arduino UNO | Или совместимая плата | 1 |
| Беспайковая макетная плата (половинчатая) | Для сборки | 1 |
| Резистор 10 кОм | Для делителей и pull-down | 3 |
| Перемычки | Набор | 1 |
| Фоторезистор (LDR) | Два: для лазера и фонового света | 2 |
| Лазерный диод | Источник луча | 1 |
| Тактильная кнопка 12 мм | Переключение режимов | 1 |
| Пьезоизлучатель (Buzzer) | Сигнализация тревоги | 1 |
Приложения и сервисы
- Arduino IDE
О проекте
Создание лазерной перемычки
Компоненты
- Перемычки
- 3 × резистор 10 кОм
- 2 × фоторезистор
- Кнопка
- Buzzer
- Лазер
- Arduino
- Макетная плата
- Зеркало (для отражения луча)
Использовалась отдельная макетная плата для детектора — удобно позиционировать лазер на фоторезисторе.

Сборка детектора лазера
Два фоторезистора подключены в делителях с резисторами 10 кОм. Один (A0) — под лазером, второй (A1) — измеряет фоновое освещение. Общие питание и земля. Выходы делителей — на A0 (лазер) и A1 (фон).

Подключение buzzer
Buzzer на пине 3, минус — на общую шину.

Кнопка управления
Кнопка между двумя шинами, резистор 10 кОм к земле, другой контакт — к +5В. Точка соединения кнопки и резистора — на пин 4.
Лазер
Лазер на пине 2 и землю. Использовался дешевый лазерный модуль с крокодилами и велкро для фиксации кнопки.

Логика работы
Программа опрашивает кнопку:
- Нажатие — переключение между режимами SETUP и ARMED.
Режим SETUP:
- Вывод значений в Serial.
- При достаточном свете на фоторезисторе загорается встроенный LED (пин 13) — помощь в наведении луча.
Режим ARMED:
- Каждые 3 сек — отчет в Serial.
- Проверка: если сигнал на A0 падает ниже порога (луч прерван) — переход в TRIP.
Режим TRIP:
- 3 звуковых сигнала, данные в Serial, возврат в ARMED.
Код
Laser Tripwire (Arduino)
// 5 pins trip wire
int mode = 1;
int ambiant;
int trip = 1000;
int minLight = 900;
int makeBeep = 1;
int atAverage;
long millisCount;
int laserPin = 2;
int ledPin = 13;
int buzzerPin = 3;
String modeNames[3] = {"SETTINGS","ARMED","TRIP"};
int modePin = 4;
int tripPin = A0;
int ambiantPin = A1;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(laserPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(modePin, INPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(modePin) == 1) {
trip = analogRead(tripPin);
mode = mode + 1;
if (mode >= 2) mode = 0;
beep(1);
delay(300);
}
switch (mode) {
case 0:
digitalWrite(laserPin, HIGH);
ambiant = analogRead(ambiantPin);
trip = analogRead(tripPin);
atAverage = ambiant + ((trip - ambiant) / 2);
stats();
if (trip >= minLight) digitalWrite(ledPin, HIGH);
else digitalWrite(ledPin, LOW);
break;
case 1:
digitalWrite(laserPin, HIGH);
digitalWrite(ledPin, LOW);
ambiant = analogRead(ambiantPin);
atAverage = ambiant + ((trip - ambiant) / 2);
if (analogRead(tripPin) < atAverage) mode = 2;
if ((millis() - millisCount) >= 3000) {
millisCount = millis();
stats();
}
break;
case 2:
if ((millis() - millisCount) >= 1000) {
millisCount = millis();
stats();
beep(3);
mode = 1;
}
break;
}
delay(1);
}
void beep(int qty) {
if (makeBeep == 1) {
for (int count = 1; count <= qty; count++) {
digitalWrite(buzzerPin, HIGH);
delay(50);
digitalWrite(buzzerPin, LOW);
delay(50);
}
}
}
void stats() {
Serial.print("A:"); Serial.print(ambiant);
Serial.print(" T:"); Serial.print(trip);
Serial.print(" AT:"); Serial.print(atAverage);
Serial.print(" MODE:"); Serial.print(modeNames[mode]);
Serial.println();
}
Схемы
Вид на макетной плате:
Схематическое представление:
Производственный процесс
- Интерактивная кукла «Игра в кальмара» на Arduino UNO: DIY-проект
- Часы реального времени на Arduino с расчётом времени намаза
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Простой калькулятор на Arduino UNO — базовый проект для начинающих
- Вывод изображений на 1.17-дюймовый TFT LCD с Arduino UNO
- Сборка портативного дисплея на основе эффекта сохранения изображения с Arduino UNO и ATtiny85
- Мастерство 8×8 LED-матрицы с Arduino Uno: Пошаговое руководство
- Wi-Servo: управление сервоприводами по Wi-Fi через веб-браузер
- Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты