Forum
Zdar všem,
tady je můj skeč. Není tam žádný limit na počet 1-wire sensorů na sběrnici. Tak můžete otestovat, kolik jich to zvládne na jedné sběrnici.
Můžete si na Arduino nacpat kolik senzorů chcete, v různých kombinacích, jste omezeni jenom dostupnými piny (můžete použít digitál i analog) a RAM (adresy a stavy senzorů se ukládají).
Skeč by měl být "fail-safe", tj. vypořádá se s chybami čtení senzorů. U čínslých DHT senzorů doporučuji HW řešení (tj. vypínat napájení DHT senzorů v případě chyby - viz skeč a config). Jo a zapomněl jsem zmínit, že u DHT se taky občas doporučuje pull-up odpor. Už nevím kolik, pokud byste to potřebovali, musíte to zjistit. U onewire by mělo (mohlo) fungovat dokonce i "plug-and-play" (skeč periodicky skenuje sběrnice a hledá nové sensory a odstraňujez paměti ty, které nereagují).
https://github.com/budulinek/Arduino-multiple-sensors-UDP
Pull-requesty na githubu vítány. Pokud byste potřebovali přidat jiné typy senzorů (např. tlak), můžete si kód snadno dopsat. Logika skeče je poměrně jednoduchá.
TODO: dodělat funkce na přijímání příkazů. Tj. skeč by kromě automatického odesílání hodnot (na základě cyklů a hystereze) reagoval i na požadavky (příkazy) zaslané přes UDP.
https://github.com/budulinek/Arduino-multiple-sensors-UDP
Skeč aktualizován:
HW:
- není potřeba vypínat napájení DHT senzorů, připojte Vcc natrvalo, k Arduinu stačí dovést DATA
- připomínám, že díky aktualizované Wire knihovně pro I2C je tato sběrnice fail-safe, takže úplně s klidem můžete I2C sběrnici (pro senzor světla BH1750FVI ) protáhnout na několik metrů (nenechte se zmást starými návody na netu)! Senzory BH1750FVI (v kombinaci s nějakými senzory pohybu) vřele doporučuju pro noční osvětlení
- vše otestováno, kromě DS2438 (pokud někdo má, budu rád za feedback)
SW:
- použita jiná knihovna pro DHT senzory
- spolehlivější čtení 1W senzorů. Dřív jsem měl cca 10% chybovost (rušení signálu kvůli souběhu datových a silových kabelů), ale implementoval jsem opakované čtení v případě chyby a dost to pomohlo (jsem na 100% úspěšnosti)
Cao,
Mezi vcc a data standartni 4k7 odpor ?
@budulinek takže na ty senzory světla můžu použít např. stávající volné žíly z pohybových senzorů (cca 10-15m délka?) a to čidlo i mrsknout k němu pod fresnelku - nezkoušel jsi? Jasně že bude úbytek světla, ale to by šlo pak zohlednit v configu asi opravou...
Nechce se mi čekat na aliexpress, je jedno jaký ethernet shield použiju? Např i tento k nanu?: https://arduino-shop.cz/arduino/1676-sitovy-ethernetovy-modul-w5500-tcp-ip-51-stm32-pro-arduino.html?gclid=Cj0KCQiAqdP9BRDVARIsAGSZ8AmiQfe5naQOfpHJmSiGfJ2WSxVRCSKRO8sHaJWLm9TIeEpJ1n-Ky3caAlb2EALw_wcB
Pro w5500 musis pouzit ethernet2.h knihovnu.
aha ok a ještě jsem našel tento levnější?:
https://www.laskarduino.cz/robotdyn-arduino-nano-ethernet-enc28j60-shield/
vzal bych tam i ty čidla osvitu v arduinu shopou je nemají 🙁
Na ty enc28j60 velky pozor, pokud si dobre pamatuji,maji problem prave s udp komunikaci.
Ano, k DHT22 mezi Vcc a Data doporučuju odpor (umístěný u senzoru). Pokud si pamatuju, dal jsem 3k3, ale 4k7 by taky měl fungovat. Pokud by kabel byl dlouhý a signál pořád špatný, můžeš zkusit slabší odpor.
Přesně tak, na senzory používám volné žíly v UTP kabelech natažených k vypínačům. Tady je foto "dvojboje" PIR senzor + BH1750FVI
Úbytek světla je, ale neřeším to ani ve skeči, ani v Loxone configu. Nepotřebuju přesné luxy, stačí, že to dokáže rozlišit úplná tma <> rozsvícené hlavní světlo <> denní světlo.
I2C sběrnice, kterou používají BH1750FVI senzory, byla vymyšlená na vzdálenosti v rámci jednoho tištěného spoje, takže na netu se dočteš, že absolutní maximum je 50 cm.... Kecy. Mám dva senzory, každý cca 8m. Jednou za bár hodin se mi v UDP logu objeví chyba (podotýkám, že cyklus čtení mám 1s), ale sběrnice běží dál a další čtení senzoru o 1s později už je OK. Takže 15m klidně zkus.
Ten ethernet shield klidně kup. Je tam standardní w5500 čip, který běží na standardní ethernet.h knihovně.
Jinak ale není jedno, jaké shieldy kupujete! Chraň vás ruka páně, abyste bohdá sáhli po čipu ENC28J60!! je to sračka, na kterou potřebuješ jinou (hodně velkou) knihovnu a stejně nemáš jistotu, že se to podaří rozchodit.
w5500je držák, všechny shieldy, co jsem s ním měl bez problémů fungovaly se standardní knihovnou.
Ta uprava pro ethernet2.h není vubec slozita,nahrajes knihovnu a upravis skec. To samo musis i u toho enc.
Koukám, jaký je rozdíl mezi ethernet a ethernet2 a našel jsem akorát:
https://github.com/adafruit/Ethernet2
Deprecated/Archived Library
This library is no longer going to be used, since the official Arduino library has been updated and works great https://github.com/arduino-libraries/Ethernet
Fakt? Ja musel pro w5500 pouzit orave ethernet2.h, mozma jsem mel jen neaktualni základní.
Na 1wire ale taky odpor,ne?
@budulinek ok dík zkusím.. koupím i vlhkost poprosím tě pak asi o pomoc při zprovoznění... ☺️
@David jj na 1-wire mám 4.7k odpor...
Jojo, na 1-wire je odpor mezi Vcc a DATA nutností (umístěno u Arduina). Nejdřív jsem taky dal 4k7, ale na mě byl moc silný. Zkoušel jsem všelijaké slabší a nakonec jsem to vyřešil kombinací 1k odpor + 5k potenciometr a "naladím" podle potřeby. Stačí ale jednou nastavit optimální odpor a pak už 1-wire šlape jako hodinky.
Potřeboval bych funkčnost rozšířit o MAX31850K. Dokázal byste mě někdo nasměrovat, jak podporu pro tento senzor doplnit?
Google říká:
Zkus místo https://github.com/milesburton/Arduino-Temperature-Control-Library
použít https://github.com/adafruit/MAX31850_DallasTemp
a místo https://www.pjrc.com/teensy/td_libs_OneWire.html
použít https://github.com/adafruit/MAX31850_OneWire
Koukám, že některé funkce (například validFamily() ) v těch alternativních knihovnách chybí, budeš je muset nahradit kódem přímo ve skeči.