Spolu s kompletnou rekonštrukciou bytu som chcel dať do každej miestnosti meranie teplôt a vlhkosti ako prípravu pre budúcu automatizáciu. Z dôvodu jednoduchosti som sa rozhodol pre komunikáciu cez zbernicu RS485.
Základom konštrukcie jednotlivých modulov je procesor ATMEGA168 (alebo 328) s nahraným Arudino bootloaderom. Tak je zachovaná možnosť programovania cez sériovú linku (signály RX, TX, DTR). Daný procesor je v danom zapojení ako kanón na vrabce, ale mal som ich odložené z vyradených zariadení v zásobe. V čase čipovej krízy prišlo ich vyhrabanie vhod. Nevyužité IO piny je možné samozrejme využiť aj inak, alebo použiť menší procesor.
Na meranie teploty a vlhkosti slúži snímač HTU21D komunikujúci s procesorom po i2c zbernici.
Schéma zapojenia modulu (kliknite pre zväčšenie)
Na komunikáciu cez zbernicu RS485 som použil hotový modul s obvodom MAX485, ktorý obsahuje všetku potrebnú bižutériu. Modul som umiestnil na mnou navrhnutú DPS. Fotka a schéma zapojenia modulu je na nasledujúcom obrázku:
Schéma zapojenia modulu (kliknite pre zväčšenie)
Treba pamätať na to, že zbernica RS485 musí mať zapojené ukončovacie rezistory na krajných moduloch - v schéme modulu s MAX485 je to rezistor R7 s hodnotou 120ohm. Toto platí hlavne ak bude na zbernici viac modulov - v mojom prípade boli 4ks + master. Na hotovom module treba ale spraviť malé úpravy. V prvom rade zo všetkých modulov v režime SLAVE odspájkovať BIAS rezistory zaisťujúce kľudový stav zbernice RS485. Sú to rezistory R5 a R6 s hodnotou 20k zapojené medzi A-Vcc a B-GND. Na strane MASTER modulu treba osadiť BIAS rezistory s hodnotou 680ohm (medzi A-Vcc a B-GND). Pôvodné rezistory majú zlé hodnoty, na čo som bol upozornený členmi jedného fóra. Pri praktických testoch v domácnosti sa to prejavovalo problémami s komunikáciou. Po výmene rezistorov začalo všetko fungovať.
Komunikácia cez RS485 prebieha cez SW UART procesora, čím je zachovaná funkcia HW UARTu. Jeden pin procesora je použitý na riadenie toku dát cez linku RS485.
Pre modul som navrhol jednoduchú univerzálnu DPS, na ktorej je 5V stabilizátor AMS1117, vyvedené piny z procesora: UART, SPI, I2c, Dallas a niekoľko ďalších pinov, ktoré môžu slúžiť na rozšírenie funkcií. Išlo mi hlavne o univerzálnosť - jeden modul je senzor teploty/vlhkosti a k druhému je pripojený LCD cez i2c zbernicu - rozdiel je len v nahratom FW.
Namerané údaje sú dostupné v hodling registroch nasledovne:
400001 : ID podstanice - slúži na kontrolu, pri čítaní mastrom
400002 : stav pripojenia snímača k i2c zbernici : 100 = pripojený, 200 = chyba komunikácie alebo hodnoty teploty a vlhkosti = 0
400003 : znamienko indikujúce kladnú alebo zápornú teplotu. 0 = záporná teplota, 1 = kladná teplota
400004 : teplota v tvare INT. pri spracovaní nutné vydeliť hodnotu číslom 100 (2458 = 24,58°C)
400005 : nameraná vlhkosť v tvare INT, platí to, čo pri teplote
400006 : počet chýb v komunikácii RS485 od spustenia podstanice
Hotový modul namontovaný v izbe
Navrhnutá DPS sa zmestí do krabičky HAMMOND 1551V4WH s rozmermi 80x80x20mm, ktorá obsahuje ventilačné otvory. Tá je namontovaná v každej izbe, pričom na prepojenie som použil FTP kábel CAT5e.
Čítanie údajov z modulov s adresami 2-5 pomocou mastra a LCD pripojeného cez i2c zbernicu
Na čítanie registrov pomocou PC je potrebný prevodník USB-RS485 alebo COM-RS485 (ak používate PC s COM portom). Ako vhodný a jednoduchý program som použil Generic MODBUS/JBUS tester od Schneider electric, sitahnuteľný na adrese
https://www.se.com/us/en/faqs/FA180037/
Nastavenie programu GModbus tester
Ďalšou možnosťou je použiť rovnaký modul, len nahrať FW pre MASTER, ktorý číta registre z jednotlivých modulov na linke RS485. Údaje sa vypisujú na LCD 4x20 znakov, ktorý je pripojený cez i2c zbernicu (prevodník i2c-HD44780 s obvodom PCF8574 podľa tejto schémy
https://simple-circuit.com/arduino-i2c-lcd-pcf8574/). Testovací zdroják číta teplotu/vlhkosť postupne zo SLAVE modulov s adresami 2-5. Zdroják prikladám ako inšpiráciu, je to na hrubo napísané, aby som vedel jednoducho otestovať funkčnosť modulov po namontovaní v byte.
Na stiahnutie: