Habr เชชเชฐ โDIY เช
เชฅเชตเชพ Do It Yourselfโ เชตเชฟเชญเชพเชเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชเชเซเชจเซ เชถเซเชญเซเชเซเชเชพเช! เชเชเชจเซ เชฒเซเช TTP223 เชเชฟเชช เชชเชฐ เชเช เชธเซเชตเชฟเช เชตเชฟเชถเซ เชนเชถเซ |
เช
เชเชพเชเชจเชพ เชคเชฎเชพเชฎ เชชเซเชฐเซเชเซเชเซเชเซเชธเชจเซ เชเซเชฎ, เช เชชเชฃ เชเช Arduino เชชเซเชฐเซเชเซเชเซเช เชเซ, เชชเซเชฐเซเชเซเชฐเชพเชฎ Arduino IDE เชฎเชพเช เชฒเชเชพเชฏเซเชฒ เชเซ. เชเชชเชเชฐเชฃเชจเซเช เชธเซเชซเซเชเชตเซเชฐ เช
เชฎเชฒเซเชเชฐเชฃ Mysensors เชชเซเชฐเซเชเซเชเซเชฒ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ |
(เชเซเช เชญเชฃเชตเชพ เชฎเชพเชเชเซ เชเซ เชคเซเชฎเชจเชพ เชฎเชพเชเซ -
เชเช เชธเซเชตเซเช เชฌเซเชฐเซเชก เชกเซเชชเชเซเชฐเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเช เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เชเซเชฎเชพเช เชฒเซเชธเชฐ เชเชฏเชฐเซเชจเชฟเชเช เชเซเชเซเชจเซเชฒเซเชเซ (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 เชเซเชชเซเชธเชฟเชเซเชต เชฎเชพเชเชเซเชฐเซเชธเชฟเชฐเซเชเชฟเชเชจเชพ เชธเชเชเชพเชฒเชจ เชธเชพเชฅเซ เชธเชเชฌเชเชงเชฟเชค เชจเชฅเซ; เชเซเชฏเชพเชฐเซ เชธเชฎเชเซเชฐ เชฌเซเชเชฐเซ เชเซเชตเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเซ เชฆเชฌเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชธเชพเชฐเซ เช
เชจเซ เชธเชฎเชพเชจ เชชเซเชฐเชเชพเชถเชจเซ เชตเชงเซ เชเชเซเชเชพ เชนเซเชฏ เชเซ.
เชเซเช
เชชเซเชฐเซเชเซเชเซเช เชเซเชฅเชฌ -
เชฐเชถเชฟเชฏเชจ เชฌเซเชฒเชคเชพ
เชเซเชเชฒเชพเช เชซเซเชเชพ
เชธเซเชฐเซเชธ: www.habr.com