ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื’ืจืขืขื˜ื™ื ื’ืก ืฆื• ืึทืœืข ืœื™ื™ืขื ืขืจ ืคื•ืŸ ื“ื™ "ื“ื™ื™ ืึธื“ืขืจ ื˜ืึธืŸ ืขืก ื–ื™ืš" ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืื•ื™ืฃ Habr! ื“ืขืจ ืึทืจื˜ื™ืงืœ ืคื•ืŸ ื”ื™ื™ึทื ื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ืขื’ืŸ ื“ื™ ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืื•ื™ืฃ ื“ื™ TTP223 ืฉืคึผืึธืŸ | ื“ืึทื˜ืึทืฉื™ื˜. ื“ืขืจ ื‘ืึทืฉื˜ื™ืžืขืŸ ืึทืคึผืขืจื™ื™ืฅ ืื•ื™ืฃ ื“ื™ nRF52832 ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจ | ื“ืึทื˜ืึทืฉื™ื˜, ืึท YJ-17103 ืžืึธื“ื•ืœืข ืžื™ื˜ ืึท ื’ืขื“ืจื•ืงื˜ ืึทื ื˜ืขื ืข ืื•ืŸ ืึท ืงืึทื ืขืงื˜ืขืจ ืคึฟืึทืจ ืึท ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง MHF4 ืึทื ื˜ืขื ืข ืื™ื– ื’ืขื ื™ืฆื˜. ื“ื™ ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืึทืคึผืขืจื™ื™ืฅ ืื•ื™ืฃ CR2430 ืึธื“ืขืจ CR2450 ื‘ืึทื˜ืขืจื™ื–. ืงืึทื ืกืึทืžืฉืึทืŸ ืื™ืŸ ื˜ืจืึทื ืกืžื™ืกื™ืข ืžืึธื“ืข ืื™ื– ื ื™ื˜ ืžืขืจ ื•ื•ื™ 8 ืžืึท, ืื™ืŸ ืฉืœืึธืคืŸ ืžืึธื“ืข ื ื™ื˜ ืžืขืจ ื•ื•ื™ 6 ฮผA.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ ืึทืœืข ืคืจื™ืขืจื“ื™ืงืข ืคึผืจืึทื“ื–ืฉืขืงืก, ื“ืึธืก ืื™ื– ืื•ื™ืš ืึทืŸ Arduino ืคึผืจื•ื™ืขืงื˜, ื“ื™ ืคึผืจืึธื’ืจืึทื ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ื“ื™ Arduino IDE. ื“ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ Mysensors ืคึผืจืึธื˜ืึธืงืึธืœ | ื’ื™ื˜ื”ื•ื‘ ืœื™ื™ื‘ืจืขืจื™ื–, nRF5 ื‘ืจืขื˜ ืฉื˜ื™ืฆืŸ ื’ื™ื˜ื”ื•ื‘ ืื™ืŸ Mysensors. ืขื ื’ืœื™ืฉ-ืฉืคึผืจืึทืš ืงื”ื™ืœื” ืคืึธืจื•ื - http://forum.mysensors.org, ืจื•ืกื™ืฉ-ืฉืคึผืจืึทืš ืงื”ื™ืœื” ืคืึธืจื•ื - http://mysensors.ru/forum/
(ืคืืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืœืขืจื ืขืŸ - ื“ืึธืงื•ืžืขื ื˜ืึทื˜ื™ืึธืŸ, ืกื™ืจื™ืึทืœ ืคึผืจืึธื˜ืึธืงืึธืœ, ืึทืคึผื™, ืคึผืจืึธื˜ืึธืงืึธืœ, ืคึผืึทืจืกืขืจ | ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืฆื• ื”ืขืœืคืŸ (ืงืึทื ื˜ืจืึทื‘ื™ื•ืฉืึทื ื–) ืื™ืŸ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ - ื“ืึธืงื•ืžืขื ื˜ืึทื˜ื™ืึธืŸ)

ื“ื™ ืคืึทืจื‘ื™ื ื“ืŸ ืกื•ื•ื™ื˜ืฉ ื‘ืจืขื˜ ืื™ื– ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื™ืŸ ื“ื™ ื“ืขืขืคึผื˜ืจืึทืกืข ืคึผืจืึธื’ืจืึทื, ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืžืึทื ื•ืคืึทืงื˜ื•ืจื™ื ื’ ื ื™ืฆืŸ ื“ื™ ืœื™ื™ื–ืขืจ ื™ื™ืขืจื ื™ื ื’ ื˜ืขื›ื ืึธืœืึธื’ื™ืข (LUT) ืื•ืคึฟืŸ. ื“ื™ ื‘ืจืขื˜ ืื™ื– ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื™ืŸ ื“ื™ืžืขื ืฉืึทื ื– ืคื•ืŸ 60 ืงืก 60 ืžื (ืึท ื ืึธืจืžืึทืœ ื’ืœืื– ื˜ืึทืคืœื™ืข ื”ืื˜ ื“ื™ืžืขื ืฉืึทื ื– ืคื•ืŸ 80 ืงืก 80 ืžื). ื“ืขืจ ืงืจื™ื™ึทื– ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื“ืจื•ืงื˜ ืื•ื™ืฃ ื“ื™ ื‘ืœืขื˜ืขืจ ืคื•ืŸ ืึทื ื˜ืขื ืข ื–ืฉื•ืจื ืึทืœ ืื•ืŸ ื˜ืจืึทื ืกืคืขืจื“ ืžื™ื˜ ืึท ื‘ืึธืฉ ืื™ื™ึทื–ืŸ ืžื™ื˜ ื“ื™ "ืœืขืŸ" ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ (ืžืึทืงืกื™ืžื•ื ืžืึทื›ื˜) ืื•ื™ืฃ ืึท ื˜ืึธืคึผืœ-ืกื™ื™ื“ืึทื“ ืคื•ื™ืœ ืคื™ื™ื‘ืขืจื’ืœืึทืก ื‘ืจืขื˜ 1.5 ืžื, 35 ฮผm (ืื™ืŸ ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ืื ื“ืขืจืŸ).
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ืขื˜ืฉื™ื ื’ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ืึท ืœื™ื™ื–ื•ื ื’ ืคื•ืŸ ืคืขืจืจื™ืง ืงืœืึธืจื™ื™ื“, ืคืจื™ืขืจ ืฆื•ื’ืขื’ืจื™ื™ื˜ ืื™ืŸ ื“ื™ ืคึผืจืึทืคึผืึธืจืฉืึทื ื– ืคื•ืŸ 1.5 ื˜ื™ืกืคึผื•ื ื– ืคึผืขืจ 250 ืžืœ ืคื•ืŸ ื•ื•ืึทืจืขื ื•ื•ืึทืกืขืจ. ื“ืขืจ ืคึผืจืึธืฆืขืก ื’ืขื ื•ืžืขืŸ 15 ืžื™ื ื•ื˜.
ื“ืจื™ืœื™ื ื’ ื”ืึธืœืขืก ืคึฟืึทืจ ื™ื ื˜ืขืจืœื™ื™ึทืขืจ ื•ื•ื™ืึทืก ืื•ืŸ ืคึฟืึทืจ ืคืึทืกืึทื ื™ื ื’ ื“ื™ ื‘ืึทื˜ืึทืจื™ื™ืข ื”ืึธืœื“ืขืจ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ืึท DREMEL 3000 ืžื™ื ื™ ื‘ื•ื™ืขืจ ืžืึธื•ื ื˜ืขื“ ืื•ื™ืฃ ืึท DREMEL 220 ื‘ื•ื™ืขืจ ืฉื˜ื™ื™ืŸ ื”ืึธืœืขืก ืคึฟืึทืจ ื™ื ื˜ืขืจืœื™ื™ึทืขืจ ื•ื•ื™ืึทืก ื–ืขื ืขืŸ ื“ืจื™ืœื“ ืžื™ื˜ ืึท 0,4 ืžื ื‘ื•ื™ืขืจ, ื”ืึธืœืขืก ืคึฟืึทืจ ื“ื™ ื‘ืึทื˜ืึทืจื™ื™ืข ื”ืึธืœื“ืขืจ ืžื™ื˜ ืึท 1,1 ืžื ื‘ื•ื™ืขืจ . ื˜ืจื™ืžื™ื ื’ ืฆื•ื–ืืžืขืŸ ื“ื™ ื’ืขืžืืจืงืŸ ืคื•ืŸ ื“ื™ ื‘ืจืขื˜ ืื™ื– ื’ืขื˜ืืŸ ืžื™ื˜ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืžื™ื ื™-ื‘ื•ื™ืขืจ ืžื™ื˜ ืึท DREMEL 540 ืึทื˜ืึทื˜ืฉืžืึทื ื˜ (ืงืึทื˜ื™ื ื’ ืงืจื™ื™ึทื– ื“ = 32.0 ืžื). ื“ื™ ืคึผืจื•ื ื™ื ื’ ืื™ื– ื’ืขื˜ืืŸ ืื™ืŸ ืึท ืจืขืกืคึผืขืจืึทื˜ืึธืจ.
ื˜ื™ื ื™ื ื’ ืคื•ืŸ ื“ื™ ืขื˜ืฉื˜ ื‘ืจืขื˜ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ืจื•ื™ื– ืฆื•ืžื™ืฉ ืื™ืŸ ืึท ื™ื™ืงื•ื•ื™ืึทืก ืœื™ื™ื–ื•ื ื’ (1 ืœืขืคืขืœืข ืคื•ืŸ โ€‹โ€‹ืงืจื™ืกื˜ืึทืœื™ื™ื–ื“ ืกื™ื˜ืจื™ืง ื–ื•ื™ืขืจ ืคึผืขืจ 300 ืžืœ ืคื•ืŸ ื•ื•ืึทืกืขืจ).

ื“ืขืจ ืกืึทื“ืขืจื™ื ื’ ืคึผืจืึธืฆืขืก ื’ืขื ื•ืžืขืŸ ื•ื•ืขื’ืŸ ืึท ืฉืขื”, ืจื•ื‘ึฟ ืคื•ืŸ ื“ื™ ืฆื™ื™ื˜ ืื™ื– ืคืืจื‘ืจืื›ื˜ ืกืึทื“ืขืจื™ื ื’ ื“ืจืึธื˜ (ื˜ื™ื™ื ื“, 0.4 ืžื ืื™ืŸ ื“ื™ืึทืžืขื˜ืขืจ) ืื™ืŸ ื“ื™ ื”ืึธืœืขืก ืคึฟืึทืจ ื™ื ื˜ืขืจืœื™ื™ึทืขืจ ื•ื•ื™ืึทืก.

ื“ื™ ื‘ืจืขื˜ ืื™ื– ื’ืขื•ื•ืืฉืŸ ืžื™ื˜ FLUX OFF ืขืจืึทืกืึทืœ ืงืœื™ื ืขืจ.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื“ืขืจ ืคึผืœืึทืŸ ืคื•ืŸ ื“ื™ ื’ื•ืฃ ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื™ืŸ ืึท ื“ืจื™ื™-ื“ื™ืžืขื ืฉืึทื ืึทืœ ืงืึธืžืคึผื™ื•ื˜ืขืจ-ื™ื™ื“ื™ื“ ืคึผืœืึทืŸ ืจืขื“ืึทืงื˜ืึธืจ. ืงืึทืกื˜ืŸ ื“ื™ืžืขื ืฉืึทื ื– 78,5 ืžื X 78,5 ืžื X 12 ืžื.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื“ื™ ืงืึทืžืคึผืœื™ื˜ื™ื“ ืžืึธื“ืขืœ ืคื•ืŸ ื“ื™ ืงืึทืกื˜ืŸ ืื•ืŸ ื“ื™ ื‘ืึทื˜ืึทืจื™ื™ืข ืึธืคึผื˜ื™ื™ืœ ื“ืขืงืŸ ืื™ื– ื’ืขืจืื˜ืขื•ื•ืขื˜ ืื™ืŸ STL ืคึฟืึธืจืžืึทื˜, ื“ืขืžืึธืœื˜ ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ื“ื™ ืžืึธื“ืขืœืก ืคึฟืึทืจ ื“ืจื•ืงืŸ ืื•ื™ืฃ ืึท ืกืœืึท ื“ืจื•ืงืขืจ (ืึทื“ื™ื ื’ ืฉื˜ื™ืฆื˜, ืึธืจื™ืขื ื˜ื™ืจื•ื ื’). ืื™ืŸ ื“ืขื ื‘ื™ื ืข, ืึท ืงืœื™ื™ืŸ ืคึผืจืึธื‘ืœืขื ืื™ื– ืื•ื™ืคื’ืขืฉื˜ืื ืขืŸ, ื•ื•ื™ื™ึทืœ ื“ื™ ื“ืจื•ืง ืฉื˜ื— ืคื•ืŸ ื”ื•ื™ื–ื’ืขื–ื™ื ื“ SLA ืคึผืจื™ื ื˜ืขืจืก ืื™ื– ืงืœื™ื™ืŸ. ื“ืขืจ ืžืึธื“ืขืœ ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ืคืึทืœ ืื™ืŸ ื“ื™ ืžืขืจืกื˜ ืึธืคึผื˜ื™ืžืึทืœ ืฉื˜ืขืœืข ืงืึธืจืขื•ื• ืฆื• ื“ืจื•ืง ืฆื™ื™ื˜ ืื™ื– ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืื™ืŸ ื“ื™ ื“ื™ืžืขื ืฉืึทื ื– ืคื•ืŸ ื“ื™ ื“ืจื•ืง ื’ืขื’ื ื˜. ื•ื•ืขืŸ ืคึผืœื™ื™ืกื™ื ื’ ื“ื™ ืžืึธื“ืขืœ ืื™ืŸ 45 ื“ื™ื’ืจื™ื–, ืขืก ืื•ื™ืš ื”ืื˜ ืึท ื“ื™ืกืึทืคึผื•ื™ื ื™ื“ ืจืขื–ื•ืœื˜ืึทื˜; ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ื“ื™ ืฉื˜ื™ืฆืŸ ืื™ื– ื’ืœื™ื™ึทืš ืฆื• ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ื“ื™ ื’ื•ืฃ ืžืึธื“ืขืœ. ืขืก ืื™ื– ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื“ืจื•ืงืŸ ื“ื™ ืžืึธื“ืขืœ ื•ื•ืขืจื˜ื™ืงืœื™, ืžืื›ืŸ ืึท ืฉื˜ื™ืฆืŸ ืื•ื™ืฃ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืคืจืึธื ื˜ ื–ื™ื™ื˜ืŸ, ื•ื•ื™ื™ืœ ืžืกื›ื™ื ืื™ืŸ ืฉื˜ื™ื™ึทื’ืŸ ืžื™ื˜ ื“ื™ ืคืึทืงื˜ ืคื•ืŸ ืคึผืึธืกื˜ืŸ-ืคึผืจืึทืกืขืกื™ื ื’. ื“ืจื•ืงืŸ ื“ืขื ื’ื•ืฃ ื’ืขื ื•ืžืขืŸ 5 ืฉืขื” ืžื™ื˜ ืึท ืฉื™ื›ื˜ืข ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืคื•ืŸ 50 ืžื™ื™ืงืจืึทื ื–. ื“ืขืจื ืึธืš, ืคึผืจืึทืกืขืกื™ื ื’ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื–ื™ื™ืขืจ ืคื™ื™ึทืŸ-ื’ืจื™ื™ื ื“ ืกืึทื ื“ืคึผื™ื™ืคึผืขืจ (ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื ื•ืžืขืจ ื•ื•ื™ื™ึทืœ ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ :)). ื“ื™ ื‘ืึทื˜ืึทืจื™ื™ืข ื“ืขืงืœ ื”ืึธื˜ ื’ืขื“ื•ื™ืขืจื˜ 40 ืžื™ื ื•ื˜ ืฆื• ื“ืจื•ืงืŸ.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื’ืœืื– ืคึผืึทื ืึทืœื– ืคื•ืŸ Aliexpress ื–ืขื ืขืŸ ืคืืจืงื•ื™ืคื˜ ืžื™ื˜ ืึท ืคึผืœืึทืกื˜ื™ืง ืจืึทื ืฉื•ื™ืŸ ื’ืœื•ื“; ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ ืžื™ื˜ ืจื™ืžื•ื•ื•ื™ื ื’ ื“ื™ ืจืึทื. ืื™ืš ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ื“ื™ ื’ืœืื– ื˜ืึทืคืœื™ืข ื ืึธืš ืคึผืจืขื”ืขืึทื˜ื™ื ื’ ืขืก ืžื™ื˜ ืึท ืจืขื’ื•ืœืขืจ ื”ืึทื™ืจื“ืจื™ืขืจ.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื“ื™ ื“ื™ืคืคื•ืกืขืจ ืคึฟืึทืจ ื“ื™ ื’ืขืคื™ืจื˜ ื‘ืึทืงืœื™ื™ื˜ ืื™ื– ื’ืขืžืื›ื˜ ืคื•ืŸ ื˜ืึธืคึผืœ-ืกื™ื™ื“ืึทื“ ื˜ืึทืฉืžืข ืžื™ื˜ ืึทืงืจื™ืœื™ืง ืงืœืขืคึผื™ืง 3M 9088-200. ืคึฟืึทืจ ืคืœื•ืจืขืกืึทื ื˜ ืœื™ื™ื˜ื™ื ื’ ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืขื˜ืœืขื›ืข ืžืึทื˜ืขืจื™ืึทืœืก ืฆื• ืงืœื™ื™ึทื‘ืŸ ืคื•ืŸ, ื›ื™ื ืขื–ื™ืฉ ืงืœืขืคึผื™ืง ื˜ื™ื™ืคึผ ืื•ืŸ ืงืœืขืคึผื™ืง ืคึผืึทืคึผื™ืจ ืฉื ื™ื™ึทื“ืŸ ืื™ืŸ ื˜ื™ื™ืคึผืก ืคื•ืŸ ื“ื™ ื“ื™ื ืขืจ ืคื™ืจืžืข ืœื•ืžื™ื ืึธืคืึธืจ. ื“ื™ ื‘ืจื™ืจื” ืื™ื– ื’ืขืžืื›ื˜ ืื™ืŸ ื˜ื•ื™ื•ื•ืข ืคื•ืŸ โ€‹โ€‹ืึท ื“ื™ื ืขืจ ืคืึทื‘ืจื™ืงืึทื ื˜, ืœื•ื™ื˜ ืžื™ื™ืŸ ื’ืขืคื™ืœืŸ, ืขืก ืฉื™ื™ื ื˜ ื‘ืจื™ื™ื˜ืขืจ ืื•ืŸ ืžืขืจ. ื ืงื•ื•ืึทื“ืจืึทื˜ ืคื•ืŸ ืคึผืึทืคึผื™ืจ ืžื™ื˜ ืคืœื•ืจืขืกืึทื ื˜ ืคึผื™ื’ืžืขื ื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืœื•ื“ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืžื™ื˜ 3M 9088-200 ื˜ืึธืคึผืœ-ืกื™ื™ื“ืึทื“ ื˜ื™ื™ืคึผ.

ื“ื™ ื’ืœืื– ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืœื•ื“ ืฆื• ื“ื™ ื‘ืึทืฉื˜ื™ืžืขืŸ ื’ื•ืฃ ืžื™ื˜ ื˜ืึธืคึผืœ-ืกื™ื™ื“ืึทื“ ื˜ื™ื™ืคึผ ืžื™ื˜ 3M VHB 4910 ืึทืงืจื™ืœื™ืง ืงืœืขืคึผื™ืง.
ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื“ื™ ื“ืขืงืœ ืื™ื– ื’ืขื•ื•ืขืŸ ืคืึทืจืคืขืกื˜ื™ืงื˜ ืžื™ื˜ ืึท ืฉืจื•ื™ืฃ ืž 1,4 X 5 ืžื.

ื“ื™ ืคึผืจื™ื™ึทื– ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ืื™ื– ื’ืขื•ื•ืขืŸ 890 ืจื•ื‘ืœ.

ื•ื•ื™ื™ึทื˜ืขืจ ื’ืขืงื•ืžืขืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ื˜ื™ื™ืœ. ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืขื˜ืœืขื›ืข ืคืจืื‘ืœืขืžืขืŸ. ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– TTP223 ืกืขื ืกืขืจ ื˜ืฉื™ืคึผืก ืึทืจื‘ืขื˜ ื’ืจื•ื™ืก ืžื™ื˜ ืึท ืกื˜ื™ื™ื‘ืึทืœื™ื™ื–ื“ 3.3 ื•ื• ืžืึทื›ื˜ ืฆื•ืฉื˜ืขืœืŸ ืื•ืŸ ื ื™ืฉื˜ ื–ื™ื™ืขืจ ื’ื•ื˜ ื•ื•ืขืŸ ืคึผืึทื•ืขืจื“ ื’ืœื™ื™ึทืš ืคึฟื•ืŸ ืึท ื’ืขื–ื•ื ื˜-ื“ื™ืกื˜ืฉืึทืจื“ื–ืฉื“ ื‘ืึทื˜ืึทืจื™ื™ืข. ื•ื•ืขืŸ ืกื˜ืึทืจื˜ื™ื ื’ ื“ื™ ืžื™ื˜ืœ ืžื™ื˜ ืึท ืžืึทื›ื˜ ืฆื•ืฉื˜ืขืœืŸ ืึทืจื•ื 2.5 ื•ื•, ืคึผืœื•ืก ื ืึธืš ืึทืŸ ื ืึธืš "ื“ืจืึทื•ื•ื“ืึทื•ืŸ" ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืื•ื™ืก ื“ื™ Mysensors ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’, ื“ื™ TTP223 ืžื™ืงืจืึธืกื™ืจืงื•ื™ื˜ (ื’ืœื™ื™ืš ื ืึธืš ืงืึทืœืึทื‘ืจื™ื™ืฉืึทืŸ) ื’ืขืคึฟื™ืจื˜ ืึท ื™ื‘ืขืจืจื™ื™ึทืก ืคื•ืŸ ื“ื™ MK ื–ื™ื ื˜ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืžื™ื˜ ืึทืŸ ืึทืงื˜ื™ื•ื• ืฆื™ื ื’ืœ.

ื“ื™ ืžืึทื›ื˜ ืฆื•ืฉื˜ืขืœืŸ ืงืจื™ื™ึทื– ืฆื• ื“ื™ ืžื™ืงืจืึธืกื™ืจืงื•ื™ื˜ ืื™ื– ืคืืจืขื ื“ืขืจื˜ (ืžืึทื›ื˜ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ TTP223 ืžื™ื˜ gpio MK), ื ืึธืš ืขืจื“ ืื™ื– ืกืึทืคึผืœื™ื™ื“, ืื•ืŸ ืจืขืกื™ืกื˜ืึธืจืก ืžื™ื˜ ื”ืขื›ืขืจ ืงืขื’ื ืฉื˜ืขืœ ื–ืขื ืขืŸ ืจื™ืคึผืœื™ื™ืกื˜ ืื•ื™ืฃ ื“ื™ ืจื’ื‘ ื’ืขืคื™ืจื˜ ืฉื•ืจื•ืช (ื•ื•ืึธืก ืœื•ื™ืคืŸ ืื•ื™ืฃ ื“ื™ ืื ื“ืขืจืข ื–ื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืงืึทืคึผืึทืกื™ื˜ื™ื•ื•ืข ืกืขื ืกืขืจ ื‘ืจืขื˜). ืขืก ืื™ื– ืื•ื™ืš ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’: ืึทืงื˜ืึทื•ื•ื™ื™ืฉืึทืŸ ืคื•ืŸ ืžืึทื›ื˜ ืคึฟืึทืจ ื“ื™ ืงืึทืคึผืึทืกื™ื˜ื™ื•ื•ืข ืžื™ืงืจืึธืกื™ืจืงื•ื™ื˜ ื ืึธืš ืกื˜ืึทืจื˜ื™ื ื’ ื“ื™ Mysensors ืคืจื™ื™ืžื•ื•ืขืจืง ืื•ืŸ ืึทืจื‘ืขื˜ ืื•ื™ืก ื“ื™ ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’. ื“ื™ ืคืึทืจื”ืึทืœื˜ืŸ ืคึฟืึทืจ ืึทื•ื˜ืึธ ืงืึทืœืึทื‘ืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ TTP223 ืฉืคึผืึธืŸ ื•ื•ืขืŸ ืžืึทื›ื˜ ืื™ื– ื’ืขื•ื•ืขื ื“ื˜ ืื™ื– ื“ืึทื‘ืึทืœื“. ืึทืœืข ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ ื’ืึธืจ ื™ืœื™ืžืึทื ื™ื™ื˜ืึทื“ ื“ืขื ืคึผืจืึธื‘ืœืขื.

ืื™ื™ื“ืขืจ ืื™ืจ ื–ืขืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ืงืึธื“, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืื™ืจ ื‘ืืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ ื“ื™ ื’ืจื•ื ื˜ ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ืกืงืขื˜ืฉืึทื– ืื™ืŸ Mysensors.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 ื“ื™ื™ืึธื•ื“ื– ืื•ืŸ ืงืึธื ื ืขืงื˜ืขื“ ืฆื• ื“ื™ ืึทื ืึทืœืึธื’ ืฉื˜ื™ืคื˜ ืคึผ0.05, ืื•ืŸ ืื•ื™ืš ืคึฟื•ืŸ ื“ื™ ืงืึทืคึผืึทืกื™ื˜ื™ื•ื•ืข ืกืขื ืกืขืจ ืื•ืŸ ื“ื™ ื˜ืึทืงื˜ ืงื ืขืคึผืœ ืขืก ื–ืขื ืขืŸ ืฉื•ืจื•ืช ืฆื• ื“ื™ MK ืคึผื™ื ืก ืคึผ0.25 ืื•ืŸ ืคึผ0.27. .0.05 ืคึฟืึทืจ ืœื™ื™ืขื ืขืŸ ืฉื˜ืึทื˜ืŸ ื ืึธืš ืึทืงื˜ืึทื•ื•ื™ื™ื˜ื™ื ื’ ื“ื™ ื™ื‘ืขืจืจื™ื™ึทืก ืื•ื™ืฃ ืฉื˜ื™ืคื˜ ืคึผ 0.05. XNUMX. ืื•ื™ืฃ ืฉื˜ื™ืคื˜ ืคึผXNUMX, ืึท ื™ื‘ืขืจืจื™ื™ึทืก ื“ื•ืจืš ื“ื™ ืงืึทืžืคึผืขืจืึทื˜ืึธืจ (NRF_LPCOMP) ื“ื•ืจืš EVENTS_UP ืื™ื– ืึทืงื˜ื™ื•ื•ื™ื™ื˜ื™ื“. ืื™ืš ื‘ืืงื•ืžืขืŸ ื™ื ืกืคึผื™ืจืึทืฆื™ืข ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืคึผืจืึธื‘ืœืขื ื“ืึธ ะธ ื“ืึธ.

ื“ืขืจ ื‘ืึทืฉื˜ื™ืžืขืŸ ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ Mysensors ื ืขืฅ, ื’ืขืจืื˜ืŸ ื“ื•ืจืš ื“ื™ ืงืœื•ื’ ื”ื™ื™ื ืงืึธื ื˜ืจืึธืœืœืขืจ Majordomo (ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื‘ื–ื™ื™ึทื˜ืœ)

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; ืขืก ืื™ื– ืžืขืจ ืคืึทืจืœืึทื ื’ ืคึฟืึทืจ ื’ื•ื˜ ืื•ืŸ ืžื•ื ื“ื™ืจ ื™ืœื•ืžืึทื ื™ื™ืฉืึทืŸ ื•ื•ืขืŸ ื“ืจื™ื ื’ืœืขืš ื“ื™ ืฉืœื™ืกืœืขืŸ ืื™ื‘ืขืจ ื“ื™ ื’ืื ืฆืข ื‘ืึทื˜ืึทืจื™ื™ืข ืœืขื‘ืŸ.

Viewื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

Project Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

ืจื•ืกื™ืฉ-ื’ืขืจืขื“ื˜ ืงื”ืœ ืคึผืœืึทืฅ ืžื™ ืกืขื ืกืึธืจืก

ื˜ืขืœืขื’ืจืึทื ืฉืžื•ืขืกืŸ Mysensors - ืฉื ืขืœ ืœื™ื™ื–ื•ื ื’ ืฆื• ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ Mysensors, ืขืฆื•ืช, ื˜ืจื™ืงืก, ื™ื ืกื˜ืึธืœื™ื ื’ ื‘ืึธืจื“ื–, ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืึทื˜ืžืขื’ืึท 328, stm32, nRF5 ืžื™ืงืจืึธืงืึธื ื˜ืจืึธื•ืœืขืจื– ืื™ืŸ ื“ื™ Arduino IDE - @mysensors_rus

ืขื˜ืœืขื›ืข ืคืึธื˜ืึธืกื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ื•ื•ื™ืจืขืœืขืกืก ืคืึทืจื‘ื™ื ื“ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื ืึธืš ืคืœื•ืจืขืกืึทื ื˜ ื‘ืึทืงืœื™ื™ื˜

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’