Изделия своими руками

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

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

После сборки на макетной плате мастер проводит тестирование. На первом видео тестирование устройства с кодом, сигнализирующим о потере сигнала.

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

Самоделкин

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Your Header Sidebar area is currently empty. Hurry up and add some widgets.