Текущее время: 10 сен 2024, 22:19

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

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

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

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

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

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

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

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

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

Итак начнем

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

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

Дисплей подключается через параллельный интерфейс, без I2c
Просмотр и скачивание вложений, доступно только зарегистрированным пользователям.

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

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

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

Скетч для приема сигналов шлагбаумов в кодировке CAME
Просмотр и скачивание вложений, доступно только зарегистрированным пользователям.

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

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

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

Фото анализатора сигналов радио-сигнализаций 433МГц на Ардуино
Просмотр и скачивание вложений, доступно только зарегистрированным пользователям.

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

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

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

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

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


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


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


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

Аватар пользователя
 
Сообщений: 795
Зарегистрирован: 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-------------------------------------------------------------------------



};

Аватар пользователя
 
Сообщений: 795
Зарегистрирован: 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

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

Аватар пользователя
 
Сообщений: 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

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

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

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

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

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


Вернуться в Робототехника на Ардуино

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

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