Browsed by
Tag: DS2401

Použití NFC po 1-Wire sběrnici (DS2401)

Použití NFC po 1-Wire sběrnici (DS2401)

Další zajímavý projekt postavený na Arduinu, který bych zde rád představil, integruje čtení NFC karet.

Zdrojové kódy

http://jirin.deso.cz/NFC_to_1-Wire/

Video tutoriál

Potřebný hardware

Pro výrobu toho modulu budete potřebovat Arduino, doporučuji Pro Mini či Nano kvůli velikosti (lze je bez problémů strčit do krabice).


Odkazy na zakoupení:
https://www.aliexpress.com/wholesale?SearchText=arduino+pro+mini+5v+atmega328
https://www.aliexpress.com/wholesale?SearchText=arduino+nano

Další důležitá věc je čtečka NFC karet, tento projekt je postaven na PN532:

Odkaz na Aliexpress: https://www.aliexpress.com/wholesale?SearchText=pn532

Zapojení

Arduino je potřeba s čtečkou propojit pomocí 6ti drátů.

  • VCC čtečky jde na 5 V Arduina
  • GND čtečky jde na GND Arduina
  • SS čtečky => pin D9 Arduina
  • MOSI čtečky => pin D10 Arduina
  • MISO čtečky => pin D11 Arduina
  • SCK čtečky => D12 Arduina

Čtečku je nutné přepnout do SPI módu pomocí malých přepínačů:

Dále jsou používány piny D4–D8, ale záleží na tom, jaké módy se rozhodnete používat (zmíněno níže). Zde je standardní stav, pokud jsou povoleny všechny módy a piny nejsou změněny:

  • D8 – 1-Wire výstup (připojit na 1-Wire extension)
  • D7 – pulzní výstup
  • D6 – načtena neznámá karta
  • D5 – načtena validní karta
  • D4 – čtečka je v učícím se režimu + notifikace o nově naučené kartě (připojit na notifikační diodu)

Módy, možnosti použití

Je možné využívat 4 různých módů, které lze libovolně kombinovat.

ONE_WIRE_MODE

Tento mód je víceméně primární, kvůli kterému byla aplikace původně vyvinuta. Pokud je povolen, tak se Arduino po načtení karty vydává za DS1990 / DS2401 1-Wire zařízení. Při použití Mifare Classic (4 byty) se vyplní byty 2 a 3 hodnotou 0x00, pro Mifare Ultralight (7 bytů) je nutné přeskočit jeden byte, takže se vynechá první. Simulované 1-Wire zařízení lze zachytit pomocí Loxone 1-W extension, ale třeba také i pomocí UDP 1-W gateway.

PULSE_MODE

Pokud je tento mód aktivován dochází k pulzu na pinu 7. Důvod proč byl uveden byl požadavek na identifikaci specifické čtečky (při použití více čteček).

DB_MODE

Pomocí tohoto módu si můžete do Arduina definovat svoje karty. Jsou využívány piny 5 a 6, kdy se podle toho, jestli je načtena známá či neznámá karta, pošle pulz na jeden z nich. Takto vydefinované karty lze pak použít v následujícím „učícím se“ módu jako tzv. master karty.

LEARNING_MODE

Tento mód je nutné provozovat s předchozím (DB_MODE). Funguje tak, že je možné Arduino učit nové karty, bez toho, aby bylo nutné pokaždé do modulu nahrát nový sketch s aktualizovaným seznamem karet. Postup učení je následující:

  1. Na čtečku se přiloží master karta (definovaná v DB_MODE)
  2. Po 10ti vteřinách se rozsvítí notifikační dioda (výstup D4)
  3. Během 60 sekund je nutné na čtečku přiložit novou kartu
  4. Dojde k trojbliku diody a v tento okamžik je karta uložena do EEPROM

Vzhledem k limitu velikosti EEPROM je maximální limit 100 karet.

Zapnutí / vypnutí módů

Logiku sketche lze jednoduše ovlivnit pomocí řádků:

#define ONE_WIRE_MODE
#define PULSE_MODE
#define DB_MODE
#define LEARNING_MODE

Pokud chcete použít kupříkladu jen 1-Wire móde upravte tyto řádky na:

#define ONE_WIRE_MODE
//#define PULSE_MODE
//#define DB_MODE
//#define LEARNING_MODE

Použití v Loxone

NFC karty se vydávají za běžné DS1990 / DS2401 1-Wire zařízení a podle toho s nimi i Loxone pracuje. Stačí aktivovat 1-Wire monitor, přiložit kartu a přidat si ji jako nové zařízení.

S pulzními výstupy pak lze pracovat jako s každým jiným digitálním vstupem v Loxonu.

Další vývoj

Do budoucna uvažuji o verzi s rolling codes (do EEPROM a kartu se budou zapisovat náhodná čísla, která musí odpovídat).

Dále se zde určitě objeví i velmi příbuzný projekt, který s systémy řízení přístupů také velmi souvisí – klávesnice, která se také bude vydávat za DS1990 / DS2401. Bude ji tak možné velmi jednoduše integrovat, třeba i v jednom projektu s touto NFC čtečkou.

Autor článku a projektu: Jiří Jaša, http://www.deso.cz

Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension

Arduino 1-Wire UDP Gateway – alternativa k Loxone 1-Wire Extension

Rád bych se vámi podělil o další projekt, na kterém jsem v poslední době pracoval. Jedná se o Arduino sketch, který je schopen pracovat s DS18(B)2X, DS2401 a DS2438 senzory, číst z nich data a posílat je po UDP jako multicast či unicast. Mezi výhody toho řešení patří to, že je možné používat více 1-Wire sběrnic a předejít tak případným problémům s kabeláží apod. Dále je možné určité sběrnice priorizovat (ideální pro využití s iButtony či NFC).

Zdrojové kódy

http://jirin.deso.cz/1-Wire_UDP_Gateway/

Video tutoriál

Potřebný hardware

Pro jeho použití budete potřebovat Arduino UNO či MEGA a k tomu Ethernet shield – mám ozkoušený W5100, který funguje výborně a lze jej sehnat i v 802.3af verzi.

Arduino UNO s W5100

Odkazy na zakoupení:
https://www.aliexpress.com/wholesale?SearchText=arduino+uno+mega328p
https://www.aliexpress.com/wholesale?SearchText=arduino+mega+2560
https://www.aliexpress.com/wholesale?SearchText=arduino+uno+w5100

Zapojení

Pro každou 1-Wire sběrnici je bezpodmínečně nutné použít pull-up rezistory 4,7 kΩ a zapojení je následující:

Ještě přidávám pinout pro DS18B20 samotný:

Hlavně si nepoplést zem a napájení – nedopádá to úplně nejlépe.

Konfigurace 1-Wire sběrnic

Při nastavování lze vydefinovat libovolný počet sběrnic. U každé z nich lze také říct, jestli je prioritní nebo ne – prioritní jsou určené pro čtení iButtonů, kdy je potřeba okamžitá reakce.

Základní nastavení (použita pouze sběrnice na pinu D5 a není prioritní):

ONE_WIRE_BUS ONE_WIRE_BUSES[] = {{5, false},
                                 //{6, false},
                                 //{7, false},
                                 //{8, false},
                                 //{9, false},
};

Pokud chcete ale použít sběrnic více, stačí řádky odkomentovat případně si přidat další. Kupříkladu:

ONE_WIRE_BUS ONE_WIRE_BUSES[] = {{5, false},
                                 {6, false},
                                 {7, false},
                                 {8, false},
                                 {9, true},
};

Kdy je port na pinu D9 prioritní, takže na něm mám třeba čtečku, D5–D8 jsou pak další obyčejné sběrnice.

A jako poslední poznámka, není možné používat piny D4, D10, D11, D12 a D13 jelikož je využívá W5100 (Ethernet shield).

Získávání dat v Loxone

Loxone dostává pakety ve tvaru:
DS2401 – „1W 01000065A43BBE67
DS18(B)2X – „1W 2861641273EA057D TEMP 24187“
DS2438 – „1W 26CABA16020000BD TEMP 23656 VAD 2220 VDD 4700 VSENS 250“
Všechny teploty a voltáže jsou posílány jako celá čísla, která vznikla násobením původní hodnoty číslem 1000.

Dále je možné se potkat s pakety:
1W 28616412704EF007 ERROR“
1W 2861641273E55AFF DETECTED“
Tyto jsou posílány v případě chyby či detekce nového 1-Wire zařízení.

V Loxone je potřeba vytvořit digitální UDP vstup pro daný port:

Dále je nutné vytvořit příkaz pro každé 1-Wire zařízení.

Pro DS2401 je to digitální vstup:

Pro DS18(B)2X je to analogový vstup a je nutné použít korekci (vstupní hodnota 2: „1000“, zobrazená hodnota 2: „1“):

A v případě DS2438 je nutné vytvořit 4 analogové virtuální vstupy, stejně jako v předchozím případě je nutné použít korekci („1000“ => „1“):

Pro instalaci do rozvaděče doporučuji sehnat uchycení na DIN lištu, něco ve stylu:

Autor článku a projektu: Jiří Jaša, http://www.deso.cz