Апрель 15

Arduino это круто! — Радиомодуль nRF24L01+ 2.4 ГГц

как оказалось 433 давольно таки слабоват чтоб пробить 3 стены. но отказываться от него не будем так как одна из плат приемника все таки  может получать данные и с третей комнаты, и датчики подают сильный сигнал. но для связи розеток  и управлением светом  решено воспользоваться 2.4ГГц очень хороший мануальчик с описаниями я нашел сдесь спасибо автору завтра получу партия радиомодулей дабы не потерять в закладках статью скопирую сюда пару примеров.

Первый пример, передача данных с аналогового входа.:

#include
#include
#include // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
Serial.begin(9600);

radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)

// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);

// мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);

radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
radio.startListening(); // включаем приемник, начинаем слушать трубу
}

// radio.stopListening(); // останавливает приём (нужно перед началом передачи)

void loop()
{
int data;

if (radio.available()){ // проверяем не пришло ли чего в буфер.
radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать

Serial.print("data: ");
Serial.println(data);
}
}
------------------------------------------------------------------------------
#include
#include
#include // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
Serial.begin(9600);

radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)

// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);

// мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);

radio.openWritingPipe(pipe); // открываем трубу на передачу.
}

void loop()
{

int data = analogRead(0); // читаем значение

radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет

Serial.print("data: ");
Serial.println(data);

// delay(1000);
}

Второй пример, передача данных с DHT11.:

#include 
#include 
#include  // https://github.com/maniacbug/RF24

#include 
  
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
 
dht11 sensor;
RF24 radio(9, 10); // CE, CSN
 
void setup(){
  Serial.begin(9600);
  
  radio.begin();
  delay(2);
  radio.setChannel(9); // канал (0-127)
    
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS); 
   
    // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   

  radio.openWritingPipe(pipe); // открываем трубу на передачу.
  delay(1000);
} 


void loop()   
{
  int data[2];   
  
  sensor.read(8);
  
  data[0] = int(sensor.temperature); // заполняем массив
  data[1] = int(sensor.humidity);
  
  radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
  
  Serial.print("Humidity (%): ");
  Serial.println(data[1]);

  Serial.print("Temperature (oC): ");
  Serial.println(data[0]);
  delay(1000);
} 
-------------------------------------------------------------------------------
#include 
#include 
#include  // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
  Serial.begin(9600);
  
  radio.begin();  
  delay(2);
  radio.setChannel(9); // канал (0-127)
  
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS);     
  
    // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
    
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}
 
//  radio.stopListening(); // останавливает приём (нужно перед началом передачи) 


void loop()   
{
  int data[2];
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать
    
      Serial.print("Humidity (%): ");
      Serial.println(data[1]);
      Serial.print("Temperature (oC): ");
      Serial.println(data[0]);
 
    } 
} 


Третий пример, передача данных с DHT11 по запросу.:

#include 
#include 
#include  // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN

void setup(){
  Serial.begin(9600);
  
  radio.begin();  
  delay(2);
  radio.setChannel(9); // канал (0-127)
  
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS);     
  
    // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
    
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}
 
//  
// для ПроМини

void loop()   
{
  int data[2];

  if (Serial.available() > 0){ // если чтото пришло в сериал
    int val = Serial.parseInt(); // читаем в переменную
    if (val == 1){ // если это 1
      radio.stopListening(); // останавливает приём (нужно перед началом передачи) 
      radio.openWritingPipe(pipe); // открываем трубу на передачу.
      radio.write(&val, sizeof(val)); // отправляем val и указываем сколько байт пакет
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }
    Serial.flush(); // очищаем буфер  
  }
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать
    
      Serial.print("Humidity (%): ");
      Serial.println(data[1]);
      Serial.print("Temperature (oC): ");
      Serial.println(data[0]); 
    } 
    
} 
---------------------------------------------------------------------------------
#include 
#include 
#include  // https://github.com/maniacbug/RF24

#include 
  
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
 
dht11 sensor;
RF24 radio(9, 10); // CE, CSN
 
void setup(){
//  Serial.begin(9600);
  
  radio.begin();
  delay(2);
  radio.setChannel(9); // канал (0-127)
    
    // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
    // RF24_250KBPS на nRF24L01 (без +) неработает.
    // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS); 
   
    // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
  
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу

//  radio.openWritingPipe(pipe); // открываем трубу на передачу.

} 

////// для UNO
void loop()   
{
  int data[2];   
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    int val;
    radio.read(&val, sizeof(val)); // читаем данные и указываем сколько байт читать
    
    if (val == 1){ // если пришло 1,
      radio.stopListening(); // останавливает приём (нужно перед началом передачи) 
      
      sensor.read(8);  // читаем градусник
      delay(1000);
      data[0] = int(sensor.temperature); // заполняем массив
      data[1] = int(sensor.humidity);
      
         //отправляем данные      
      radio.openWritingPipe(pipe); // открываем трубу на передачу.
      radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }
  }   
} 


 

Март 28

Arduino — Это курто: 433 Датчики и пульты от GSM сигнализации ARDUINO

Сначала я скачал несколько библиотек которые не дали мне ровным счётом ничего, прочитал немного форумов которые рассказали о страшном кодирование таких датчиков через кодер декодер pt2262 \ pt2272 я уже начал подыскивать приемник передатчик с этой микросхемой, но все же залез в внутрь сигнализации я не обнаружил данные чипы хоть инструкция уверяла меня что они есть в ZC-GSM012 и вот мои успехи, все заработало без дополнительного железа.

итак

библиотека rcswitch   прямо внутри есть примеры которые помогут как считать коды так и отправить

для считывания используем ReceiveDemo_Simple

/*
  Simple example for receiving
  
  http://code.google.com/p/rc-switch/
*/

#include 

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

    mySwitch.resetAvailable();
  }
}

в мониторе мы увидим

Received 1******4 / 24bit Protocol: 1

при нажатии на кнопки пультов и на срабатывание датчиков.

с помощью

SendDemo

#include 

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(10);

  // Optional set pulse length.
  // mySwitch.setPulseLength(320);
  
  // Optional set protocol (default is 1, will work for most outlets)
  // mySwitch.setProtocol(2);
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
  
}

void loop() {



  mySwitch.send(1******4, 24); // сигналка выключена
  delay(1000);  



  delay(20000);
}

mySwitch.send(1******4, 24);

это строка в которую мы добавили код кнопки.

ЖЕЛЕЗО

сама плата Arduino UNO  (клон) 10$

Радиоудлинитель 433Мгц 2$

пару строк и вы как минимум можете считывать датчики и управлять сигнализацией с ПК