ATMEGA 328P-MU рдкрд░ рдерд░реНрдорд╛рдореАрдЯрд░ рдФрд░ рд╣рд╛рдЗрдЧреНрд░реЛрдореАрдЯрд░ - Arduino рд╡рд┐рдХрд╛рд╕ рд╕реНрддрд░ рдХреЛ рдКрдкрд░ рдЙрдард╛рдирд╛

рдЖрдЬ рдореИрдВ рдЕрдкрдиреЗ рдПрдХ Arduino рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдмрд╛рд░, рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдХрд╣реАрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдЕрд░реБрдбрд┐рдиреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдпрд╛, рд╡рд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рдХрд╛ рд╕реНрддрд░ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╡реЗрджрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдШрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рдиреЗ рдпрд╣ рд╕реЛрдЪрдХрд░ рдЦреБрдж рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╕рдм рджрд┐рдорд╛рдЧ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдореЙрдбреНрдпреВрд▓, рдмрдбрд╝реЗ рд╕рд╛рджреЗ рдмрдХреНрд╕реЗ, рддрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдФрд░ рдЧрд░реНрдо рдЧреЛрдВрдж :)ред рдПрдХ рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрдХрд░ рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА Xiaomi рдХреЗ рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдкрд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ Xiaomi рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдк рдЗрд╕реЗ рдПрдХ рдмреЙрдХреНрд╕ рдореЗрдВ 10 рд╕реЗрдореА рдорд╛рдкрдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдХреНрд╕ рдореЗрдВ рддрд╛рд░реЛрдВ рдФрд░ рд╣реЙрдЯрдореИрд▓реНрдЯ рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓реЗ рдХреА рддрд░рд╣ рдореЗрд░рд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╢рд╛рдпрдж рддрдм рдкреАрд╕реАрдмреА рдмреЛрд░реНрдбреЛрдВ рдкрд░ рдореЗрд░реА DIY arduino рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╢реБрд░реБрдЖрдд рд░рдЦреА рдЧрдИ рдереАред

рдЖрдЬ рдХреЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо atmega328p-mu рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рднреА arduino рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ atmega328p-au рдкреНрд░реЛрд╕реЗрд╕рд░ (Arduino Uno, Pro Mini, Nano) рдХрд╛ рдПрдХ "рдЫреЛрдЯрд╛" рд╕рдВрд╕реНрдХрд░рдг (рдПрдХ рдкреВрд░реНрдг рдПрдирд╛рд▓реЙрдЧ) рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рд▓реЗрдЦ рдкрдврд╝реЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдореИрд╕реЗрдВрд╕рд░реНрд╕ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Arduino IDE (рдФрд░ рди рдХреЗрд╡рд▓) рдХреЗ рд▓рд┐рдП 2.4 GHz, 915, 868, 433 MHz рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ IOT рд░реЗрдбрд┐рдпреЛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рд╕рд╛рде рд╣реА 485 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд╛рдпрд░реНрдб рдиреЗрдЯрд╡рд░реНрдХ рднреА рд╣реИ, рд╢рд╛рдпрдж рд╕рднреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рд░ рд╕рдордп рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рдкреАрд╕реАрдмреА рдмреЛрд░реНрдб рдкрд░ рд╕реЗрдВрд╕рд░ рд╣реА рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕реЗрдВрд╕рд░ рдмрдирд╛рдирд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдорд╛рдорд▓реЗ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдБрдЧрд╛ ... рд╣рд╛рдБ, рдРрд╕рд╛ рдордд рдХрд░реЛ :)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реЗрдВрд╕рд░ рд╣реА рдПрдХ рд╣реА arduinka рдкреНрд░реЛ рдорд┐рдиреА рд╣реИ, nRF24l01 рд░реЗрдбрд┐рдпреЛ рдореЙрдбреНрдпреВрд▓, SHT20 рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░, рдХреЗрд╡рд▓ рддрд╛рд░реЛрдВ рдФрд░ рдЧрд░реНрдо рдЧреЛрдВрдж рдХреЗ рдмрд┐рдирд╛ред "рдШрдВрдЯрд┐рдпрд╛рдБ рдФрд░ рд╕реАрдЯрд┐рдпрд╛рдБ" рдореЗрдВ рд╕реЗ, рдпрд╣ рд╣рд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдордХрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА SPI рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╣реИ (рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП DualOptibut рдмреВрдЯрд▓реЛрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдмрд╛рдж рдореЗрдВ рдореИрдВрдиреЗ рд╕рд░реНрдХрд┐рдЯ рдкреИрдХ рдкрд░ рдЙрдиреНрд╣реЗрдВ (рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡) рдбрд╛рд▓рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╡рд╛ рдФрд░ рдЖрдзреА рдмреИрдЯрд░реА рдкрд░ рдХреЛрдИ рдлрд░реНрдорд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ) рдФрд░ "crypto mic" ATSHA204A, рдЗрд╕рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд┐рдЯ (рдореИрд╕реЗрдВрдЬрд░ рдореЗрдВ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЖрджрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдХреЗрдЪ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ #def рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред



YouTube рдкрд░ рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдмреЛрд░реНрдб рдХреЛ Diptrace рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдпрд╣ рдХреБрдЫ "рдирд╛рд░рдХреАрдп" рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ jlcpcb.com, 2 рд░реБрдкрдпреЗ, рдХрд┐рд╕реА рднреА рд░рдВрдЧ рдкрд░ рдЪреАрди рдореЗрдВ рдмреЛрд░реНрдб рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛, рдФрд░ 2 рд╕рдкреНрддрд╛рд╣ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рд╣рд╛рде рдкрд░ "рдЕрдкрдиреА рдЦреБрдж рдХреА рд░рдЪрдирд╛" рдХреЗ 10 рдЯреБрдХрдбрд╝реЗ рдкрд╣рд▓реЗ рд╣реА рдорд┐рд▓ рдЧрдП :)ред





рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╢рд░реАрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдерд╛ред рдУрд╣, рдпрд╣ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЖрд╕рд╛рди рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХреА, рдореИрдВрдиреЗ рд╕реЙрд▓рд┐рдб рд╡рд░реНрдХреНрд╕ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдбрд┐рдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдореИрдВ рдЗрд╕ рд╕рдВрдкрд╛рджрдХ рдХреЛ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдорд╣реАрдиреЗ рддрдХ рдЗрддреНрдореАрдирд╛рди рд╕реЗ YouTube рдкрд░ рд╡реАрдбрд┐рдпреЛ рд╕рдмрдХ рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдкрд╛рда рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓реАред рдорд╛рдорд▓реЗ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдмреЛрд░реНрдб рдмрдирд╛рдирд╛ рдПрдХ рдмреБрд░рд╛ рдирд┐рд░реНрдгрдп рд╣реИ, рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╣рд┐рдпреЛрдВ рдореЗрдВ рд▓рд╛рдареА рдбрд╛рд▓рддреЗ рд╣реИрдВред рдмреЛрд░реНрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдорд╛рдорд▓реЗ рдореЗрдВ рдмреЛрд░реНрдб рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рддреАрди рд╕рд╛рдордиреЗ рдЖрдП, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдЗрдорд╛рд░рдд рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдПрдлрдбреАрдПрдо 3 рдбреА рдкреНрд░рд┐рдВрдЯрд░ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЬрдВрдЧрд▓ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реА рд╕рднреА рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдЬрдм рддрдХ рдпрд╣ рд╕рдордЭ рдЖрдИ рддрдм рддрдХ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдФрд░ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рддрдХрдиреАрдХ - рдПрд╕рдПрд▓рдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рдЪреБрдХрд╛ рдерд╛ред рджреЛ рдмрд╛рд░ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ- рд╕рдордЭреЗ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдХрд░, рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдСрди рдЕрд▓реА - рдПрдиреАрдХреЗрдЯрд┐рдХ рдлреЛрдЯреЙрди рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ред (рд▓рд┐рдВрдХ рдЕрдирд╛ рдЕрд▓реА, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ, рд╕рд╣рдмрджреНрдз рдирд╣реАрдВ, ... рдмрд╕ рдПрдХ рд▓рд┐рдВрдХ)ред

рдореИрдВ рдЕрднреА рд▓рд┐рдЦреВрдВрдЧрд╛, рдЕрднреА, рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, ... рдУрд╣, рдпрд╣ рд╢рд╛рдВрдд рдЪреАрдЬ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ !!! рд╡рд╣ рдорд╛рдорд▓рд╛ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдирд╣реАрдВ рдЫрдкрд╛ рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдП рдереЗред рдЦреИрд░, рдпрд╣ рд╢рд╛рдпрдж рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдЙрдкрдХрд░рдг, рдмрд╣реБрдд рд╣реА рд╕рдЯреАрдХ рд╡рд┐рд╡рд░рдг, рдмрдЯрди, рдлреЛрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ DIY рдХреЗрд╕, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд┐рд░ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЪреБрдВрдмрдХ рдХреЛ рдкреАрдЫреЗ рдХреЗ рдХрд╡рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓реЛрд╣реЗ рдХреА рд╕рддрд╣реЛрдВ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

















рдпреЗ FDM рдкреНрд░рд┐рдВрдЯрд░ рдкрд░ рдЙрд╕реА рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:





рдЪреВрдВрдХрд┐ рдЙрдкрдХрд░рдг рдЫреЛрдЯрд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ arduinka рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рдШреБ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╣реИрд░рд╛рди рд╣реЛрдирд╛ рдкрдбрд╝рд╛ред рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдЯреАрдЯреАрдПрд▓ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдПрдбрд╛рдкреНрдЯрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдЕрд▓реА рдкрд░ рд╕рдм рдХреБрдЫ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рд╛рдБ, рдХреЗрд╡рд▓ рдкреВрд░реНрдг рдЖрд░реНрджреАрдиреЛ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реИрдВ)

рдПрд╕рдПрдордбреА рдЯреИрдВрдЯрд▓рдо рд╕рдВрдзрд╛рд░рд┐рддреНрд░ 4.7uF - 4.7uF | 10v | 10% - рд╕реА 1
SMD рд╕рд┐рд░реЗрдорд┐рдХ рдХреИрдкреЗрд╕рд┐рдЯрд░ 100nF | Y5V - 100nF | 50v | + 80-20% - рд╕реА 2, рд╕реА 3, рд╕реА 4, рд╕реА 5, рд╕реА 6, рд╕реА 7
рдПрд▓рдИрдбреА - рдПрд▓рдИрдбреА рд╕рд╛рдЗрдб - D1
рдкрд┐рди рд╣реИрдбрд░ рдорд╣рд┐рд▓рд╛ - 2x3P | 6pin | 1.27 рдорд┐рдореА - рдЬреЗ 1, рдЬреЗ 2
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 20K рдУрдо - 20K | 5% - рдЖрд░ 1
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 4.7K рдУрдо - 4.7K | 5% - рдЖрд░ 2, рдЖрд░ 3, рдЖрд░ 4
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 470K рдУрдо - 470 | 1% - рдЖрд░ 5
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 1M рдУрдо - 1M | 1% - рдЖрд░ 6
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 18K рдУрдо - 18K | 5% - рдЖрд░ 7
SMD рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ 10K рдУрдо - 10K | 5% - рдЖрд░ 8
4-рдкрд┐рди рдПрд╕рдПрдордбреА рд╕рд╛рдЗрдб рдмрдЯрди - SW1, SW2
512-Kbit, 1.65V SPI рд╕реАрд░рд┐рдпрд▓ рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА - AT25DF512C-SSHN-B - U1
рдорд┐рдиреА NRF24L01 + 2.4GHz 1.27MM RF - nRF24l01 1.27 SMD - U2
ATMEGA328P-MU QFN32 - U3
CRYPTO рд╕реНрд╡рдЪрд╛рд▓рди, 1 рддрд╛рд░ - ATSHA204A-STUCZ-T - U4
рдЖрд░реНрджреНрд░рддрд╛ рдФрд░ рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдЖрдИрд╕реА - SHT20 - U5
CR2477-1 рдХреЗ рд▓рд┐рдП рдмреИрдЯрд░реА рдзрд╛рд░рдХ - L-KLS5-CR2477-1 - U6

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред DFRobot рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг SHT20 рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╕реНрдХреЗрдЪ, рдХрд┐рд╕реА рднреА рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП 5 рдорд┐рдирдЯ рдореЗрдВ рдореИрд╕реЗрдВрд╕рд░реНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреЗрдЪ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрдб рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
#include <Wire.h>
#include "DFRobot_SHT20.h"
DFRobot_SHT20    sht20; // https://github.com/DFRobot/DFRobot_SHT20

#define MY_DEBUG
//#define MY_DISABLED_SERIAL
#define MY_RADIO_RF24
#define MY_PASSIVE_NODE
#define MY_NODE_ID 200
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
//#define MY_OTA_FIRMWARE_FEATURE
//#define MY_SIGNING_ATSHA204
//#define MY_SIGNING_ATSHA204_PIN A3
//#define MY_SIGNING_REQUEST_SIGNATURES

#define TEMP_SENS_ID 1
#define HUM_SENS_ID 2
#define SETTING_LED_SENS_ID 100
#define DELAY_TIME_SENS_ID 101
#define BATTARY_SEND_SENS_ID 102
#define BATTARY_DATA_SENS_ID 103

#define BAT_COOF 3.04
#define BAT_MIN 195
#define BAT_MAX 295
#define ON 1
#define OFF 0

float humd;
float temp;
float oldhumd;
float oldtemp;
float tempThreshold = 0.5;
float humThreshold = 10.0;
static uint32_t lightMillis;
static uint32_t previousMillis;
uint32_t send_batteryTime;
uint32_t w_battetyTime = 0;
static uint8_t led_pin = 4;
static uint8_t mode_pin = 2; // interrupt
uint32_t delayTime;
int8_t battery;
int8_t old_battery;
uint8_t set_led;
boolean sleep_mode;
boolean configMode = 0;
int8_t timer_status = 0;
bool flag_mode_button = 0;
bool sleep_flag = 0;
bool listen_flag = 0;

#include <MySensors.h>

MyMessage msg_temp(TEMP_SENS_ID, V_TEMP);
MyMessage msg_hum(HUM_SENS_ID, V_HUM);
MyMessage msg_setting_led(SETTING_LED_SENS_ID, V_VAR1);
MyMessage msg_delay_time(DELAY_TIME_SENS_ID, V_VAR1);
MyMessage msg_battary_send(BATTARY_SEND_SENS_ID, V_VAR1);
MyMessage powerMsg(BATTARY_DATA_SENS_ID, V_VAR1);

void preHwInit()
{
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, OFF);
  pinMode(mode_pin, INPUT_PULLUP);
}

void before()
{
  set_led = loadState(100);
  if (set_led > 1) {
    set_led = 1;
    saveState(100, set_led);
  }
  delayTime = loadState(101);
  if (delayTime > 60) {
    delayTime = 3;
    saveState(101, delayTime);
  }
  send_batteryTime = loadState(102);
  if (send_batteryTime > 48) {
    send_batteryTime = 6;
    saveState(102, send_batteryTime);
  }


  digitalWrite(led_pin, ON);
}


void presentation()
{
  sendSketchInfo("Temp & Hum Sensor CR2477", "1.0");
  wait(100);
  present(TEMP_SENS_ID, S_TEMP, "TEMPERATURE DATA");
  wait(100);
  present(HUM_SENS_ID, S_HUM, "HUMIDITY DATA");
  wait(100);
  present(SETTING_LED_SENS_ID, S_CUSTOM, "LED MODE");
  wait(100);
  present(DELAY_TIME_SENS_ID, S_CUSTOM, "DELAY TIME/MIN");
  wait(100);
  present(BATTARY_SEND_SENS_ID, S_CUSTOM, "BATTERY SEND TIME/H");
  wait(100);
  present(BATTARY_DATA_SENS_ID, S_CUSTOM, "BATTERY DATA");
}

void setup()
{
  //attachInterrupt(0, configListener, RISING);
  digitalWrite(led_pin, OFF);
  wait(500);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
  wait(100);
  readBatLev();
  wait(100);
  sht20.initSHT20();
  wait(100);
  send_data();
  wait(100);
  send(msg_delay_time.set(delayTime));
  wait(100);
  send(msg_setting_led.set(set_led));
  wait(100);
  send(msg_battary_send.set(send_batteryTime));
}

void loop()
{
  if (configMode == 0) {



    if (sleep_flag == 0) {
      timer_status = sleep(digitalPinToInterrupt(mode_pin), FALLING, delayTime * 60 * 1000, false);
      //timer_status = sleep(digitalPinToInterrupt(mode_pin), RISING, delayTime * 60 * 1000, false);
      sleep_flag = 1;
    }
    if (timer_status == -1) {

      w_battetyTime = w_battetyTime + (delayTime * 60 * 1000);

      if (w_battetyTime >= send_batteryTime * 60 * 60 * 1000) {
        readBatLev();
        w_battetyTime = 0;
      }
      send_data();
      sleep_flag = 0;
    }
    if (timer_status == 0) {
      if (digitalRead(2) == LOW && flag_mode_button == 0) //  
      {
        flag_mode_button = 1;
        previousMillis = millis();
        wait(50);
      }
      if (digitalRead(2) == LOW && flag_mode_button == 1) {
        if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
          if (millis() - lightMillis > 50)    {
            lightMillis = millis();
            digitalWrite(led_pin, !digitalRead(led_pin));
          }
        }
        if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
          digitalWrite(led_pin, OFF);
        }
        if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500)) {
          if (millis() - lightMillis > 25)    {
            lightMillis = millis();
            digitalWrite(led_pin, !digitalRead(led_pin));
          }
        }
        if (millis() - previousMillis > 4500) {
          digitalWrite(led_pin, OFF);
        }
      }
      if (digitalRead(2) == HIGH && flag_mode_button == 1) //   
      {
        if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
          configMode = !configMode;
          flag_mode_button = 0;
          TRANSPORT_DEBUG(PSTR("MyS: CONFIGURATION MODE\n"));
          sleep_flag = 0;
          digitalWrite(led_pin, OFF);
        }
        if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
          flag_mode_button = 0;
          sleep_flag = 0;
        }
        if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500))
        {
          flag_mode_button = 0;
          sleep_flag = 0;
          digitalWrite(led_pin, OFF);
        }
        if (millis() - previousMillis > 4500) {
          flag_mode_button = 0;
          sleep_flag = 0;
          wait(50);
        }
      }
    }
  } else {
    if (listen_flag == 0) {
      RF24_startListening();
      listen_flag = 1;
    }
    if (millis() - lightMillis > 1000) {
      lightMillis = millis();
      digitalWrite(led_pin, !digitalRead(led_pin));
    }
    if (digitalRead(2) == LOW && flag_mode_button == 0) //  
    {
      flag_mode_button = 1;
      //previousMillis = millis();
      wait(50);
    }
    if (digitalRead(2) == LOW && flag_mode_button == 1) {
      
    }
    if (digitalRead(2) == HIGH && flag_mode_button == 1) //   
    {
       
      configMode = !configMode;
      listen_flag = 0;
      flag_mode_button = 0;
      TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
      digitalWrite(led_pin, OFF);
      wait(50);
    }
  }
}



void receive(const MyMessage & message)
{
  if (message.sensor == SETTING_LED_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getByte() <= 1) {
        set_led = message.getBool();
        saveState(100, set_led);
        send(msg_setting_led.set(set_led));
        if (set_led == 0) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: OFF\n"));
        }
        if (set_led == 1) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: ON\n"));
          if (set_led == 1) {
            digitalWrite(led_pin, ON);
            wait(50);
            digitalWrite(led_pin, OFF);
          }
        }
      }
    }
  }
  if (message.sensor == DELAY_TIME_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 60 && message.getULong() != 0) {
        delayTime = message.getULong();
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      } else if (message.getULong() > 60) {
        delayTime = 60;
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      } else if (message.getULong() == 0) {
        delayTime = 1;
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
  if (message.sensor == BATTARY_SEND_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 168) {
        send_batteryTime = message.getULong();
        saveState(102, send_batteryTime);
        send(msg_battary_send.set(send_batteryTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL BATTERY SEND IS SET: %d HOUR\n"), send_batteryTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
}

void send_data()
{
  humd = sht20.readHumidity();
  temp = sht20.readTemperature();
  int t_humd = (int)humd;
  int t_temp = (int)temp;
  if (abs(temp - oldtemp) >= tempThreshold) {
    send(msg_temp.set(temp, 1));
    oldtemp = temp;
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  wait(100);
  if (abs(humd - oldhumd) >= humThreshold) {
    send(msg_hum.set(humd, 1));
    oldhumd = humd;
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  TRANSPORT_DEBUG(PSTR("MyS: DATA - TEMPERATURE: %d, HUMIDITY %d\n"), t_temp, t_humd);
}


void readBatLev() {
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX0);
  wait(100);
  RF24_startListening();
  wait(200);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA, ADSC));
  uint8_t low  = ADCL;
  uint8_t high = ADCH;
  long temp = (high << 8) | low;
  float vcc = temp * 1.1 / 1023 * BAT_COOF * 100;
  battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
  if (battery < 0) {
    battery = 0;
  }
  if (battery > 100) {
    battery = 100;
  }
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL: %d, PREVIUS BATTERY LEVEL: %d\n"), battery, old_battery);
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp);

  /*
    if (old_battery != battery) {
      if (battery < old_battery) {
        old_battery = battery;
        wait(100);
        sendBatteryLevel(battery);
        wait(100);
        send(powerMsg.set(temp));
        TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
      } else {
        battery = old_battery;
      }
    }
  */
  wait(100);
  sendBatteryLevel(battery);
  wait(100);
  send(powerMsg.set(temp));
  TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
}


:


:


( ), Mysensors( Mysensors )



. , , , 3d www.openhardware.io. , Mysensors тАФ t.me/mysensors_rus.

Source: https://habr.com/ru/post/hi452234/


All Articles