duinozone.cz - Arduino a Raspberry fórum

Autor Téma: 433Mhz přijimací modul  (Přečteno 5864 krát)

Marek

  • Host
433Mhz přijimací modul
« kdy: Leden 10, 2016, 15:58:15 odpoledne »
Zdravím.
V patek jsem si začal hrát s tímto modulem.

http://www.ebay.com/itm/433Mhz-WL-RF-Transmitter-Receiver-Module-Link-Kit-for-Arduino-ARM-MCU-Wireless-/380717845396?hash=item58a48d4b94:g:x9cAAMXQigBSMp4X

Zajímalo by mně jak je to naprogramované v čipech třeba v ovladačích pro auto nebo tady.
http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2047675.m570.l1313.TR0.TRC0.H0.TRS0&_nkw=433MHz+4-CH+Relay+Wireless+RF+Remote+Control&_sacat=0

Je tam tlačítko, přes které se to naučí další dalkače.

Bylo by to složité udělat na arduinu?
Nevité někdo o nějakém tutoriálu, kde se to řeší?

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #1 kdy: Leden 10, 2016, 17:01:03 odpoledne »
přesně ty moduly mám doma a dělal jsem s nimi jen pár pokusů o přenosu dat.
Používal jsem Virtual Wire knihovny.
Pro ovládání zásuvek, meteostanic a pod existují knihovny a examply.
Knihovna je např. zde:
https://github.com/sui77/rc-switch

a jak to používat bylo hezky představeno na Linux Day 2015 od Petra Stehlíka:
https://www.youtube.com/watch?v=ED-eUlwiN6I

doporučuji si těch 59 minut času někde najít a v klidu se na to podívat.

Těch možností je mnohem víc , než si asi teď dokážeš představit:
Jedna z nepředsatvitelných variant je používat meteostanici pro např. sledování stavu nabijení auto baterie (místo st. C, jsou tam vidět Volty).
Stejně tak je to super pro ovládání např. akvaria, kde arduino sleduje teplotu, PH a hladinu vody a přes dálkově ovládanou zásuvku spíná čerpadlo a osvětlení. Prostě hraješ si s bezpečným napětím a přes tyto modul  si to spínáš, nikoho neohrožuješ podomácku dělanou silovou části a máš volná pole působnosti.

U těch knihoven ještě bacha na piny ... ale to uvidíš v přednášce.

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:433Mhz přijimací modul
« Odpověď #2 kdy: Únor 05, 2016, 15:41:46 odpoledne »
Škoda že zapomněl tu meteostanicí  :-\
To mně docela zajima.

Normální dalkače přes tu knihovnu rc-switch v přijímači vidím.
Co použit za knihovnu abych viděl teplomět WH0100?

http://www.hadex.cz/t157-teplomer-bezdratovy-inoutvlhkomerhodiny-wh0100/
Pišou tam vysílač 433MHz




« Poslední změna: Únor 05, 2016, 15:50:30 odpoledne od K.K »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #3 kdy: Únor 05, 2016, 15:54:47 odpoledne »
jasně, jde to jen to je časově náročnější to oživit.
Teploměry vysílají teplotu v nějákých intervalech plácnu třeba 1x z 5minut.
Musíš holt vdržet a čekat co ti kdy přijde.
Ten exampl s meteo stanici jsem někde viděl na netu ...

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:433Mhz přijimací modul
« Odpověď #4 kdy: Únor 05, 2016, 16:42:06 odpoledne »
Něco je špatně.
Leží mi to na stole vedle sebe 40 minut a nic.
Klíčenky to normálně načita.
« Poslední změna: Únor 05, 2016, 16:57:19 odpoledne od K.K »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #6 kdy: Únor 05, 2016, 20:16:35 odpoledne »
ještě toto.
http://forum.arduino.cc/index.php/topic,110662.msg1094167.html#msg1094167

bohužel na víc teď nemám čas ...

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #7 kdy: Únor 05, 2016, 20:19:06 odpoledne »
našel jsem ještě tento kod:
Kód: [Vybrat]
// AcuRite 00605 433Mhz weather sensor decoder. Untested in the real world.

// __           ___       ___    ___
//   |         |  |      |  |   |  |
//   |_________|  |______|  |___|  |
//
//   |  Sync      |    1    |  0   |
//   |  3500us    | 2000us  | 1000us

//  101010110101    12 Bits Preamble With Possible Device ID
//  123456789012    12 Bits Data.
//                  If number <=100 then it's humidity.
//                  If number >=300 then subtract 500 and divide by 10 to get Centegrade temperature,
//  0               1 Bit Postamble/Stop

// Defines
#define allDataBits 25                                    // Number of data bits to expect
// isrFlags bit numbers
#define F_HAVE_DATA 1                                     // 0=Nothing in read buffer, 1=Data in read buffer
#define F_GOOD_DATA 2                                     // 0=Unverified data, 1=Verified (2 consecutive matching reads)
#define F_STATE 7                                         // 0=Sync mode, 1=Data mode

// Constants
const unsigned long sync_MIN = 3300;                      // Minimum Sync time in micro seconds
const unsigned long sync_MAX = 3700;
const unsigned long bit1_MIN = 1800;
const unsigned long bit1_MAX = 2200;
const unsigned long bit0_MIN = 800;
const unsigned long bit0_MAX = 1200;
const unsigned long glitch_Length = 150;                  // Anything below this value is a glitch and will be ignored.

// Interrupt variables
unsigned long fall_Time = 0;                              // Placeholder for microsecond time when last falling edge occured.
unsigned long rise_Time = 0;                              // Placeholder for microsecond time when last rising edge occured.
byte bit_Count = 0;                                       // Bit counter for received bits.
unsigned long build_Buffer = 0;                           // Placeholder last data packet being received.
volatile unsigned long read_Buffer = 0;                   // Placeholder last full data packet read.
volatile byte isrFlags = 0;                               // Various flag bits

void PinChangeISR0(){                                     // Pin 2 (Interrupt 0) service routine
  unsigned long Time = micros();                          // Get current time
  if (digitalRead(2) == LOW) {
// Falling edge
    if (Time > (rise_Time + glitch_Length)) {
// Not a glitch
      Time = micros() - fall_Time;                        // Subtract last falling edge to get pulse time.

      if (bitRead(isrFlags, F_STATE) == 1) {
// Looking for Data
        if ((Time > bit0_MIN) && (Time < bit0_MAX)) {
// 0 bit
          build_Buffer = build_Buffer << 1;
          bit_Count++;
        }
        else if ((Time > bit1_MIN) && (Time < bit1_MAX)) {
// 1 bit
          build_Buffer = build_Buffer << 1;
          bitSet(build_Buffer,0);
          bit_Count++;
        }
        else {
// Not a 0 or 1 bit so restart data build and check if it's a sync?
          bit_Count = 0;
          build_Buffer = 0;
          bitClear(isrFlags, F_GOOD_DATA);                // Signal data reads dont' match
          bitClear(isrFlags, F_STATE);                    // Set looking for Sync mode
          if ((Time > sync_MIN) && (Time < sync_MAX)) {
            // Sync length okay
            bitSet(isrFlags, F_STATE);                    // Set data mode
          }
        }
        if (bit_Count >= allDataBits) {
// All bits arrived
          if (build_Buffer == read_Buffer) {
            bitSet(isrFlags, F_GOOD_DATA);                // Set data reads match
        }
          else {
            bitClear(isrFlags, F_GOOD_DATA);              // Set data reads don't match
          }
          //if (bitRead(isrFlags, F_HAVE_DATA) == 0)
          // User has read last good read so store new one
            read_Buffer = build_Buffer;
          bitSet(isrFlags, F_HAVE_DATA);                  // Set data available
          bitClear(isrFlags, F_STATE);                    // Set looking for Sync mode
digitalWrite(13,HIGH); // Used for debugging
          build_Buffer = 0;
          bit_Count = 0;
        }
      }
      else {
// Looking for sync
        if ((Time > sync_MIN) && (Time < sync_MAX)) {
// Sync length okay
          build_Buffer = 0;
          bit_Count = 0;
          bitSet(isrFlags, F_STATE);                      // Set data mode
digitalWrite(13,LOW); // Used for debugging
        }
      }
      fall_Time = micros();                               // Store fall time
    }
  }
  else {
// Rising edge
    if (Time > (fall_Time + glitch_Length)) {
      // Not a glitch
      rise_Time = Time;                                   // Store rise time
    }
  }
}


void setup() {
pinMode(13,OUTPUT); // Used for debugging
  Serial.begin(9600);
  pinMode(2,INPUT);
  Serial.println(F("ISR Pin 2 Configured For Input."));
  attachInterrupt(0,PinChangeISR0,CHANGE);
  Serial.println(F("Pin 2 ISR Function Attached."));
}

void loop() {
  unsigned long myData = 0;
  if (bitRead(isrFlags,F_GOOD_DATA) == 1) {
    myData = read_Buffer;
    bitClear(isrFlags,F_HAVE_DATA);
    dec2binLong(myData);
    int x = (myData & 0x1FFF) >> 1;
    if (x > 300) {
      Serial.print(" = Temperature: ");
      Serial.print((x - 500)/10.0, 1);
      Serial.println("C");
    }
    else {
      Serial.print(" = Humidity: ");
      Serial.print(x);
      Serial.println("%");
    }
  }
  delay(100);
}

void dec2binLong(unsigned long myNum) {
  for (int i=0; i<32; i++) {
    if (bitRead(myNum,31) == 1)
    Serial.print("1");
    else
    Serial.print("0");
    myNum = myNum << 1;
  }
}

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:433Mhz přijimací modul
« Odpověď #8 kdy: Únor 06, 2016, 09:40:45 dopoledne »
Takže pokud má někdo doma toto.
http://www.hadex.cz/t157-teplomer-bezdratovy-inoutvlhkomerhodiny-wh0100/
Nebo toto
http://www.hadex.cz/t103-meteostanice-wh1170/
s tímto čidlem
http://www.hadex.cz/t112-vnejsi-cidlo-wh2-k-meteostanici-t103-a-t157/
Na zadní straně označene WH2
Tak funguje tady toto.
https://github.com/lucsmall/BetterWH2/blob/master/BetterWH2.ino

http://www.imgup.cz/image/avU

Tak jsem od babky dotah něco podobného.
Hama EWS-150
http://meteorologicke-stanice.heureka.cz/hama-ews-150/
Take funkční.
Každé zařízeni má své ID, takže není problém je rozeznat.  :)
« Poslední změna: Únor 06, 2016, 09:58:34 dopoledne od K.K »

Offline rob.brno

  • Bastlíř začátečník
  • *
  • Příspěvků: 23
Re:433Mhz přijimací modul
« Odpověď #9 kdy: Březen 25, 2016, 08:58:43 dopoledne »
Právě přemýšlím nad komunikací mezi dvěma arduiny(v domě a v rámci pozemku, tedy nějakých max.50m daleko), po drátech bych ji řešil po RS485. Vzduchem mě prvně napadl bluetooth, ale to je pro tento případ asi zbytečné.

Tady jsem narazil na ten odkázaný moful RF: http://www.ebay.com/itm/433Mhz-WL-RF-Transmitter-Receiver-Module-Link-Kit-for-Arduino-ARM-MCU-Wireless-/380717845396?hash=item58a48d4b94:g:x9cAAMXQigBSMp4X

Ale zdá se mi, že to umí jen jednosměrnou komunikaci. Na jakou vzdálenost to umí komunikovat?
« Poslední změna: Březen 25, 2016, 09:00:25 dopoledne od rob.brno »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #10 kdy: Březen 25, 2016, 18:54:55 odpoledne »
tyto moduly opravdu umi pouze jednosmernou komunikaci. i jejich dosah je omezn napajecim napetim. pro plny vykon potrebuje vysilac tusim 12V. navic je tu dost ruseni od meteostanic dalk.ovladani zvonky atd. zkusil bych spis nrf24l01. ta by asi ten dosah zvladla a je tusim duplexni. pokud mas tu moznost jdi do rs485. ano je to drat ale zadne ruseni rychla komunikace pouze par dratu ...

Offline rob.brno

  • Bastlíř začátečník
  • *
  • Příspěvků: 23
Re:433Mhz přijimací modul
« Odpověď #11 kdy: Březen 25, 2016, 20:10:39 odpoledne »
Už jsem na tu nrf24 narazil, zdá se že je to dobrá varianta, je obousměrná a není asi úplně low level, když má CRC. To rušení by asi mohl být problém i na 2,4GHz s nrf.

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:433Mhz přijimací modul
« Odpověď #12 kdy: Duben 16, 2016, 07:09:31 dopoledne »
Zdravím.
Nějaké zkušeností s připojením tohohle přijímače k arduinu na delší vzdálenost?
Jelikož tento přijímač nedovedl zachytit vysílaní venkovní metostaníce, nátah jsem 5 m UTP do vedlejší místností, kde již byl signál.
Celý den to fungovalo jak hodinky.
Noční směnu to nepřežilo.
Jen náhoda a nějaký nepovedený čínský kousek, nebo je ten datový pin tak citlivý a mohl se spalit?

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:433Mhz přijimací modul
« Odpověď #13 kdy: Duben 16, 2016, 08:04:48 dopoledne »
nebyla u vas bourka ? 5m uz je dost na statickou elektrinu. ja bych to odhadoval na poruchu na strane arduina. nema vstupy vubec chraneny. najdi si na netu arduino protect .
pouziva se v zakladu zenerova dioda 5v1 s katodou na pinu a anodou na zemi. pak byva doplnek odpor 100r v ceste signalu a maly kondanzator paralelne k diode. ve vetsine pripadu ale staci samotna zenerova dioda

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:433Mhz přijimací modul
« Odpověď #14 kdy: Duben 16, 2016, 08:14:27 dopoledne »
Ono se to tahalo v bytě s jedné místností do druhé.
V kuchyní je bouřka, jen když naseru manželku  ;)
Ted mam ten přijímač píchlý do jiného arduina na stole a přijímač nic nenajde
« Poslední změna: Duben 16, 2016, 08:17:46 dopoledne od K.K »