433Mhz

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
Satya
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2010. szeptember 9. csütörtök, 6:00

433Mhz

Hozzászólás Szerző: Satya »

Sziasztok,

ELRO AB440SA 433.92Mhz-es konnektorokat szeretnék Webről kapcsolni. Egy kedves kollégám kimérte, hogy a távirányító milyen kódokat küld, én leprogramoztam, működik. :o Szeretnék segítséget kérni a kód optimalizálásban, biztos van szebb megoldás. Jelenleg a távirányító 4x2 gomb kódból csak az első kettő szerepel a kódban, ha kell megosztom a többit is. A transmitter jelenleg egy kapucsengő adója átalakítva, már rendeltem egy TX-SAW 433/s-z transmitter-t a hestore-tól. (1327Ft)

Ja és, hogy mire használnám? Akváriumok világítás be/ki éjszaka, standby fogyasztók ki, ha nem vagyunk otthon, illetve éjszaka, udvar világítás be/ki, hogy ezért se kelljen kiszállni a kocsiból (mobilról) stb...

Íme a kód (Arduino 0021)

Kód: Egész kijelölése

#include <WString.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, 1, 250 };
byte gateway[] = { 
  192, 168, 1, 100 };
byte subnet[] = { 
  255, 255, 255, 0 };
Server server(80);

String readString;

int transmitter = 7;

void setup(){
  Ethernet.begin(mac, ip, gateway, subnet);
  pinMode(transmitter, OUTPUT);  
  Serial.begin(9600);
}
void loop(){

  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (readString.length() < 30)
        {
          readString += c;
        }  
        if (c == '\n') {

          if(readString.indexOf("GET /?out=1bekap HTTP/1.1") >=0)       
          {
            Serial.println("A is On");
            for (int i=0; i <= 3; i++){

              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              zero();
              zero();
              one();
              zero();
              delay(1);
            }

          }
          if(readString.indexOf("GET /?out=1kikap HTTP/1.1") >=0)
          {
            Serial.println("A is Off");
            for (int i=0; i <= 3; i++){  

              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              zero();
              zero();
              delay(1);
            }

          }

          if(readString.indexOf("GET /?out=2bekap HTTP/1.1") >=0)       
          {
            Serial.println("B is On");
            for (int i=0; i <= 3; i++){

              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              one();
              zero();
              zero();
              zero();
              one();
              zero();   
              one();
              zero();   
              one();
              zero();   
              zero();
              zero();
              one();
              zero();

              delay(1);
            }

          }
          if(readString.indexOf("GET /?out=2kikap HTTP/1.1") >=0)
          {
            Serial.println("B is Off");
            for (int i=0; i <= 3; i++){  

              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              zero();
              one();
              zero();
              zero();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              one();
              zero();
              zero();
              zero();
              delay(1);
            }

          }
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<h1>Easy home</h1>");

          client.println("<h3>Nappali 1</h3>");
          client.println("<FORM><INPUT TYPE=\"BUTTON\" VALUE=\"On\" ONCLICK=\"window.location.href='http://192.168.1.250/?out=1bekap'\"><INPUT TYPE=\"BUTTON\" VALUE=\"Off\" ONCLICK=\"window.location.href='http://192.168.1.250/?out=1kikap'\"></FORM>");
          client.println();
          client.println("<h3>Nappali 2</h3>");
          client.println("<FORM><INPUT TYPE=\"BUTTON\" VALUE=\"On\" ONCLICK=\"window.location.href='http://192.168.1.250/?out=2bekap'\"><INPUT TYPE=\"BUTTON\" VALUE=\"Off\" ONCLICK=\"window.location.href='http://192.168.1.250/?out=2kikap'\"></FORM>");
          client.println();

          client.stop();
          readString="";
          Serial.println();          
        }
      }
    }
  }
}    
void zero(void){
  digitalWrite(transmitter, HIGH);
  delayMicroseconds(400);
  digitalWrite(transmitter, LOW);
  delayMicroseconds(900);
  return;
}
void one(void){
  digitalWrite(transmitter, HIGH);
  delayMicroseconds(1000);
  digitalWrite(transmitter, LOW);
  delayMicroseconds(200);
  return;
}

Köszönöm!
Laci
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Mondjuk, hogy a Zero rutint ne keljen olyan sokszor meghívni én átadnák neki egy For ciklusváltozót:

Kód: Egész kijelölése

zero(11); 
one();
zero(3);
one();
zero(1);
…
void zero(int zeroi){ 
  for (int i=0; i < zeroi; i++){
    digitalWrite(transmitter, HIGH); 
    delayMicroseconds(400); 
    digitalWrite(transmitter, LOW); 
   delayMicroseconds(900); 
  }
  return; 
}
Valahogy így. 8)
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. február 3. csütörtök, 10:40-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A WEB-es felületet a EthernetSD-vel oldottad meg?
Külön LIB kell hozzá, vagy elég az arduino beépítettje?
Avatar
Satya
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2010. szeptember 9. csütörtök, 6:00

Hozzászólás Szerző: Satya »

Robert írta:A WEB-es felületet a EthernetSD-vel oldottad meg?
Külön LIB kell hozzá, vagy elég az arduino beépítettje?
Nem kellett külön LIB. (AVR-Duino WiznetShield-SD + Wiz812MJ)
Annyi bajom van vele, hogy bekapcsolás után kell egy reset, mert valamiért nem indul a hálózat. Arra még nem volt időm, hogy megnézzem a két eszköz közül melyik nem indul. Reset után áramszünetig tökéletesen működik, de az szerencsére évente csak egyszer van.
Avatar
Satya
DrótVégénSzéndarab
Hozzászólások: 21
Csatlakozott: 2010. szeptember 9. csütörtök, 6:00

Hozzászólás Szerző: Satya »

kapu48 írta:Mondjuk, hogy a Zero rutint ne keljen olyan sokszor meghívni én átadnák neki egy For ciklusváltozót:

Kód: Egész kijelölése

zero(11); 
one();
zero(3);
one();
zero(1);
…
void zero(int zeroi){ 
  for (int i=0; i < Zeroi; i++){
    digitalWrite(transmitter, HIGH); 
    delayMicroseconds(400); 
    digitalWrite(transmitter, LOW); 
   delayMicroseconds(900); 
  }
  return; 
}
Valahogy így. 8)
Köszönöm, sokkal szebb lesz a kód és az elgépelések száma is kevesebb lesz
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Próbálj várakozást berakni a Setup elé vagy utána!
Hátha csak később éled valamelyik eszközöd?
:idea:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A Arduino kód a resetet nem jól kezeli.
Az EtherSD gyárin nincs jó resetkezelés.
Azt hiszem a W5100 chipen a RESET lábat kell beállítani, hogy FIX legyen, és ne lebegjen.
+lesem...
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: 433Mhz

Hozzászólás Szerző: Bazs87 »

Sziasztok!

Én is gondolkodom egy hasonló megvalósításán, viszont nem feltétlen ragaszkodnék a fentebb leírt típusokhoz. A távirányítóból kijövő kapcsolási jel "kilopására" elég egy sima olvasó kört építeni arduinoval?
A konnektor és az arduino modul típusok kiválasztásánál vajon elég csak a kommunikációs frekvenciára figyelni?
Ha mondjuk 2 azonos típusú setben gondolkodom a két távirányító kapcsolási jelei mások, vagy a gyártási költségek minimalizálása miatt az egyik zavarhatja/kapcsolhatja a másikat?
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: 433Mhz

Hozzászólás Szerző: Bazs87 »

Sziasztok!

Az előbbi hozzászólásom után tevékenykedtem:
Vettem egy Unitec Funkfernschalter-Set 3+1 Mikro (Model: EIM-209), 48412
http://www.amazon.de/gp/product/B002UJK ... V8MESM4N70

Az adó-vevő modul: (az adóra már az antennához kábelt is forrasztottam)
http://www.amazon.de/Empf%C3%A4nger-Sup ... ino+433mhz


A távirányító által küldött adatokat kiolvastam az RCSwitch.h Advenced kiolvasás mintájával. A következőket kaptam:

A - be
Decimal: 12725872 (24Bit) Binary: 110000100010111001110000 Tri-State: not applicable PulseLength: 99 microseconds Protocol: 3
Raw data: 7104,932,592,936,592,436,1096,432,1096,436,1092,436,1088,936,596,436,1096,440,1084,440,1092,932,588,440,1100,932,592,936,592,936,596,436,1092,440,1092,936,588,936,596,928,604,436,320,88,764,32,32,308,28,

Decimal: 12709808 (24Bit) Binary: 110000011110111110110000 Tri-State: not applicable PulseLength: 100 microseconds Protocol: 3
Raw data: 7104,932,592,936,596,432,1100,428,1104,428,1096,432,1092,440,1088,940,596,932,592,936,600,928,596,436,1096,936,588,940,596,932,592,932,600,936,600,428,1092,932,600,928,608,432,460,140,420,16,96,744,36,

Decimal: 13021232 (24Bit) Binary: 110001101011000000110000 Tri-State: not applicable PulseLength: 100 microseconds Protocol: 3
Raw data: 7096,936,596,932,596,432,1096,432,1100,436,1092,932,596,928,600,432,1096,936,592,440,1088,936,596,932,600,436,1088,440,1092,432,1092,440,1088,444,1088,436,1088,44,700,36,444,60,44,848,36,52,72,120,176,

Decimal: 13264704 (24Bit) Binary: 110010100110011101000000 Tri-State: not applicable PulseLength: 99 microseconds Protocol: 3
Raw data: 7100,936,588,940,596,436,1088,436,1100,932,592,440,1088,932,604,428,1092,448,1080,940,588,936,596,432,1096,440,1088,940,588,940,588,940,596,440,1092,936,588,444,1084,52,1236,16,568,56,76,712,56,260,24,

Ezt kaptam, ami szépen ki is próbáltam íratni az adó moduljával, sikerült a bináris adatot duplikálni, a megfelelő PulsLenght-tel és Protocollal. Ennek ellenére a betanított konnektor nem reagál rá.

A kód(egyenlőre nem szép és nem tiszta, de a két modul közti kommunikáció megy):

Kód: Egész kijelölése

//bekotes
//  433mHz Receiver
//    GND  - GND 
//    Data - pin2
//
//    VCC  - 5V
//  433mHz Transmitter
//    ATAD - pin10
//    VCC  - 5V
//    GND  - GND

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() { 
  mySwitch.enableTransmit(10); //transzmittert a  pin10-re
  mySwitch.setPulseLength(99);
  mySwitch.setProtocol(3);
  //mySwitch.setRepeatTransmit(15);
}

void loop() {
//  for (byte i=1; i<5; i++) {
//    rf_set(i, true);
//    delay(2000);
//    rf_set(i, false);
//    delay(2000);
//  }

  // ez mar atjon''''
  mySwitch.send("110000100010111001110000");
  delay(5000);  

}

void rf_set(byte tmp, boolean set) {
// tmp - konnektor szama, set=true bekapcsolni

  int on[4][4]  = { { 12725872, 12709808, 13021232, 13264704 },    // A be
                    { 12709812, 12725876, 13264708, 13021236 },    // B be
                    { 12709820, 12725884, 13264716, 13021244 },    // C be
                    { 12614674, 13393298, 13488546, 13216290 } };  // D be
                                        
  int off[4][4] = { { 12614672, 13393296, 13488544, 13216288 },    // A ki
                    { 12614676, 13216292, 13488548, 13393300 },    // B ki
                    { 13216300, 13488556, 13393308, 12614684 },    // C ki
                    { 12725874, 12709810, 13021234, 13264706 } };  // D ki
                    
  tmp--;
    for(byte j=0; j<4 ;j++) {
    if (set == true) { 
        mySwitch.send( on[tmp][j] , 24); }
      else {
        mySwitch.send( off[tmp][j] , 24); }
      delay(500);
    }
}

Nincs tippetek mi lehet a baj? A RAW szám mindig eltérő, esetleg függhet ezen a történet?
Várom ötleteiteket!
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: 433Mhz

Hozzászólás Szerző: Bazs87 »

azóta próbálkoztam még pár kombóval, már a raw jelváltási időket is kiküldtem neki simán pin kapcsolgatással, de az se érdekelte.

A távirányító egymás után küld 4 jelsorozatot, minden gombhoz (talán ez az ugrókód?), már próbáltam ezeket 100-as delay-jel egymás után elküldözgetni eredmény nélkül.

Az RCwitch library valószínűleg nem kompatibilis a konnektorhoz, a VWire-t néztem még, az viszont inkább a 2 Ardu közti string átküldésben jeleskedik, amit még találtam, ott már a mintakód átfordítása sem ment.

Már végigmentem minden ötleten, ami nekem volt, megkérdeztem minden ismerőst, akinek fogalma lehet róla, google-n sem találtam megoldást, már csak a tavir maradt...:)

PLEASE HELP!
Válasz küldése