เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

Habr เชชเชฐ โ€œDIY เช…เชฅเชตเชพ Do It Yourselfโ€ เชตเชฟเชญเชพเช—เชจเชพ เชคเชฎเชพเชฎ เชตเชพเชšเช•เซ‹เชจเซ‡ เชถเซเชญเซ‡เชšเซเช›เชพเช“! เช†เชœเชจเซ‹ เชฒเซ‡เช– TTP223 เชšเชฟเชช เชชเชฐ เชŸเชš เชธเซเชตเชฟเชš เชตเชฟเชถเซ‡ เชนเชถเซ‡ | เชกเซ‡เชŸเชพเชถเซ€เชŸ. เชธเซเชตเชฟเชš nRF52832 เชฎเชพเช‡เช•เซเชฐเซ‹เช•เชจเซเชŸเซเชฐเซ‹เชฒเชฐ เชชเชฐ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ | เชกเซ‡เชŸเชพเชถเซ€เชŸ, เชชเซเชฐเชฟเชจเซเชŸเซ‡เชก เชเชจเซเชŸเซ‡เชจเชพ เชธเชพเชฅเซ‡เชจเซเช‚ YJ-17103 เชฎเซ‹เชกเซเชฏเซเชฒ เช…เชจเซ‡ เชฌเชพเชนเซเชฏ MHF4 เชเชจเซเชŸเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชŸเชš เชธเซเชตเซ€เชš CR2430 เช…เชฅเชตเชพ CR2450 เชฌเซ‡เชŸเชฐเซ€ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เช›เซ‡. เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เชฎเซ‹เชกเชฎเชพเช‚ เชตเชชเชฐเชพเชถ 8 mA เช•เชฐเชคเชพเช‚ เชตเชงเซ เชจเชฅเซ€, เชธเซเชฒเซ€เชช เชฎเซ‹เชกเชฎเชพเช‚ 6 ยตA เช•เชฐเชคเชพเช‚ เชตเชงเซ เชจเชนเซ€เช‚.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เช…เช—เชพเช‰เชจเชพ เชคเชฎเชพเชฎ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซ€ เชœเซ‡เชฎ, เช† เชชเชฃ เชเช• Arduino เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช›เซ‡, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ Arduino IDE เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡. เช‰เชชเช•เชฐเชฃเชจเซเช‚ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช…เชฎเชฒเซ€เช•เชฐเชฃ Mysensors เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ | GitHub เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹, nRF5 เชฌเซ‹เชฐเซเชก GitHub เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡ เชฎเชพเชฏเชธเซ‡เชจเซเชธเชฐเซเชธเชฎเชพเช‚. เช…เช‚เช—เซเชฐเซ‡เชœเซ€-เชญเชพเชทเชพ เชธเชฎเซเชฆเชพเชฏ เชฎเช‚เชš - http://forum.mysensors.org, เชฐเชถเชฟเชฏเชจ-เชญเชพเชทเชพ เชธเชฎเซเชฆเชพเชฏ เชซเซ‹เชฐเชฎ - http://mysensors.ru/forum/
(เชœเซ‡เช“ เชญเชฃเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ - ะ”ะพะบัƒะผะตะฝั‚ะฐั†ะธั, เชธเซ€เชฐเซ€เชฏเชฒ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ, API, เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ, เชชเชพเชฐเซเชธเชฐ | เชฎเชฆเชฆ เช•เชฐเชตเชพ เชˆเชšเซเช›เชคเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ (เชฏเซ‹เช—เชฆเชพเชจ) เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชตเชฟเช•เชพเชธเชฎเชพเช‚ - ะ”ะพะบัƒะผะตะฝั‚ะฐั†ะธั)

เชŸเชš เชธเซเชตเซ€เชš เชฌเซ‹เชฐเซเชก เชกเซ€เชชเชŸเซเชฐเซ‡เชธ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชตเชฟเช•เชธเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชœเซ‡เชฎเชพเช‚ เชฒเซ‡เชธเชฐ เช†เชฏเชฐเซเชจเชฟเช‚เช— เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€ (LUT) เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซเช—เชพเชฎเซ€ เช‰เชคเซเชชเชพเชฆเชจเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚. เชฌเซ‹เชฐเซเชก 60x60mm เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชฎเชพเช‚ เชตเชฟเช•เชธเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ (เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เช—เซเชฒเชพเชธ เชชเซ‡เชจเชฒเชฎเชพเช‚ 80x80mmเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชนเซ‹เชฏ เช›เซ‡). เชเชจเซเชŸเซ‡เชจเชพ เชฎเซ‡เช—เซ‡เชเชฟเชจเชจเชพ เชชเซƒเชทเซเช เซ‹ เชชเชฐ เชธเชฐเซเช•เชฟเชŸ เช›เชพเชชเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เช…เชจเซ‡ เชฌเซ‹เชถ เช†เชฏเชฐเซเชจ เชธเชพเชฅเซ‡ "เชฒเซ‡เชจ" เชธเซ‡เชŸเชฟเช‚เช— (เชฎเชนเชคเซเชคเชฎ เชชเชพเชตเชฐ) เชธเชพเชฅเซ‡ เชกเชฌเชฒ-เชธเชพเช‡เชก เชซเซ‹เช‡เชฒ เชซเชพเช‡เชฌเชฐเช—เซเชฒเชพเชธ เชฌเซ‹เชฐเซเชก 1.5mm, 35ยตm (เชฌเซ€เชœเชพเชจเซ€ เช—เซ‡เชฐเชนเชพเชœเชฐเซ€เชฎเชพเช‚) เชชเชฐ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชซเซ‡เชฐเชฟเช• เช•เซเชฒเซ‹เชฐเชพเช‡เชกเชจเชพ เชธเซ‹เชฒเซเชฏเซเชถเชจ เชธเชพเชฅเซ‡ เช•เซ‹เชคเชฐเชฃเซ€ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เชœเซ‡ เช…เช—เชพเช‰ 1.5 เชฎเชฟเชฒเซ€ เช—เชฐเชฎ เชชเชพเชฃเซ€ เชฆเซ€เช  250 เชšเชฎเชšเซ€เชจเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ 15 เชฎเชฟเชจเชฟเชŸเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹.
เช‡เชจเซเชŸเชฐเชฒเซ‡เชฏเชฐ เชตเชฟเชฏเชพเชธ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชฌเซ‡เชŸเชฐเซ€ เชงเชพเชฐเช•เชจเซ‡ เชœเซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡ เชกเซเชฐเชฟเชฒเชฟเช‚เช— เช›เชฟเชฆเซเชฐเซ‹ DREMEL 3000 เชกเซเชฐเชฟเชฒ เชธเซเชŸเซ‡เชจเซเชก เชชเชฐ เชฎเชพเช‰เชจเซเชŸ เชฅเชฏเซ‡เชฒ DREMEL 220 เชฎเชฟเชจเซ€-เชกเซเชฐเชฟเชฒ เชธเชพเชฅเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เช‡เชจเซเชŸเชฐเชฒเซ‡เชฏเชฐ เชตเชฟเชฏเชพเชธ เชฎเชพเชŸเซ‡ เช›เชฟเชฆเซเชฐเซ‹ 0,4mm เชกเซเชฐเชฟเชฒ เชธเชพเชฅเซ‡ เชกเซเชฐเชฟเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ, เชฌเซ‡เชŸเชฐเซ€ เชงเชพเชฐเช• เชฎเชพเชŸเซ‡ 1,1mm เชธเชพเชฅเซ‡ เช›เชฟเชฆเซเชฐเซ‹. . เชฌเซ‹เชฐเซเชกเชจเซ€ เช•เชฟเชจเชพเชฐเซ€เช“ เชธเชพเชฅเซ‡ เช†เชจเซเชทเช‚เช—เชฟเช• เชฌเชพเชฌเชคเซ‹ DREMEL 540 เชเชŸเซ‡เชšเชฎเซ‡เชจเซเชŸ (เช•เชŸเซ€เช‚เช— เชธเชฐเซเช•เชฒ d=32.0mm) เชธเชพเชฅเซ‡ เชธเชฎเชพเชจ เชฎเซ€เชจเซ€-เชกเซเชฐเซ€เชฒ เชตเชกเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เช•เชพเชชเชฃเซ€ เชถเซเชตเชธเชจ เชฏเช‚เชคเซเชฐเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€.
เชœเชฒเซ€เชฏ เชฆเซเชฐเชพเชตเชฃเชฎเชพเช‚ เชฐเซ‹เช เชเชฒเซ‹เชฏ (1 เชฎเชฟเชฒเซ€ เชชเชพเชฃเซ€ เชฆเซ€เช  300 เชšเชฎเชšเซ€ เชธเซเชซเชŸเชฟเช•เซ€เช•เซƒเชค เชธเชพเช‡เชŸเซเชฐเชฟเช• เชเชธเชฟเชก) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชคเชฐเชฃเซ€เชตเชพเชณเชพ เชฌเซ‹เชฐเซเชกเชจเซเช‚ เชŸเซ€เชจเชฟเช‚เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚.

เชธเซ‹เชฒเซเชกเชฐเชฟเช‚เช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชฒเช—เชญเช— เชเช• เช•เชฒเชพเช• เชœเซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹ เชนเชคเซ‹, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ‹ เชธเชฎเชฏ เช‡เชจเซเชŸเชฐเชฒเซ‡เชฏเชฐ เชตเชฟเชฏเชพเชธ เชฎเชพเชŸเซ‡เชจเชพ เช›เชฟเชฆเซเชฐเซ‹เชฎเชพเช‚ เชธเซ‹เชฒเซเชกเชฐเชฟเช‚เช— เชตเชพเชฏเชฐ (เชŸเชฟเชจเชตเชพเชณเชพ, 0.4 เชฎเซ€เชฎเซ€ เชตเซเชฏเชพเชธเชฎเชพเช‚) เชชเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.

เชฌเซ‹เชฐเซเชก FLUX OFF เชเชฐเซ‹เชธเซ‹เชฒ เช•เซเชฒเซ€เชจเชฐเชฅเซ€ เชงเซ‹เชตเชพเช‡ เช—เชฏเซเช‚ เชนเชคเซเช‚.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เช‰เชชเช•เชฐเชฃเชจเชพ เชถเชฐเซ€เชฐเชจเซ€ เชกเชฟเชเชพเช‡เชจ เชคเซเชฐเชฟ-เชชเชฐเชฟเชฎเชพเชฃเซ€เชฏ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ-เชธเชนเชพเชฏเชฟเชค เชกเชฟเชเชพเช‡เชจ เชธเช‚เชชเชพเชฆเช•เชฎเชพเช‚ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เช•เซ‡เชธเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ 78,5mm X 78,5mm X 12mm.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เช•เซ‡เชธ เช…เชจเซ‡ เชฌเซ…เชŸเชฐเซ€ เช•เชฎเซเชชเชพเชฐเซเชŸเชฎเซ‡เชจเซเชŸ เช•เชตเชฐเชจเซเช‚ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡เชฒ เชฎเซ‰เชกเชฒ STL เชซเซ‰เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชชเช›เซ€ SLA เชชเซเชฐเชฟเชจเซเชŸเชฐ (เชธเชชเซ‹เชฐเซเชŸเซเชธ, เช‘เชฐเชฟเชเชจเซเชŸเซ‡เชถเชจ เช‰เชฎเซ‡เชฐเชตเชพ) เชชเชฐ เชชเซเชฐเชฟเชจเซเชŸเชฟเช‚เช— เชฎเชพเชŸเซ‡ เช† เชฎเซ‰เชกเชฒเซเชธ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชœเชฐเซ‚เชฐเซ€ เชนเชคเชพ. เช† เชคเชฌเช•เซเช•เซ‡, เชเช• เชจเชพเชจเซ€ เชธเชฎเชธเซเชฏเชพ เชŠเชญเซ€ เชฅเชˆ, เช•เชพเชฐเชฃ เช•เซ‡ เช˜เชฐเช—เชฅเซเชฅเซ SLA เชชเซเชฐเชฟเชจเซเชŸเชฐเซ‹เชจเซ‹ เชชเซเชฐเชฟเชจเซเชŸ เชตเชฟเชธเซเชคเชพเชฐ เชจเชพเชจเซ‹ เช›เซ‡. เชชเซเชฐเชฟเชจเซเชŸเชฟเช‚เช— เชธเชฎเชฏเชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚ เชธเซŒเชฅเซ€ เชถเซเชฐเซ‡เชทเซเช  เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เช‰เชชเช•เชฐเชฃ เช•เซ‡เชธเชจเซเช‚ เชฎเซ‹เชกเซ‡เชฒ เชชเซเชฐเชฟเชจเซเชŸเชฟเช‚เช— เชตเชฟเชธเซเชคเชพเชฐเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชฎเชพเช‚ เชฌเช‚เชงเชฌเซ‡เชธเชคเซเช‚ เชจเชฅเซ€. เชฎเซ‹เชกเซ‡เชฒเชจเซ‡ 45 เชกเชฟเช—เซเชฐเซ€ เชชเชฐ เชฎเซ‚เช•เชคเซ€ เชตเช–เชคเซ‡, เชคเซ‡ เชจเชฟเชฐเชพเชถเชพเชœเชจเช• เชชเชฐเชฟเชฃเชพเชฎ เชชเชฃ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡เชจเซเช‚ เชตเชœเชจ เชถเชฐเซ€เชฐเชจเชพ เชฎเซ‹เชกเซ‡เชฒเชจเชพ เชตเชœเชจ เชœเซ‡เชŸเชฒเซเช‚ เชนเชคเซเช‚. เชชเซ‹เชธเซเชŸ-เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—เชจเซ€ เชนเช•เซ€เช•เชค เชธเชพเชฅเซ‡ เช…เช—เชพเช‰เชฅเซ€ เชธเช‚เชฎเชค เชฅเชฏเชพ เชชเช›เซ€, เช†เช—เชณเชจเซ€ เชฌเชพเชœเซเช“เชฎเชพเช‚เชฅเซ€ เชเช• เชชเชฐ เชŸเซ‡เช•เซ‹ เชฌเชจเชพเชตเซ€เชจเซ‡, เชฎเซ‹เชกเซ‡เชฒเชจเซ‡ เชŠเชญเซ€ เชฐเซ€เชคเซ‡ เช›เชพเชชเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚. 5 เชฎเชพเช‡เช•เซเชฐเซ‹เชจเชจเซ€ เชฒเซ‡เชฏเชฐ เชธเซ‡เชŸเชฟเช‚เช— เชธเชพเชฅเซ‡ เชฌเซ‹เชกเซ€ เชชเซเชฐเชฟเชจเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ 50 เช•เชฒเชพเช•เชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹ เชนเชคเซ‹. เช†เช—เชณ, เช–เซ‚เชฌ เชœ เชเซ€เชฃเชพ เชฆเชพเชฃเชพเชตเชพเชณเชพ เชธเซ‡เชจเซเชกเชชเซ‡เชชเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ (เชนเซเช‚ เชจเช‚เชฌเชฐ เชฒเช–เซ€เชถ เชจเชนเซ€เช‚ เช•เชพเชฐเชฃ เช•เซ‡ เชฎเชจเซ‡ เช–เชฌเชฐ เชจเชฅเซ€ :)). เชฌเซ‡เชŸเชฐเซ€ เช•เชตเชฐเชจเซ‡ เชชเซเชฐเชฟเชจเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ 40 เชฎเชฟเชจเชฟเชŸเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชเชฒเชฟเชเช•เซเชธเชชเซเชฐเซ‡เชธเชฎเชพเช‚เชฅเซ€ เช—เซเชฒเชพเชธ เชชเซ‡เชจเชฒเซเชธ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช—เซเช‚เชฆเชฐเชตเชพเชณเซ€ เชชเซเชฒเชพเชธเซเชŸเชฟเช•เชจเซ€ เชซเซเชฐเซ‡เชฎ เชธเชพเชฅเซ‡ เชตเซ‡เชšเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชซเซเชฐเซ‡เชฎเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ€. เชฎเซ‡เช‚ เช•เชพเชšเชจเซ€ เชชเซ‡เชจเชฒเชจเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชนเซ‡เชฐเชกเซเชฐเชพเชฏเชฐ เชตเชกเซ‡ เชชเซเชฐเซ€เชนเชฟเชŸ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เช•เชพเชขเซ€ เชจเชพเช–เซ€.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

LED เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชฎเชพเชŸเซ‡เชจเซเช‚ เชตเชฟเชธเชพเชฐเช• เชเช•เซเชฐเซ‡เชฒเชฟเช• เชเชกเชนเซ‡เชธเชฟเชต 3M 9088-200 เชธเชพเชฅเซ‡ เชกเชฌเชฒ-เชธเชพเช‡เชก เชŸเซ‡เชชเชฅเซ€ เชฌเชจเซ‡เชฒเซเช‚ เชนเชคเซเช‚. เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฒเชพเช‡เชŸเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชนเชคเซ€, เชšเชพเช‡เชจเซ€เช เชเชกเชนเซ‡เชธเชฟเชต เชŸเซ‡เชช เช…เชจเซ‡ เชเชกเชนเซ‡เชธเชฟเชต เชชเซ‡เชชเชฐเชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เช‚เชชเชจเซ€ เชฒเซเชฏเซเชฎเชฟเชจเซ‹เชซเซ‹เชฐ เชฆเซเชตเชพเชฐเชพ เชŸเซ‡เชชเชฎเชพเช‚ เช•เชพเชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเชธเช‚เชฆเช—เซ€ เช˜เชฐเซ‡เชฒเซเช‚ เช‰เชคเซเชชเชพเชฆเช•เชจเซ€ เชคเชฐเชซเซ‡เชฃเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เชฎเชพเชฐเซ€ เชฒเชพเช—เชฃเซ€เช“ เช…เชจเซเชธเชพเชฐ, เชคเซ‡ เชคเซ‡เชœเชธเซเชตเซ€ เช…เชจเซ‡ เชฒเชพเช‚เชฌเซ€ เชšเชฎเช•เชคเซ€ เชนเชคเซ€. เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชชเชฟเช—เชฎเซ‡เชจเซเชŸเชตเชพเชณเชพ เช•เชพเช—เชณเชจเซ‹ เชšเซ‹เชฐเชธ 3M 9088-200 เชกเชฌเชฒ-เชธเชพเช‡เชก เชŸเซ‡เชช เชตเชกเซ‡ เชŸเซ‹เชš เชชเชฐ เช—เซเช‚เชฆเชฐเชตเชพเชณเซ‹ เชนเชคเซ‹.

เช•เชพเชšเชจเซ‡ 3M VHB 4910 เชเช•เซเชฐเซ‡เชฒเชฟเช• เชเชกเชนเซ‡เชธเชฟเชต เชธเชพเชฅเซ‡ เชกเชฌเชฒ-เชธเชพเช‡เชก เชŸเซ‡เชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเชตเชฟเชš เชฌเซ‹เชกเซ€ เชชเชฐ เช—เซเช‚เชฆเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.
เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เช•เชตเชฐเชจเซ‡ เชธเซเช•เซเชฐเซ M 1,4 X 5 mm เชธเชพเชฅเซ‡ เช เซ€เช• เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚.

เช‰เชชเช•เชฐเชฃเชจเซ€ เช•เชฟเช‚เชฎเชค 890 เชฐเซเชฌเซ‡เชฒเซเชธ เชนเชคเซ€.

เช†เช—เชณ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎ เชญเชพเช— เช†เชตเซเชฏเซ‹. เช•เซ‡เชŸเชฒเซ€เช• เชธเชฎเชธเซเชฏเชพเช“ เชนเชคเซ€. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ TTP223 เชธเซ‡เชจเซเชธเชฐ เชšเชฟเชชเซเชธ เชธเซเชฅเชฟเชฐ 3.3V เชชเชพเชตเชฐ เชธเชชเซเชฒเชพเชฏ เชธเชพเชฅเซ‡ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชกเชฟเชธเซเชšเชพเชฐเซเชœ เชฅเชฏเซ‡เชฒ เชฌเซ‡เชŸเชฐเซ€เชฅเซ€ เชธเซ€เชงเซ€ เชธเช‚เชšเชพเชฒเชฟเชค เชฅเชพเชฏ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€. 2.5v เชจเซ€ เช†เชธเชชเชพเชธ เชชเชพเชตเชฐ เชธเชชเซเชฒเชพเชฏ เชธเชพเชฅเซ‡ เช‰เชชเช•เชฐเชฃเชจเซ‡ เชถเชฐเซ‚ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช‰เชชเชฐเชพเช‚เชค เชตเชงเชพเชฐเชพเชจเชพ "เชกเซเชฐเซ‹เชกเชพเช‰เชจ" เชชเช›เซ€ เชœเซเชฏเชพเชฐเซ‡ Mysensors เชชเซเชฐเซ‡เชเชจเซเชŸเซ‡เชถเชจเชจเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ TTP223 เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฟเชฐเซเช•เชฟเชŸ (เช•เซ‡เชฒเชฟเชฌเซเชฐเซ‡เชถเชจ เชชเช›เซ€ เชคเชฐเชค เชœ) MK เชฎเชพเช‚ เชตเชฟเช•เซเชทเซ‡เชช เชชเซ‡เชฆเชพ เช•เชฐเซ‡ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเช•เซเชฐเชฟเชฏ เชŸเซเชฐเชฟเช—เชฐ เชธเชพเชฅเซ‡ เชนเชคเซเช‚.

เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเช•เชฟเชŸเชจเซ‡ เชชเชพเชตเชฐ เชธเชชเซเชฒเชพเชฏ เชธเชฐเซเช•เชฟเชŸ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ (gpio MK เชธเชพเชฅเซ‡ เชชเชพเชตเชฐ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ TTP223), เชตเชงเชพเชฐเชพเชจเซเช‚ เช—เซเชฐเชพเช‰เชจเซเชก เชธเชชเซเชฒเชพเชฏ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เช…เชจเซ‡ rgb led เชฒเชพเช‡เชจเซเชธ (เชœเซ‡ เช•เซ‡เชชเซ‡เชธเชฟเชŸเซ€เชต เชธเซ‡เชจเซเชธเชฐ เชฌเซ‹เชฐเซเชกเชจเซ€ เชฌเซ€เชœเซ€ เชฌเชพเชœเซเช เชšเชพเชฒเซ‡ เช›เซ‡) เชชเชฐ เช‰เชšเซเชš เชชเซเชฐเชคเชฟเช•เชพเชฐ เชงเชฐเชพเชตเชคเชพ เชฐเซ‡เชเชฟเชธเซเชŸเชฐเชจเซ‡ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ. เชคเซ‡ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐเชฎเชพเช‚ เชชเชฃ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚: เชฎเชพเชฏเชธเซ‡เชจเซเชธเชฐเซเชธ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชถเชฐเซ‚ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เช…เชจเซ‡ เชชเซเชฐเชธเซเชคเซเชคเชฟ เชชเชฐ เช•เชพเชฎ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เช•เซ‡เชชเซ‡เชธเชฟเชŸเซ€เชต เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเช•เซเชฏเซเชŸ เชฎเชพเชŸเซ‡ เชชเชพเชตเชฐเชจเซเช‚ เชธเช•เซเชฐเชฟเชฏเช•เชฐเชฃ. เชœเซเชฏเชพเชฐเซ‡ เชชเชพเชตเชฐ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ TTP223 เชšเชฟเชชเชจเชพ เชธเซเชตเชคเชƒ-เช•เซ‡เชฒเชฟเชฌเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡เชจเซ‹ เชตเชฟเชฒเช‚เชฌ เชฌเชฎเชฃเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡. เช† เชฌเชงเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡.

เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เซ‹เชก เชœเซ‹เชคเชพ เชชเชนเซ‡เชฒเชพ, เชนเซเช‚ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชฎเชพเชฏเชธเซ‡เชจเซเชธเชฐเซเชธเชฎเชพเช‚ เชธเซเช•เซ‡เชšเชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชฐเชšเชจเชพเชฅเซ€ เชชเซ‹เชคเชพเชจเซ‡ เชชเชฐเชฟเชšเชฟเชค เช•เชฐเซ‹.void before()
{
// ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝะฐั ั„ัƒะฝะบั†ะธั, ะตัะปะธ ัั€ะฐะฒะฝะธะฒะฐั‚ัŒ ัะพ ัั‚ะฐะฝะดะฐั€ั‚ะฝะพะน ัั‚ั€ัƒะบั‚ัƒั€ะพะน ะั€ะดัƒะธะฝะพ ัะบะตั‚ั‡ะตะน, ั‚ะพ before() ัั‚ะพ ะฟะพะดะพะฑะธะต setup(), ะพั‚ั€ะฐะฑะพั‚ะบะฐ ะฟั€ะพะธัั…ะพะดะธั‚ ะดะพ ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ั‚ั€ะฐะฝัะฟะพั€ั‚ะฝะพะณะพ ัƒั€ะพะฒะฝั Mysensors, ั€ะตะบะพะผะตะฝะดัƒะตั‚ัั ะฝะฐะฟั€ะธะผะตั€ ะดะปั ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ัƒัั‚ั€ะพะนัั‚ะฒ SPI
}

void setup()
{

}

void presentation()
{
//ะขัƒั‚ ะฟั€ะพะธัั…ะพะดะธั‚ ะฟั€ะตะทะตะฝั‚ะฐั†ะธั ะฝะพะดั‹ ะธ ะตะต ัะตะฝัะพั€ะพะฒ ะฝะฐ ะบะพะฝั‚ั€ะพะปะตั€ะต ั‡ะตั€ะตะท ะผะฐั€ัˆั€ัƒั‚ะธะทะฐั‚ะพั€
sendSketchInfo("Name of my sensor node", "1.0"); // ะฟั€ะตะทะตะฝั‚ะฐั†ะธั ะฝะฐะทะฒะฐะฝะธั ะฝะพะดั‹, ะฒะตั€ัะธะธ ะŸะž
present(CHILD_ID, S_WHATEVER, "Description"); // ะฟั€ะตะทะตะฝั‚ะฐั†ะธั ัะตะฝัะพั€ะพะฒ ะฝะพะดั‹, ะพะฟะธัะฐะฝะธั ัะตะฝัะพั€ะพะฒ
}

void loop()
{

}

เชŸเชš เชธเซเชตเชฟเชš เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชŸเซ‡เชธเซเชŸ เช•เซ‹เชก:test_sens.ino
/**
ะขะ•ะกะขะžะ’ะซะ™ ะกะšะ•ะขะง ะกะ•ะะกะžะ ะะžะ“ะž ะ’ะซะšะ›ะฎะงะะขะ•ะ›ะฏ ะก ะŸะ ะ•ะ ะซะ’ะะะ˜ะฏะœะ˜ ะะ NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

เชธเซเชตเซ€เชšเชฎเชพเช‚ เช‰เชชเช•เชฐเชฃเชจเซ€ เชชเชพเช›เชณ เชเช• เชŸเชš เชฌเชŸเชจ เช…เชจเซ‡ เชฏเซเช•เซเชคเชฟ เชฌเชŸเชจ เช›เซ‡. เช† เชŸเซ‡เช•เซเชŸ เชฌเชŸเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเชฐเซเชตเชฟเชธ เชฎเซ‹เชกเซเชธ, เช“เชตเชฐ-เชง-เชเชฐ เชฌเชพเชˆเชจเซเชกเชฟเช‚เช— เชฎเซ‹เชก เช…เชจเซ‡ เช‰เชชเช•เชฐเชฃ เชฐเซ€เชธเซ‡เชŸ เชฎเชพเชŸเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชฌเชŸเชจเชฎเชพเช‚ เช†เชฏเชฐเซเชจ เชเชจเซเชŸเซ€ เชฌเชพเช‰เชจเซเชธ เชซเซ€เชšเชฐ เช›เซ‡. เช•เซ‡เชชเซ‡เชธเชฟเชŸเซ€เชต เชธเซ‡เชจเซเชธเชฐเชจเซ€ เชฒเชพเช‡เชจ เช…เชจเซ‡ เช˜เชกเชฟเชฏเชพเชณ เชฌเชŸเชจเชจเซ€ เชฒเชพเช‡เชจ Schottky เชกเชพเชฏเซ‹เชกเซเชธ เชฆเซเชตเชพเชฐเชพ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชเชจเชพเชฒเซ‹เช— เชชเชฟเชจ p0.05 เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เช•เซ‡เชชเซ‡เชธเชฟเชŸเซ€เชต เชธเซ‡เชจเซเชธเชฐ เช…เชจเซ‡ เช˜เชกเชฟเชฏเชพเชณ เชฌเชŸเชจเชฅเซ€ MK เชชเชฟเชจ p0.25 เช…เชจเซ‡ p0.27 เชชเชฐ เชชเชฃ เชฐเซ‡เช–เชพเช“ เช›เซ‡. เชชเซ€เชจ 0.05 เชชเชฐ เชตเชฟเช•เซเชทเซ‡เชช เชธเช•เซเชฐเชฟเชฏ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชธเซเชฅเชฟเชคเชฟเช“ เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡.0.05. เชชเซ€เชจ pXNUMX เชชเชฐ, EVENTS_UP เชฎเชพเชฐเชซเชคเซ‡ เชคเซเชฒเชจเชพเช•เชพเชฐ (NRF_LPCOMP) เชฆเซเชตเชพเชฐเชพ เชตเชฟเช•เซเชทเซ‡เชช เชธเช•เซเชฐเชฟเชฏ เชฅเชพเชฏ เช›เซ‡. เชธเชฎเชธเซเชฏเชพเชจเซ‹ เช‰เช•เซ‡เชฒ เชฒเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเซ‡เชฐเชฃเชพ เชฎเชณเซ€ เช…เชนเซ€เช‚ ะธ เช…เชนเซ€เช‚.

เชธเซเชตเซ€เชšเชจเซ‡ Mysensors เชจเซ‡เชŸเชตเชฐเซเช•เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชœเซ‡เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เชธเซเชฎเชพเชฐเซเชŸ เชนเซ‹เชฎ เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐ เชฎเซ‡เชœเซ‹เชฐเซเชกเซ‹เชฎเซ‹ (เชธเชพเช‡เชŸ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ)

เชธเซเชŸเซ‡เชŸเชธเช…เชชเชกเซ‡เชŸ เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชธเซเชตเชฟเชš เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ PHP เช•เซ‹เชก

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

เชตเชฟเชกเซ€เชฏเซ‹เชฎเชพเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชœเซเช“

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชชเชพเช›เชณเชฅเซ€, เชฌเซ‚เชธเซเชŸ เช•เชจเซเชตเชฐเซเชŸเชฐ เชธเชพเชฅเซ‡ เชเช• เชตเชฟเช•เชฒเซเชช เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เชชเชฐเช‚เชคเซ เช† TTP223 เช•เซ‡เชชเซ‡เชธเชฟเชŸเซ€เชต เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฟเชฐเซเช•เชฟเชŸเชจเชพ เชธเช‚เชšเชพเชฒเชจ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€; เชœเซเชฏเชพเชฐเซ‡ เชธเชฎเช—เซเชฐ เชฌเซ‡เชŸเชฐเซ€ เชœเซ€เชตเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ€ เชฆเชฌเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชธเชพเชฐเซ€ เช…เชจเซ‡ เชธเชฎเชพเชจ เชชเซเชฐเช•เชพเชถเชจเซ€ เชตเชงเซ เช‡เชšเซเช›เชพ เชนเซ‹เชฏ เช›เซ‡.

เชœเซเช“เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช—เซ€เชฅเชฌ - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

เชฐเชถเชฟเชฏเชจ เชฌเซ‹เชฒเชคเชพ เชธเชฎเซเชฆเชพเชฏ เชธเชพเช‡เชŸ เชฎเชพเชฏเชธเซ‡เชจเซเชธเชฐเซเชธ

เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชšเซ‡เชŸ Mysensors โ€” Arduino IDE เชฎเชพเช‚ atmega 328, stm32, nRF5 เชฎเชพเช‡เช•เซเชฐเซ‹เช•เชจเซเชŸเซเชฐเซ‹เชฒเชฐเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ, เชฎเชพเชฏเชธเซ‡เชจเซเชธเชฐเซเชธ, เชŸเซ€เชชเซเชธ, เชฏเซเช•เซเชคเชฟเช“, เชฌเซ‹เชฐเซเชก เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชธเชพเชฅเซ‡เชจเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เชเชกเชชเซ€ เช‰เช•เซ‡เชฒ โ€” @mysensors_rus

เช•เซ‡เชŸเชฒเชพเช• เชซเซ‹เชŸเชพเชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชตเชงเชพเชฐเชพเชจเชพ เชซเซเชฒเซ‹เชฐเซ‹เชธเชจเซเชŸ เชฌเซ‡เช•เชฒเชพเช‡เชŸ เชธเชพเชฅเซ‡ เชตเชพเชฏเชฐเชฒเซ‡เชธ เชŸเชš เชธเซเชตเชฟเชš

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹