Устройство сигнализирующее при удалении от объекта


Предыстория изготовления этого устройства такова.
Автор этой самоделки каждый день ужинает в ресторане. При этом, у него при себе имеется рабочий портфель. Однажды он этот портфель забыл в ресторане. К счастью вернувшись он обнаружил его на месте, но задумался как сделать так, чтобы можно было избежать подобных ситуаций в дальнейшем.

В результате родился этот проект.

Инструменты и материалы:
-Arduino Nano — 2 шт;
-Светодиоды — 2 шт;
-Макетные платы — 2 шт;
-Резисторы 220 Ом — 2 шт;
-Антенна — 2 шт;
-Пьезодинамик — 1 шт;
-Приемник 433 МГц — 1 шт;
-Передатчик 433 МГц — 1 шт;

Шаг первый: принцип работы
Это устройство состоит из приемника и передатчика на основе микроконтроллеров Ардуино. При утере сигнала от передатчика, приемник оповещает пользователя (около 100 метров в идеале). Так же можно настроить устройство на оповещение при удалении от 3 до 100 метров.
Для устройства мастер использовал платы Arduino Nano. Одна плата Nano настроена как передатчик, а другая — как приемник. Передатчик ничего не делает, кроме как отсылает повторяющийся символьный сигнал «0». Второе Arduino Nano настроено на проверку полученного сигнала и мигание светодиода в качестве подтверждения. Если сигнал не получен после 3 попыток соединения, приемник будет воспроизводить повторяющийся тональный сигнал через небольшой динамик до тех пор, пока сигнал не будет снова получен от передатчика или пока приемник не будет выключен.

Передатчик / приемник работают на частоте 433 МГц. Расстояние передачи: от 3 метров (без антенны) до 100 метров (максимум) с антенной. В модуле передатчика и приемника есть обозначенное отверстие, для монтажа антенны.

Шаг второй: сборка передатчика и загрузка кода передатчика
Передатчик собирается по нижеприведенной схеме.

Код можно скачать ниже.
 Показать / Скрыть текст#include <VirtualWire.h> const int ledPin = 9; char *data; void setup() { pinMode(ledPin,OUTPUT); vw_set_ptt_inverted(true); vw_set_tx_pin(12); vw_setup(4000); } void loop() { data="0"; vw_send((uint8_t *)data, strlen(data)); vw_wait_tx(); digitalWrite(ledPin,HIGH); delay(25); digitalWrite(ledPin,LOW); delay(500); }
Шаг третий: сборка приемника и загрузка кода приемника
Приемник 433 МГц собирается по схеме приведенной ниже.

Код для загрузки на Ардуино можно скачать ниже. Этот код оповещает, когда устройство не принимает сигнал.
 Показать / Скрыть текст#include <VirtualWire.h> const int buzzer = 8; //buzzer to arduino pin 8 void setup() { vw_set_ptt_inverted(true); // Required for DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits per sec Serial.begin(9600); pinMode(9, OUTPUT); vw_rx_start(); // Start the receiver PLL running } void loop() { int i = 0; int chk1 = 0; int chk4 = 0; uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; Serial.println(); if (vw_get_message(buf, &buflen)) // Non-blocking { for (i ; i < 2; i++ ) ///loop to check for a received signal { if (buf[0] == '0') int chk1 = 1; else int chk1 = 0; chk4 = chk4 + chk1; } { delay(1000); { if (chk4 >= 1); //if at least 1 signal was received, flash LED digitalWrite(9, HIGH); delay(25); digitalWrite(9, LOW); } } } else // if no signal is received, produce audio tone { tone(buzzer, 1000); // Send 1KHz sound signal… delay(1000); // …for 1 sec noTone(buzzer); // Stop sound… delay(1000); // …for 1sec } }
Или можно загрузить код, который оповещает, при нахождении в зоне приема сигнала.
 Показать / Скрыть текст #include <VirtualWire.h> const int buzzer = 8; //buzzer to arduino pin 8 void setup() { vw_set_ptt_inverted(true); // Required for DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits per sec Serial.begin(9600); pinMode(9, OUTPUT); vw_rx_start(); // Start the receiver PLL running } void loop() { int i = 0; int chk1 = 0; int chk4 = 0; uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; Serial.println(); if (vw_get_message(buf, &buflen)) // Non-blocking { for (i ; i < 2; i++ ) ///loop to check for a received signal { if (buf[0] == '0') int chk1 = 1; else int chk1 = 0; chk4 = chk4 + chk1; if (chk4 < 1); //check to see if any signal is received, play audio tone { tone(buzzer, 1000); // Send 1KHz sound signal… delay(1000); // …for 1 sec noTone(buzzer); // Stop sound… delay(1000); // …for 1sec } } } else { delay(1000); digitalWrite(9, HIGH); delay(25); digitalWrite(9, LOW); } }
После сборки на макетной плате мастер проводит тестирование. На первом видео тестирование устройства с кодом, сигнализирующим о потере сигнала.

На втором видео устройство подает сигнал в зоне действия передатчика.

Дальше нужно все собрать на монтажной плате и упаковать в корпус. Естественно необходимо добавить питание.
Источник (Source)

Источник: usamodelkina.ru

Добавить комментарий