Arduino

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

Предыстория изготовления этого устройства такова.
Автор этой самоделки каждый день ужинает в ресторане. При этом, у него при себе имеется рабочий портфель. Однажды он этот портфель забыл в ресторане. К счастью вернувшись он обнаружил его на месте, но задумался как сделать так, чтобы можно было избежать подобных ситуаций в дальнейшем.
В результате родился этот проект.
Инструменты и материалы:
-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);
}
}
После сборки на макетной плате мастер проводит тестирование. На первом видео тестирование устройства с кодом, сигнализирующим о потере сигнала.

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

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

Источник

Похожие статьи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть
Закрыть