Текущее время: 28 мар 2024, 18:51

Калининград & ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Тут собраны схемы различных устройств сделанных на контроллерах Ардуино, Лазерный гравер на Ардуино, Металлоискатель на Ардуино, Метеостанция, Кодовый замок, и множество других устройств и изобретений
Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 25 янв 2018, 15:31

Всем доброго здоровья друзья!
Ну вот и наступил 2018 год!

Я , наверное около полу года занимался изучением работы различных радио сигнализаций и систем дистанционного управления , работающих в диапазоне 433 МГц, в общем проделал кучу работы, перечитал кучу информации в Интернете, в том числе и на закрытых форумах, и вот наконец решил поделится опытом и результатами экспериментов.

Вся информация в данной теме носит исключительно информационный характер , для ознакомления. :!:

Итак начнем

Выкладываю рабочий скетч Анализатора кодов сигнализаций с кодировками KEELOQ, для ардуино НАНО с подключенным LCD 16х2

Данный анализатор дает возможность принимать сигналы от сигнализаций посредством подключенного модуля радиоприемнике (к ноге 2 Ардуино) и отображать принятые коды на LCD дисплее 16х2.

Дисплей подключается через параллельный интерфейс, без I2c


Вложения
Arduino_TRX_My_8.zip
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино
(2.63 KiB) Скачиваний: 3195

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 25 янв 2018, 15:34

Скетч для приема сигналов шлагбаумов в кодировке CAME


Вложения
came_test_tx_8.zip
Скетч для приема сигналов шлагбаумов в кодировке CAME
(1.3 KiB) Скачиваний: 2798

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 28 янв 2018, 22:28

Фото анализатора сигналов радио-сигнализаций 433МГц на Ардуино


Вложения
Анализатор сигналов сигнализаций 433мгц ч1.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино
Анализатор сигналов сигнализаций 433мгц ч2.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино
Анализатор сигналов сигнализаций 433мгц ч3.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 28 янв 2018, 23:02

Еще фото Анализатора сигналов на 433 МГц

Анализатор сигналов сигнализаций 433мгц ч4.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино


Анализатор сигналов сигнализаций 433мгц ч5.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино


Анализатор сигналов сигнализаций 433мгц ч6.jpg
Анализатор сигналов радио-сигнализаций 433МГц на Ардуино


Как видим на анализаторе появилась вторая антенна, как вы думаете для чего ? ? ? :?:
:shock: :shock: :shock:
Ага, новая модификация анализатора теперь и передавать сможет :o :D :D :D



Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 29 янв 2018, 22:30

Еще скетч (набросок) программы для анализа радио-сигналов на частоте 433,92 МГц и сохранения полученных данных на SD карту.

Может кому пригодиться :D

Код: выделить все

#include <SD.h>
#define RX 2
File myFile;
byte a;
volatile byte level=255;
volatile unsigned long last, len;
byte p_level;
unsigned long p_len, p_len_prev;
struct {byte state; unsigned long TE;byte pre_count, data[8], dat_bit;} keeloq;
struct {byte state; byte pre_count, data[8], dat_bit;} starline;
void setbit(byte *data, byte n)
{ data[n/8]|=1<<(n%8);};
//-----------------------------K-----------------------------------------------------------------------------------
#define KL_MIN_PRE_COUNT 4
#define KL_MAX_TE 640 // 500
#define KL_MIN_TE 320 // 300
#define KL_MAX_BITS 64
void process_keeloq()
{switch(keeloq.state){
case 0:
if(p_level) break;
keeloq.state=1;
keeloq.pre_count=0;
break;
case 1: //pre+hdr
if(p_len>=KL_MIN_TE && p_len<=KL_MAX_TE) keeloq.pre_count++;
else if(!p_level && p_len>=KL_MIN_TE*10 && p_len<=KL_MAX_TE*10 && keeloq.pre_count>=KL_MIN_PRE_COUNT)
{
keeloq.TE=p_len/10;
keeloq.state=2;
keeloq.data[0]=0x00;
keeloq.data[1]=0x00;
keeloq.data[2]=0x00;
keeloq.data[3]=0x00;
keeloq.data[4]=0x00;
keeloq.data[5]=0x00;
keeloq.data[6]=0x00;
keeloq.data[7]=0x00;
keeloq.dat_bit=0;
} else {
keeloq.state=0;
break;}
break;
case 2: //dat
if(!p_level) break;
if(p_len<keeloq.TE/2 || p_len>keeloq.TE*3)
{keeloq.state=0;
break;}
if(p_len<=keeloq.TE+keeloq.TE/2) setbit(keeloq.data, keeloq.dat_bit);
if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=100;
break;};};
//-----------------------------------END-K-----------------------------------------------------------------
//----------------------------------------------S---------------------------------------------------------------------------------------
#define SL_MIN_PRE_COUNT 4
#define SL_MAX_PRE 1200
#define SL_MIN_PRE 800
#define SL_MAX_ZERO 350
#define SL_MIN_ZERO 100
#define SL_MAX_ONE 700
#define SL_MIN_ONE 400
#define SL_MIN_BITS 16
#define SL_MAX_BITS 64
void process_starline()
{byte b;
switch(starline.state){
case 0:
      if(p_level) break;
      starline.state=1;
      starline.pre_count=0;
      break;
    case 1: //pre
      if(p_len>=SL_MIN_PRE && p_len<=SL_MAX_PRE) starline.pre_count++;
      else if(p_len<SL_MIN_PRE && starline.pre_count>=SL_MIN_PRE_COUNT)
      {
        starline.state=2;
        starline.data[0]=0x00;
        starline.data[1]=0x00;
        starline.data[2]=0x00;
        starline.data[3]=0x00;
        starline.data[4]=0x00;
        starline.data[5]=0x00;
        starline.data[6]=0x00;
        starline.data[7]=0x00;
        starline.dat_bit=0;
      }
        else
      {
        starline.state=0;
        break;
      }
      break;
    case 2: //dat
      if(p_level) break;
      if(p_len_prev>=SL_MIN_ONE && p_len_prev<=SL_MAX_ONE/* &&
         p_len>=SL_MIN_ONE && p_len<=SL_MAX_ONE*/) b=1;
       else
      if(p_len_prev>=SL_MIN_ZERO && p_len_prev<=SL_MAX_ZERO/* &&
         p_len>=SL_MIN_ZERO && p_len<=SL_MAX_ZERO*/) b=0;
      else
      {
        if(starline.dat_bit>=SL_MIN_BITS) starline.state=100;
          else starline.state=0;
        break;
      }
if(b) setbit(starline.data, starline.dat_bit);
if(++starline.dat_bit==SL_MAX_BITS) starline.state=100;
break;};};
//----------------------------------------------------END-STARLINE-----------------------------------------------------------------------------------------


void dump_hex(byte *buf, byte bits)
{ byte a; 
  for(a=0; a<(bits+7)/8; a++)
  {
    if(buf[a]<=0x0f) Serial.print('0');
    Serial.print(buf[a], HEX);
    Serial.print(" ");
 }
 Serial.println("");
}

void rx_int()
{
  if(level!=255) return;
  len=micros()-last;
  last=micros();
  if(digitalRead(RX)==HIGH) level=0;
    else level=1;
}
//-----------------------------------SETUP---------------------------------------------------------------------------
void setup()
{
 Serial.begin(9600); 
 attachInterrupt(0, rx_int, CHANGE); //прерывание на вход RX digi 2
  //----------тест-индикации-при-включении------------------------------------
 pinMode(7, OUTPUT); // светодиод красный
 pinMode(8, OUTPUT); // светодиод синий
 pinMode(9, OUTPUT); //  светодиод зеленый
 pinMode(10, OUTPUT);// SD card
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(8, HIGH);
 delay(1000);
 digitalWrite(9, HIGH);
 delay(3000);
 digitalWrite(7, LOW);
 digitalWrite(8, LOW);
 digitalWrite(9, LOW);
 if (!SD.begin(10)) {
 Serial.println("SD card initialization failed!");
 digitalWrite(7, HIGH);
 return;};

//-------Проверка SD карты и создание файлов -------------
 
 // while(!Serial);
   myFile = SD.open("k.txt", FILE_WRITE);
  if (myFile) {
    Serial.print("Write start str to k.txt...");
    myFile.println("Start logger");
    myFile.close();
    Serial.println("Writing start str done.");
  } else {
    digitalWrite(7, HIGH);
    Serial.println("Error opening k.txt");
  };
//-----------------------------
 myFile = SD.open("s.txt", FILE_WRITE);
  if (myFile) {
    Serial.print("Write start str to s.txt...");
    myFile.println("Start logger");
    myFile.close();
    Serial.println("Writing start str done.");
  } else {
    Serial.println("Error opening s.txt");
    digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
  };

  interrupts();
};



void loop()
{

  if(level!=255)
  {
   noInterrupts();
   p_level=level;
   p_len=len;
   len=0;
   level=255;
   interrupts(); 
   process_keeloq();
   process_starline();
   p_len_prev=p_len;
  };
//---------------------------K------------------------------------------------------------
if(keeloq.state==100)
  {
digitalWrite(9, HIGH);
Serial.print("K: ");
dump_hex(keeloq.data,64);
keeloq.state=0;
myFile = SD.open("k.txt", FILE_WRITE);
if (myFile) {
    Serial.println("Writing to DATA k.txt...");
  //  myFile.println((keeloq.data,64),HEX);
myFile.print(keeloq.data[0], HEX);
myFile.print(keeloq.data[1], HEX);
myFile.print(keeloq.data[2], HEX);
myFile.print(keeloq.data[3], HEX);
myFile.print(keeloq.data[4], HEX);
myFile.print(keeloq.data[5], HEX);
myFile.print(keeloq.data[6], HEX);
myFile.print(keeloq.data[7], HEX); 
myFile.println("");
    myFile.close();
  } else {
    digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 };
 digitalWrite(9, LOW);   
  };
//--------------------------END-K------------------------------------------------------------

//-----------------------------S-------------------------------------------------------------------------
if(starline.state==100)
  {
 digitalWrite(8, HIGH);
Serial.print("STARLINE: ");
Serial.print(starline.dat_bit);
dump_hex(starline.data, starline.dat_bit);
starline.state=0;
myFile = SD.open("s.txt", FILE_WRITE);
if (myFile) {
    Serial.println("Writing to DATA s.txt...");
//    myFile.println(starline.dat_bit);
myFile.print(starline.data[0], HEX);
myFile.print(starline.data[1], HEX);
myFile.print(starline.data[2], HEX);
myFile.print(starline.data[3], HEX);
myFile.print(starline.data[4], HEX);
myFile.print(starline.data[5], HEX);
myFile.print(starline.data[6], HEX);
myFile.print(starline.data[7], HEX);
myFile.println("");
    myFile.close();
  } else {
    digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 delay(1000);
 digitalWrite(7, LOW);
 delay(1000);
 digitalWrite(7, HIGH);
 };
 digitalWrite(8, LOW);       
 };
//----------------------------END-S-------------------------------------------------------------------------



};



Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 29 янв 2018, 23:04

Я сделал из этого анализатора сигнализацию в свое авто , работает с кодировкой KEELOQ, мануфактурный код свой придумал (причем он формируется из даты и времени и меняется каждый день автоматически ;) ), и обратную связь замутил, типа диалогового кода, классно работает 8-)
Только брелок немного большеват :D



 
Сообщений: 3
Зарегистрирован: 06 мар 2017, 06:27

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение talah » 15 фев 2018, 16:59

Добрый день.
Подскажите какую функцию выполняют кнопки
У меня они не работают .


Вложения
Resized Image-1518706722048.jpg

Аватар пользователя
 
Сообщений: 11
Зарегистрирован: 06 сен 2016, 00:55

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение tv_land » 05 мар 2018, 14:10

talah писал(а):Добрый день.
Подскажите какую функцию выполняют кнопки
У меня они не работают .


Обычно кнопки выполняют функцию коммутации электронных цепей, иногда просто отверстия закрывают... :D

А оптимальное их использование описано в самом коде который Вы просто загрузили не попытавшись разобраться в нем, хотя объясните тогда как Вы смогли подключить правильно приемник, кнопки, свето диоды, дисплей и при этом не увидеть назначение кнопок?
и что за код на дисплее у вас starline выведен, от чего он?



 
Сообщений: 15
Зарегистрирован: 02 янв 2016, 16:11

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение IROBOT » 24 мар 2018, 13:31

Приём Стара,очень уж знаком,тот кто его писал,талантливо к этому подходил



 
Сообщений: 15
Зарегистрирован: 02 янв 2016, 16:11

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение IROBOT » 24 мар 2018, 13:34

Вот бы еще под FM типа шерханов.



 
Сообщений: 1
Зарегистрирован: 02 янв 2020, 01:32

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение kityara1 » 02 янв 2020, 03:53

А можно скетч с передатчиком?) Готов дать монетку))))))



Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Анализатор сигналов радио-сигнализаций 433МГц на Ардуино

Сообщение -=dp=- » 13 янв 2020, 19:47

Скетча с передатчиком нет ;)
Это был тестовый вариант, планировал использовать для выброса кода CAME/NICE для открытия шлагов, но реализовать так и не получилось :cry:




Вернуться в Устройства на Ардуино

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13