рд▓рд╛рдареА рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд░рд┐рд╕рд╛рд╡ рд╕рдВрд░рдХреНрд╖рдг

рдирдорд╕реНрддреЗред рдРрд╕реА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд░рд┐рд╕рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рд╛рдЗрдбреНрд░реЛрдХреНрд▓реВ \ рдиреЗрдкреНрдЪреНрдпреВрди \ _- рдПрдВрдХрд╡рд╛рд╕реНрддреЛрд░реЛрдЬрд╝реЛ - рдкрд╛рдиреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ - рдПрдХ рдкрд╛рдиреА рд╕реЗрдВрд╕рд░ + рд╕реНрд╡рдЪрд╛рд▓рди + рд╡рд┐рджреНрдпреБрдд рдирд▓ рдХреА рдПрдХ рдЬреЛрдбрд╝реАред рд▓реЗрдХрд┐рди рд╢реИрддрд╛рди, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИ: рдХреИрд╕реЗ рдирд▓ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд░рд┐рд╕рд╛рд╡ рд╕реЗрдВрд╕рд░ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдХреНрдпреЛрдВ рдПрдХ рдХреА рд▓рд╛рдЧрдд 50 рд░реВрдмрд▓ рдФрд░ рджреВрд╕рд░реЗ рдХреА рд▓рд╛рдЧрдд 500 рд░реВрдмрд▓ рд╣реИред рдПрдХ рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдмреБрд▓реЗрдЯрд┐рди рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛, рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЖрдкрдХреА рдЖрдБрдЦреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдЧреА, рдЖрджрд┐ред

рдХрд╣рд╛рдиреА рдореЗрдВ рдореИрдВ рд╕рд┐рд╕реНрдЯрдо рдХреА рдИрдВрдЯреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реВрдВрдЧрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдкрд╕рдВрдж рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ред рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдлреИрдХреНрдЯреНрд░реА рд╕реЗрдВрд╕рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрдЯрд┐рдХрд▓ (рдПрдХреНрд╕ред рдПрд╕рдкреАрдЖрд░) рдлреЛрдЯреЙрди (рдРрд╕реЗ рдПрд╕реНрдк 8266 рдЬрд┐рд╕рдореЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╡рд╛рдпрд░рд┐рдВрдЧ рдкрд░ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдЖрдИрдбреАрдИ рд╣реИ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдШрд░-рдирд┐рд░реНрдорд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рдмреЗрд╕ рдмреНрд░реЙрдбрдХреЙрдо рд╕реЗ рдПрд╕рдЯреАрдПрдо рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдпрд╣ рд╕рдм рдСрд░реЗрдВрдЬ рдкрд╛рдИ рд╡рди рдкрд░ рдПрдХ рдУрдкрдирд╣реИрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред



рдПрдХ рд╕рдорд╛рдкреНрдд рдкреНрд░рдгрд╛рд▓реА рдХреНрдпреЛрдВ рдирд╣реАрдВ?

- рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрдЪреНрдЪ рд╣реИ
- рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд▓рдВрдЧрдбрд╝рд╛ рд╣реИред
- рддреИрдпрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рдореАрдЯрд░ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдкрд╛рдиреА рдХрд╛ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░, рдкрд╛рдиреА рдХреА рдирд┐рдХрд╛рд╕реА рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдФрд░ рдЕрдиреНрдп рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдХрд╛рдореБрдХ рдХрд▓реНрдкрдирд╛рдПрдВред

рдЪрд▓реЛ рдХреНрд░реЗрди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдЯреЛрдХрд╝ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорд╛рдереЗред рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╣ рдЙрдкрдирдЧрд░реЛрдВ рдореЗрдВ рд░рд╣рддрд╛ рдерд╛, рдЬрд╣рд╛рдБ рдкрд╛рдиреА рдХреА рдЧреБрдгрд╡рддреНрддрд╛ (рдЬреИрд╕реЗ рдХрд┐ рдЬрд╝рдордХрд╛рдбреЗ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣) рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рддреЛ рдЧреЗрдВрдж рд╡рд╛рд▓реНрд╡ 1/2 рдЗрдВрдЪ рдпрджрд┐ рдЖрдк рд╡рд░реНрд╖ рдХреЛ рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ 1 рдЗрдВрдЪ рдЧрд░реНрдо рддреМрд▓рд┐рдпрд╛ рд░реЗрд▓ рдкрд░, рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ - рдХреЗрд╡рд▓ рдЕрдЧрд░ рдореИрдВ рдПрдХ рд░рд┐рдВрдЪ рдХреЗ рд╕рд╛рде рдХрдВрдзреЗ рдХреЛ рдордЬрдмреВрдд рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдХреБрдЫ рдЪреАрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдХреИрд▓реНрд╢рд┐рдпрдо-рджреГрдврд╝ рд▓рдХрдбрд╝реА рдХреЗ рдЬрдорд╛рд╡ рдореЗрдВ рд╣реИ, рдПрдХ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде "рдЕрддрд┐рд╡реГрджреНрдзрд┐"ред

рддрджрдиреБрд╕рд╛рд░, рдЪреБрдирд╛рд╡ рд╣рд╛рдЗрдбреНрд░реЛрдХреНрд▓реЙрдХ рд╕реЗ рдкреЗрд╢реЗрд╡рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ - 21 рдПрди * рдЯреЛрдХрд╝ рдХрд╛ рдореА рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЪрдЯрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрд░реЗрди рдмрд╕ рд╡рд┐рд╢рд╛рд▓ рд╣реИ - рдЦрд░реАрдж рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред



рдирд▓ рдХреЛ рд╕реАрд▓ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдзрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░рдмрд░ рд╕реАрд▓, рдкреЗрдВрдЪ рдЧреНрд░рдВрдерд┐ рдХреЗ рдиреАрдЪреЗ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ред
рдЖрд╡рд░рдг рд╣рдЯрд╛ рджреЗрдВред



рд╣рдорд╕реЗ рдкрд╣рд▓реЗ рдмреЛрд░реНрдб рдФрд░ рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдХрд╛ рд╢реАрд░реНрд╖ рд╣реИред рдпрд╣ рд╕рдм 12 рд╡реЛрд▓реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдореАрди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗрдмрд▓ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдирд╛ рд╡рд╛рд▓реНрд╡ рдХреЛ рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдмреЛрд░реНрдб рдкрд░ рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг PIC 12f629 рдХрдВрдЯреНрд░реЛрд▓рд░ рджреЗрдЦрддреЗ рд╣реИрдВред рд░рд╣рддреЗ рдереЗ, рдХреНрд░реЗрди рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХред

рдмреЛрд░реНрдб рдХреЗ рдкреАрдЫреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред



L293 shagovik рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдлреЛрдЯреЛрдХреЙрдкрд░ (рдПрдорд┐рдЯрд░ + рдлреЛрдЯреЛрдбреЗрдЯреЗрдХреНрдЯрд░)ред рд╡рд╣ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдореБрдЦреНрдп рдЧрд┐рдпрд░ рдХреЛ рджреЗрдЦрддреА рд╣реИ, рдЬрд┐рд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╕рдлреЗрдж рдФрд░ рдХрд╛рд▓рд╛, рдмрдВрдж / рдЦреБрд▓рд╛ред



рдХреНрд░реЗрди рд╣рд░ рд╕рдордп рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдШреВрдорддрд╛ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ - рд╣рдо рд╢рд╛рдлреНрдЯ рдХреЛ рдореЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рддреЗред рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдХреНрд░реЗрди рдХрд╛ рд░реЛрдЯреЗрд╢рди рдХрдо рдкрд╣рдирдирд╛ рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рдЧреИрд░-рд╕рдВрдкрд░реНрдХ рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдЪрд░ рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдпрд╛ рд╕реАрдорд╛ рд╕реНрд╡рд┐рдЪ рдХреЗ рдЦрдЯреНрдЯрд╛ / рдЦрд░рд╛рдмреА рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реИред

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдХреНрд░реЗрди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ 2 рдирдЯреНрд╕ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреНрд░рд╛рдЗрд╡ рдФрд░ рдХреНрд░реЗрди рдХреЗ рдмреАрдЪ рдПрдХ рдЧрд░реНрдореА-рдЗрдиреНрд╕реБрд▓реЗрдЯ рдЧреИрд╕реНрдХреЗрдЯ рд╣реИред



рдбреЗрдврд╝ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореЗрд░реА рдорд░рдореНрдордд рд╣реБрдИ рдереАред рдХреНрд░реЗрди рдиреЗ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦрд░реАрджрд╛ рдерд╛ - рдЬреБрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрджрд░ рджреЗрдЦреЛ, рдЕрдзрд┐рдХ рдЦрд░реАрджреЗрдВ рдФрд░ рдорд░рдореНрдордд рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рд╣рд╡рд╛ рджреЗрдВред рд╣рд╛рдБ, рдЕрдм ... рдореИрдВ рдЗрд╕ рдирд╛рд░рдХреАрдп рд╕рд░реНрдХрд╕ рдореЗрдВ рдЬреЛ рдЕрдзрд┐рдХрддрдо рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рдерд╛, рдЙрд╕реЗ рдПрдХ рдХреНрд░реЗрди рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкрд╛рдиреА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдПрдХ рдЧрдВрджрдЧреА рдХрд▓реЗрдХреНрдЯрд░ рд░рдЦрдирд╛ рдерд╛ред
рдФрд░ рдХреЗрд╡рд▓ рдбреЗрдврд╝ рд╕рд╛рд▓ рдмрд╛рдж - рдореИрдВрдиреЗ рдПрдХ рджреВрд╕рд░реА рдХреНрд░реЗрди рдЦрд░реАрджреА рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред

рдирддреАрдЬрддрди, рд╣рдо рдПрдХ рдЕрдЬреАрдм рдФрд░ рджреБрд░реНрд▓рдн рдШрдЯрдирд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╣реИрдВ (рдбреЙрд░рдЬрд╝рд╛рджреЛрд╡ рдХреА рдЖрд╡рд╛рдЬрд╝ рдореЗрдВ рдкрдврд╝реЗрдВ) - рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рдереАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдгрди рдЕрдЬреАрдм рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рддрдХрдиреАрдХ рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд┐рдкрдгрди рдХреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдиреА рдкрд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рд▓реЛрдЧ рд╕рднреА рдЪрд┐рдкреНрд╕ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рд╕рд╛рдЗрдЯ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЦрдВрдб рдирд╣реАрдВ рд╣реИ - рдЕрдВрджрд░ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЗрдВрдЯреАрдЧреНрд░реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдПред рдмрдврд╝реЗ рд╣реБрдП рдЯреЙрд░реНрдХ рдХреА рдХреАрдордд рдкрд░ рднреА, рд╡реЗ рд╢реБрд░реВ рдореЗрдВ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рддреЗ - рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреНрд░реЗрди 1.5 рдП рдХреЗ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдзрдорд╛рдХрд╛ рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ 2-3 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп (рд╡рд░реНрддрдорд╛рди 0.7 рдП) рдореЛрдб рдореЗрдВ рдКрдкрд░ рдЬрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреА рд╣реИред рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 25-30 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рдЕрдиреБрднрд╡: рдЯреЛрдХрд╝ рдХреА рдХреАрдордд рдкрд░ - рдпрд╣ рдореЙрд╕реНрдХреЛ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд╣реИ, рдпрд╣рд╛рдВ рдкрд╛рдиреА рдХрд╛рдлреА рдареАрдХ рд╣реИ, рдПрдХ 100 рдорд╛рдЗрдХреНрд░реЛрди рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рдбреЗрдврд╝ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕рдХрд▓ рдФрд░ рдХреЛрдИ рдЕрддрд┐рд╡реГрджреНрдзрд┐ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИред рдЖрдкрдХреЛ рдХреАрдордд, рд╢реБрд░реБрдЖрддреА рд╕рдордп рдФрд░ рдХреЛрдард░реА рдореЗрдВ рдЬрдЧрд╣ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдЯреЛрдХрд╝ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдбреНрд░реЛрд▓рд╛рдХ рдЕрд▓реНрдЯрд┐рдореЗрдЯ, рдиреЗрдкрдЪреНрдпреВрди рдпрд╛ рдПрдХреНрд╡рд╛рд╕реНрдЯреЛрд░реЛрдЬрд╝ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреНрд░рд╛рдЗрд╡ рд╣реЛрдВрдЧреЗред рдореИрдВ рдкрд┐рдЫрд▓реЗ рджреЛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдЙрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рд▓рдЧрднрдЧ 5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдЧрд┐рдпрд░ рдереЗ, рдЕрдм рдЙрдиреНрд╣реЗрдВ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рд╣рд╛рдЗрдбреНрд░реЛрд▓реЙрдХ рднреА рд╣реИ - рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╣рд░ рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╣рд╛рдВ, рд╢рдХреНрддрд┐ 4 рдмреИрдЯрд░реА рд╕реЗ рд╕реНрд╡рд╛рдпрддреНрдд рд╣реИ, рдФрд░ рдЖрдзрд╛рд░ рдПрдХ рдЕрдВрддрд┐рдо рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдпрд╣ 5 рд╡реЛрд▓реНрдЯ рд╣реИ, рдЖрдкрдХреЛ 5 рдФрд░ 12 рд╡реЛрд▓реНрдЯ рдкрд░ рджреЛ рдмрд╕реЗрдВ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдСрдкреНрдЯрд┐рдХрд▓ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд┐рд╕рд╛рд╡ рд╕рдВрд╡реЗрджрдХ


рдореИрдВрдиреЗ рдЙрд╕реА WSU рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ - рд╕реЗрдВрд╕рд░реЛрдВ рдХреЛ рдЦрд░реАрджрд╛ред рдЙрдирдХреЗ рдкрд╛рд╕ рджреЛ "рдУрдкрди рдХрд▓реЗрдХреНрдЯрд░" рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ, рдПрдХ рдЬрдореАрди рдкрд░ рддрднреА рдЦреАрдВрдЪрддрд╛ рд╣реИ рдЬрдм рдкрд╛рдиреА рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдЕрдЧрд░ рдкрд╛рдиреА рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд┐рдЬрд▓реА рдХрдЯрдиреЗ рддрдХ рд╣рд░ рд╕рдордп рдЬрдореАрди рдкрд░ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдмрд╛рдХреА рддрд░реНрдХ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдФрд░ рдХреЛрдВрдбреЛ рдкреНрд░реЗрд╖рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХрд┐рдЯ рдореЗрдВ рддрд╛рд░ рдХрд╣реАрдВ рддреАрди рдореАрдЯрд░ рд╣реИрдВред рддрд╛рд░реЛрдВ рдХрд╛ рд░рдВрдЧ Ad_i_Israel рд╣реИред рдмреЛрд▓реА рджреЗрдЦреЗрдВ:

рд▓рд╛рд▓ (рднреВрд░рд╛) рддрд╛рд░ (Vcc) +5 рд╕реЗ +30 рд╡реЛрд▓реНрдЯ рддрдХ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд▓реЗ (рд╕рдлреЗрдж) рддрд╛рд░ (OUT2)
рд╣рд░реЗ рддрд╛рд░ (OUT1)
рдкреАрд▓реЗ рддрд╛рд░ (GND)

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╢реНрд╡реЗрдд / рд╢реНрдпрд╛рдо рдкреГрдереНрд╡реА рдмрдирд╛рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрд░реЗрди рдбреНрд░рд╛рдЗрд╡ рдкрд░, рд╡реИрд╕реЗ, рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд░рдВрдЧ рдореЗрдВ рддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдбрд┐рд╢рд╡реЙрд╢рд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕рд┐рдВрдХ рдХреЗ рдиреАрдЪреЗ рдкрд╣рд▓рд╛ рд╕реЗрдВрд╕рд░ рд░рд╕реЛрдИ рдореЗрдВ рд╣реИред



рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬрд▓ рдирд┐рдХрд╛рд╕реА рдЦрд╛рдИ рдореЗрдВ рдмрд╛рдерд░реВрдо рдореЗрдВ рджреВрд╕рд░рд╛ред рдЬрдм рдЙрд╕рдиреЗ рдкрдВрдЧрд╛ рд▓рд┐рдпрд╛, рддреЛ рд╡рд╣ рдЙрд╕реЗ рджреАрд╡рд╛рд░ рдкрд░ рдирд╣реАрдВ рд▓рд╛рдпрд╛ред рдирддреАрдЬрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдмрд╛рдерд░реВрдо рдФрд░ рдЯреЙрдпрд▓реЗрдЯ рд╕реЗ рдкрд╛рдиреА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд╛рдВрда рдереАред



рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдЕрдиреБрднрд╡ рд╕реЗ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╢рд╡реЙрд╢рд░ рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХрд╛ рдПрдХ рдЧрд▓рдд рдЕрд▓рд╛рд░реНрдо рдерд╛ред рдПрдХ рдорддрджрд╛рди рдЪрдХреНрд░ (500ms) рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдерд╛, рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ - рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЕрдм рд╕реЗрдВрд╕рд░ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ 10 рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдкрд░ рд╣реЛрддрд╛ рд╣реИред

рд╕реЗрдВрд╕рд░ рдХреЙрдиреНрдЯреИрдХреНрдЯ рдЧреЛрд▓реНрдб рдкреНрд▓реЗрдЯреЗрдб рд╣реИрдВред рдПрдХ рдорд┐рддреНрд░ рдХреЗ рдкрд╛рд╕ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╕рдорд╛рди рд╕реЗрдВрд╕рд░ рд╣реИрдВ, рдХреЛрдИ рдСрдХреНрд╕реАрдХрд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред

рджрдмрд╛рд╡ рд╕реЗрдВрд╕рд░


рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ - рд╢реЛрдореАрдЯрд░ред рд╕рдЯреАрдХрддрд╛ + - 0.5 рдПрдЯреАрдПрдо рдиреЗ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛ рджрд┐рдпрд╛ред рд╕реЗрдВрд╕рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкрд╛рдиреА рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдЕрд▓рд░реНрдЯ рдЖрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЕрд▓реА рдХреЛ рдЦрд░реАрджрд╛ ред

рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░


рдФрд░ рдХреНрдпреЛрдВ рди рдЬреЛрдбрд╝реЗрдВ? рдЙрдкрдпреЛрдЧреА рд╕реЗ - рдпрд╣ рд╡рд░реНрд╖ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЧрд░реНрдо рдкрд╛рдиреА рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдкреНрд░рдпреБрдХреНрдд рдбреАрдПрд╕ 18 рдмреА 20ред

рдХрд╛рдЙрдВрдЯрд░реЛрдВ


рд╕рдмрд╕реЗ рдЖрдо Itelma, рдПрдХ рдмрд╛рд░ рд╣рд░ 10 рд▓реАрдЯрд░ рд╕рдВрдкрд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдХ рдкрдХреНрд╖ рдкрд░, рдЖрдЙрдЯрдкреБрдЯ + 3.3v рддрдХ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореАрдЯрд░ рдЗрд╕реЗ рдЬрдореАрди рдкрд░ рдЦреАрдВрдЪрддрд╛ рд╣реИред

рдирд┐рдпрдВрддреНрд░рдХ




рдЕрдВрджрд░



рдХрдг рдлреЛрдЯреЙрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг ред рдЙрдирдХреЗ рдкрд╛рд╕ 2 рдЬреА рдпрд╛ 3 рдЬреА рдореЙрдбреНрдпреВрд▓ (рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдкрд╣рд▓реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд▓реИрдЧ рдерд╛, рдУрдХреЗ рдбрд╛рдпреЛрдб рдХреЗ рд╕рд╛рде рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЬрдЯрд┐рд▓ рд╕реЙрд╕реЗрдЬ рдЪрдмрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, i2c рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╡рд╛рдИрдлрд╛рдИ рдЦреЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЖрдк рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рд╕рд░реНрдХрд┐рдЯ рд╕реЗ рдмрд╛рд╣рд░ рджрдмрд╛рд╡ рд╕реЗрдВрд╕рд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ESP8266 рдкрд░ рд╕рдм рдХреБрдЫ рд╣рд▓рдЪрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлреЛрдЯреЙрди рдХреЛ рдХрдг рдЦрд╛рддреЗ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдРрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрдг рд╕реАрдПрд▓рдЖрдИ рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рдореИрдВ рдХреЗрд╡рд▓ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ) рдФрд░ рдПрдХ рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реВрдВред рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдВ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдХреНрд▓рд╛рдЙрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред



рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдиреЛрдбреНрд╕ рд╣реИрдВред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ - рдмрд╕ рдХреНрд▓рд╛рдЙрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд╕рдореГрджреНрдз рдирд┐рдпрдВрддреНрд░рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдИрдбреАрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рджрд░реНрдЬрди рдХрд╛рдЙрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдмрд╛рдХреА рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ред рдореЗрд░реЗ рдЕрд╡рд▓реЛрдХрди рдореЗрдВ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рддреБрд░рдВрдд рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдлрд░реНрдорд╡реЗрдпрд░ рд╕реНрд░реЛрдд рдХреЛрдб
// This #include statement was automatically added by the Particle IDE.
#include "Adafruit_SSD1306/Adafruit_SSD1306.h"

// This #include statement was automatically added by the Particle IDE.
#include "MQTT/MQTT.h"

// This #include statement was automatically added by the Particle IDE.
#include "OneWire/OneWire.h"

SYSTEM_THREAD(ENABLED);
SYSTEM_MODE(MANUAL);
STARTUP(WiFi.selectAntenna(ANT_EXTERNAL));
STARTUP(System.enableFeature(FEATURE_RETAINED_MEMORY));

struct counter_struct {
  float value;
  byte state;
  int pin;
};
struct valve_struct {
  byte state;
  int pin;
};
struct sensor_struct {
  int timeout;
  byte state;
  int pin;
};

unsigned long currentMillis = 0;
unsigned long previous_conected = 100000; //  
unsigned long previous_wifi_uptime = 100000; //  
unsigned long previous_counter_read = 0; //  
unsigned long wifi_uptime;
unsigned long start_temp_timer = 0;
unsigned long read_temp_timer = 0;
byte display_timeout = 0;

//temp onewire 
OneWire ds0 = OneWire(D2);
OneWire ds1 = OneWire(D3);
byte addr0[8];
byte addr1[8];
bool presense0 = false;
bool presense1 = false;
byte data[12];

#define OLED_RESET A7
Adafruit_SSD1306 display(OLED_RESET);


//valve control
retained valve_struct valve[2] = { {0, D4}, {0, D5} };

//counter control
retained counter_struct counter[2] = { {0, 1, A0}, {0, 1, A1} };
volatile int pressure[2] = {A2, A3};
#define SENSOR_TIMEOUT 10
volatile sensor_struct sensor[2] = { {0, 1, D6}, {0, 1, D7} };

void callback(char* topic, byte* payload, unsigned int length);

byte server[] = { 192,168,2,101};
MQTT client(server, 1883, callback);

bool publish_message(const char* t, const char* p, bool retain) 
{
    return client.publish(t, (uint8_t*)p, sizeof(p), retain);
}

bool publish_message(const char* t, int p, bool retain) 
{   
    char buf_d[12];
    int n = sprintf(buf_d,"%d",p);
    return client.publish(t, (uint8_t*)buf_d, n, retain);
}

bool publish_message(const char* t, float p, bool retain) 
{   
    //char buf_f[18];
    String s(p, 4);
//    dtostrf(p, 9, 4, buf_f);
    //int n = sprintf(buf_f,"%f",p);
    return client.publish(t, (uint8_t*)s.c_str(), s.length(), retain);
}

// recieve message
void callback(char* topic, byte* payload, unsigned int length) {
    char p[length + 1];
    memcpy(p, payload, length);
    p[length] = NULL;
    String message(p);
    String t(topic);
    if (t.equals("home/water_count/spark/set"))
    {
        if (message.equalsIgnoreCase("1"))
        {
            Particle.connect();
            if (waitFor(Particle.connected, 10000)) 
                {publish_message("home/water_count/spark", 1, false);}
            else
                {Particle.disconnect(); publish_message("home/water_count/spark", 0, false);}
        }
        else
        {
            Particle.disconnect();
            publish_message("home/water_count/spark", 0, false);
        }
    }
    else if (t.startsWith("home/water_count/valve/"))
    {
        int m = message.toInt();
        int x = t.substring(23,24).toInt();
        if (m > -1 && m < 2 && x > -1 && x <2) 
        {
            set_valve(x, m);
        }
        else
        {
            publish_message("home/water_count/valve/" + t.substring(23,24),  valve[x].state , true);
        }
    }
    else if (t.startsWith("home/water_count/counter/"))
    {
        float m = message.toFloat();
        int x = t.substring(25,26).toInt();
        if (m > -1 && m <= 999999 && x > -1 && x <2) 
        {
            counter[x].value = m;
        }
        publish_message("home/water_count/counter/" + t.substring(25,26),  counter[x].value , true);
    }
}

void setup() {
//Serial.begin(9600);
    WiFi.on();
    WiFi.connect();
    if (waitFor(WiFi.ready, 5000)) {mqtt_connect();}
    for (int i=0; i < 2; i++) 
    {
        pinMode(valve[i].pin, OUTPUT);
        digitalWrite(valve[i].pin, valve[i].state);
        pinMode(counter[i].pin, INPUT);
        pinMode(sensor[i].pin, INPUT);
        counter[i].state = digitalRead(counter[i].pin);
        pinMode(pressure[i], AN_INPUT);
    }
    pinMode(A4, INPUT_PULLUP);

    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
    display.clearDisplay();   // clears the screen and buffer

    //Particle.connect();
}

void loop() 
{
    currentMillis = millis();
    //       MQTT 
    if (currentMillis - previous_conected >= 30000 || previous_conected > currentMillis)
    {
        previous_conected = currentMillis;
        if (!client.isConnected() & wifi_uptime > 60)
        {
            mqtt_connect();
        }
        publish_message("home/water_count/rssi", WiFi.RSSI(), true);
    }
    if (currentMillis - previous_wifi_uptime >= 1000 || previous_wifi_uptime > currentMillis)
    {
        previous_wifi_uptime = currentMillis;
        WiFi.ready() ? wifi_uptime++ : wifi_uptime = 0;
        //work with button and display
        int fg = digitalRead(A4);
        if (display_timeout > 0)
        {
            display_timeout -= 1;
            if (display_timeout == 0) 
            { 
                display.clearDisplay();
                display.display();
            } 
        }
        if (fg == 0)
        {
            if (display_timeout == 0)
            {
                display.clearDisplay();   // clears the screen and buffer
                display.setTextSize(2);
                display.setTextColor(WHITE);
                display.setCursor(0,0);
                display.print("C=");
                display.println(counter[0].value, 4);
                display.setCursor(0,16);
                display.print("H=");
                display.println(counter[1].value, 4);
                display.setCursor(0,32);
                display.print("Valve=");
                display.print(valve[0].state);
                display.print("|");
                display.println(valve[1].state);
                display.setCursor(0,48);
                display.print("Sensor=");
                display.print(sensor[0].state);
                display.print("|");
                display.println(sensor[1].state);
                display.display();
            }
            display_timeout = 10;
        }
    }
    //counter check
    if (currentMillis - previous_counter_read >= 500 || previous_counter_read > currentMillis)
    {
        previous_counter_read = currentMillis;
        for (int i=0; i < 2; i++) 
        {
            byte count_state = digitalRead(counter[i].pin);
            if (count_state != counter[i].state)
            {
                counter[i].state = count_state;
                if (count_state == 0)
                {
                    counter[i].value += 0.01;
                    char buf18[30];
                    sprintf(buf18,"home/water_count/counter/%d", i);
                    publish_message(buf18 , counter[i].value, true);
                }
            }
            //    
            byte sensor_state = digitalRead(sensor[i].pin);
            if (sensor_state != sensor[i].state) //
            {
                sensor[i].state = sensor_state;
                sensor[i].timeout = SENSOR_TIMEOUT; 
            }
            if (sensor[i].timeout > 0) 
            {
                sensor[i].timeout -= 1;
                if (sensor[i].timeout == 0)
                {
                    char buf18[30];
                    sprintf(buf18,"home/water_count/sensor/%d", i);
                    publish_message(buf18 , sensor[i].state, true);
                    if (sensor[i].state  == 0)
                    {
                        set_valve(0, 1); //close both valve
                        set_valve(1, 1); //close both valve
                    }
                }
            }
        }
    }

    // temp onewire
    if (currentMillis - start_temp_timer >= 299000 || start_temp_timer > currentMillis)
    { // 
        start_temp_timer = currentMillis;
        presense0 = start_temp0();
        presense1 = start_temp1();
    }
    if (currentMillis - read_temp_timer >= 300000 || read_temp_timer > currentMillis)
    {// 
        read_temp_timer = currentMillis;
        start_temp_timer = currentMillis;
        if (presense0) read_temp0();
        if (presense1) read_temp1();
        //preasure calc and send
        char buf18[30]; 
        for (int i=0; i < 2; i++)
        {
            sprintf(buf18,"home/water_count/pressure/%d", i);
            float read_val = analogRead(pressure[i]);
            float value = (read_val - 600.0) / 300.0 ;
            publish_message(buf18 , value, false);
        }
    }
    //Particle.process();
    client.loop();
}

void mqtt_connect()
{
    if (client.connect("water_count"))
    { //  spark    
        client.subscribe("home/water_count/spark/set");
        publish_message("home/water_count/spark", Particle.connected() ? 1 : 0, true);
        client.subscribe("home/water_count/valve/+/set");
        client.subscribe("home/water_count/counter/+/set");
        
    }
}

bool start_temp0()
{
    
    if ( !ds0.search(addr0)) { ds0.reset_search(); return false;}
    ds0.reset_search();
    if (OneWire::crc8(addr0, 7) != addr0[7]) { return false;}
    
    ds0.reset();
    ds0.select(addr0);
    ds0.write(0x44, 0);
    return true; 
}
bool start_temp1()
{
    
    if ( !ds1.search(addr1)) { ds1.reset_search(); return false;}
    ds1.reset_search();
    if (OneWire::crc8(addr1, 7) != addr1[7]) { return false;}
    
    ds1.reset();
    ds1.select(addr1);
    ds1.write(0x44, 0);
    return true; 
}

bool read_temp0()
{
    //delay(1000);
    ds0.reset();
    ds0.select(addr0);
    ds0.write(0xBE, 0);

    for (int i = 0; i < 9; i++) 
    {
        data[i] = ds0.read();
    }
    int16_t raw = (data[1] << 8) | data[0];
    float celsius = (float)raw * 0.0625;
    if (celsius < 0 || celsius > 100) return false;
    publish_message("home/water_count/temp/0", celsius, false);
    //Serial.println(celsius);
    ds0.reset_search();
    return true;
}
bool read_temp1()
{
    //delay(1000);
    ds1.reset();
    ds1.select(addr1);
    ds1.write(0xBE, 0);

    for (int i = 0; i < 9; i++) 
    {
        data[i] = ds1.read();
    }
    int16_t raw = (data[1] << 8) | data[0];
    float celsius = (float)raw * 0.0625;
    if (celsius < 0 || celsius > 100) return false;
    publish_message("home/water_count/temp/1", celsius, false);
    //Serial.println(celsius);
    ds1.reset_search();
    return true;
}

void set_valve(int vlv, byte state)
{
    valve[vlv].state = state;
    digitalWrite(valve[vlv].pin, state);
    char buf26[26];
    sprintf(buf26,"home/water_count/valve/%d", vlv);
    publish_message(buf26 , state , true);
}


MQTT рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдмреНрд░реЛрдХрд░ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред Mqtt рдШрдЯрдирд╛рдУрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреА рдЗрд╕реА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗрдВрд╕рд░ рдФрд░ рд╣реЗрд▓рдореЗрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШрд░ / water_count / рд╡рд╛рд▓реНрд╡ / 0 - рдкрд╛рдиреА рдХреА рдПрдХ рдбреНрд░рд╛рдЗрд╡ред рдШрд░ / рдкрд╛рдиреА_рдХрд╛рдЙрдВрдЯ / рдХрд╛рдЙрдВрдЯрд░ / 0 - рдПрдХ рдардВрдбреЗ рдкрд╛рдиреА рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреА рд░реАрдбрд┐рдВрдЧред

рд╣рдо рдбреНрд░рд╛рдЗрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдп (рдардВрдбреЗ рдФрд░ рдЧрд░реНрдо рдкрд╛рдиреА) рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ:

client.subscribe("home/water_count/valve/+/set");
client.subscribe("home/water_count/counter/+/set");

рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдмрдЯрди рд╣реИ - рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдо рджрдмрд╛рдХрд░, рдХрд╛рдЙрдВрдЯрд░, рд╕реЗрдВрд╕рд░ рдФрд░ рдЯреИрдк рдХреА рд╡рд░реНрддрдорд╛рди рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдУрдПрд▓рдИрдбреА рд╕реНрдХреНрд░реАрди, рдЕрдЧрд░ рд╣рд░ рд╕рдордп рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдП рддреЛ рдЬрд▓реНрджреА рд╕реЗ рдлреАрдХрд╛ рдкрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред

STARTUP(System.enableFeature(FEATURE_RETAINED_MEMORY));

рдпрд╣ stm рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлреАрдЪрд░ рд╣реИ, рд╕рдВрджрд░реНрдн рдХрдг рдореЗрдВ рд╡реЗ рдЗрд╕реЗ BackupSRAM рдХрд╣рддреЗ рд╣реИрдВред рдлреЛрдЯреЙрди рдХрд╛ vbat рдЖрдЙрдЯрдкреБрдЯ рд╣реИ - рдпрд╣ рдмреИрдЯрд░реА рдкрд╛рд╡рд░ рдпрд╛ рдЪрд╛рд░реНрдЬрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдЬрдм рддрдХ рдЗрд╕ рдкреИрд░ рдкрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рд╣реИ, рддрдм рддрдХ SRAM рдХреЗ 4k рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреА-рдПрдирд░реНрдЬреЗрдЯрд┐рдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ EEPROM рдкрд░ рдкрд╣рдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдХреЛрдб рдореЗрдВ, рдЪрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ: рдмрдирд╛рдП рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ 1.5F рдкрд░ рд╕реБрдкрд░рдХреИрдкреЗрд╕рд┐рдЯрд░ рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдбреЗрдЯрд╛рд╢реАрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореЗрдореЛрд░реА 1.6v рдкрд░ рдорд░ рдЬрд╛рдПрдЧреА, рдкреНрд░реЛрдЯреЛ-рдмреЛрд░реНрдб рдкрд░ рдореЗрд░реЗ рдмреЗрдВрдЪ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдореЗрд░реЗ рдХреИрдкреЗрд╕рд┐рдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 2 рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдЖрдПрдЧрд╛ред рд╕реЗрдВрд╕рд░ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░ рдХреНрд░реЗрди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ "рд╕реНрд╡рд╛рдпрддреНрдд" рд╣реИ рдФрд░ рдУрдкрдирд╣реИрдм рдХреЗ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдбрд╛рдпрд░реЗрдХреНрдЯ рдбреНрд░рд╛рдЗрд╡ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд▓рд┐рдП 3-рд╡реЗ рд╕реНрд╡рд┐рдЪ рд╣реИ - рдСрдЯреЛрдореИрдЯрд┐рдХ, рдСрдл (рдУрдкрди рдЯреИрдкреНрд╕), рдХреНрд▓реЛрдЬ (рдХрд░реАрдм)ред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рд░реНрдХрд┐рдЯ рдЖрд░реЗрдЦ:



рдИрдЧрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдХрд╕реНрдЯрдо рд▓рд┐рдмрд╛рд╕ рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╢реБрд▓реНрдХ LUT рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрдЯрд░рд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рдХреБрдбрд╝ рдирд╣реАрдВ рдерд╛ред

LUT рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЛрд╕реНрдд рдкрд╛рдиреА рдХрд╛ рд╕реНрдирд╛рди


рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рдЗрдХрд╛рдИред рд╣рдореЗрдВ 12 рдФрд░ 5 рд╡реЛрд▓реНрдЯ рдЪрд╛рд╣рд┐рдПред рджрд╛рддрд╛ рд▓рд╛рдЗрди рдкрд░ ebay рдкрд░ рдЦреЛрдЬрд╛: ┬лрд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд╛рд╡рд░ рдПрдбрд╛рдкреНрдЯрд░ 5v 12 рд╡реА ┬╗, рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрд╕ ред

рдЖрд╡рд╛рд╕


рдпрд╣ рдПрдХ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд░ (рдЯрд╛рд░реЗрдВрдЯрдпреБрд▓рд╛ рдЯреЗрд╡реЛ) рдкрд░ рдкреАрдПрд▓рдП рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдиреЛрдЬрд▓ 0.4 рдорд┐рдореА, рдкрд░рдд 0.25 рдорд┐рдореАред рдХрд╡рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдмреЛрд░реНрдб рдмрдврд╝рддреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИред рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рджреАрд╡рд╛рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдврдХреНрдХрди рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдХреЛ рд╢рд┐рдХрдВрдЬрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдВрдзрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдврдХреНрдХрди рддрдирд╛рд╡ рд╣реИ (рдЬреИрд╕реЗ рдЬрд╛рдо рдХреЗ рдЬрд╛рд░ рдкрд░ рджрд╛рджреА рдХреЗ рдврдХреНрдХрди) рдФрд░ рджреАрд╡рд╛рд░реЛрдВ рдХреА рд╕реНрддрд░рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╕рдВрдЧреНрд░рд╣

рдореЗрдВ 3 рдбреА рдореЙрдбрд▓ ред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдПрдХ рдкрд╛рдиреА рдХреЗ рдкрд╛рдЗрдк рдкрд░ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред









Openhab


рдСрд░реЗрдВрдЬ рдкрд╛рдИ рд╡рди рдкрд░ рдЖрд░реНрдордмрд┐рдпрди рдХреЗ рддрд╣рдд рддреИрдирд╛рддред

рдЖрдЗрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
  -    ,  .
Number	watercount_temp1	"T cool [%.1f ┬░C]"			(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/temp1:state:default]" }
Number	watercount_temp2	"T hot [%.1f ┬░C]"			(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/temp2:state:default]" }
Number	watercount_count0	"Count cool [%.2f ┬│]"					(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/counter/0:state:default]" }
Number	watercount_count1	"Count hot [%.2f ┬│]"				(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/counter/1:state:default]" }
Number	watercount_pressure0	"P cool [%.2f .]"			(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/pressure/0:state:default]" }
Number	watercount_pressure1	"P hot [%.2f .]"				(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/pressure/1:state:default]" }
Number	watercount_sensor0	"Sensor0 is [MAP(water_sensor.map):%s]"		(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/sensor/0:state:default]" }
Number	watercount_sensor1	"Sensor1 is [MAP(water_sensor.map):%s]"		(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/sensor/1:state:default]" }
Number	watercount_valve0	"Valve cool"		(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/valve/0:state:default], >[mqtt_bro:home/water_count/valve/0/set:command:*:default]" }
Number	watercount_valve1	"Valve hot"				(gWaterCount)		{ mqtt="<[mqtt_bro:home/water_count/valve/1:state:default], >[mqtt_bro:home/water_count/valve/1/set:command:*:default]" }
String	watercount_sendStr "LastVol:[%s]"						(gWaterCount)
Number	watercount_sendCool "Send cool [%.2f ┬│]"		(gWaterCount)
Number	watercount_sendHot "Send hot [%.2f ┬│]"			(gWaterCount)
Number	watercount_sendSwitch "Autosend" 	(gWaterCount)
Number	watercount_rssi	"WaterCount [%d dB]"	(gSpark_RSSI)		{ mqtt="<[mqtt_bro:home/water_count/rssi:state:default]" }
Number	watercount_spark_state	"WaterCount Spark"		(gSpark)		{ mqtt="<[mqtt_bro:home/water_count/spark:state:default], >[mqtt_bro:home/water_count/spark/set:command:*:default]" }


рд░рд┐рд╕рд╛рд╡ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рдпрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрдВрдлрд░реНрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░рддрд╛ рд╣реИ
transform\water_sensor.map
1=dry
0=wet
undefined=undefined

рд╣рдо рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╣реИрдВ:

рд╕рд╛рдЗрдЯрдореИрдк рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ
Sitemap
Text label=┬л┬╗ icon=┬лwater┬╗
{
Frame
{
Text item=watercount_temp1
Text item=watercount_count0
Text item=watercount_pressure0
Switch item=watercount_valve0 mappings=[1=┬лClose┬╗, 0=┬лOpen┬╗]
}
Frame
{
Text item=watercount_temp2
Text item=watercount_count1
Text item=watercount_pressure1
Switch item=watercount_valve1 mappings=[1=┬лClose┬╗, 0=┬лOpen┬╗]
}
Frame
{
Text item=watercount_sensor0
Text item=watercount_sensor1
}
Frame
{
Switch item=watercount_sendSwitch mappings=[0=┬лOFF┬╗, 1=┬лON┬╗]
Text item=watercount_sendStr
Text item=watercount_sendCool
Text item=watercount_sendHot
}
}

рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдо:

рдирд┐рдпрдореЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ
rule "Check watercount_sensor0"
	when
		Item watercount_sensor0 received update
	then
		if ((watercount_sensor0.state as DecimalType) == 1)
		{
			if ((watercount_sensor0.historicState(now.minusSeconds(3)).state as DecimalType) == 1)
			{
				sendTelegram("****_bot", "Sensor0 was wet less than 5 seconds")
			}
			else
			{
				sendTelegram("****_bot", "Sensor0 become dry")
			}
		}
		else
		{
			if ((watercount_sensor0.historicState(now.minusSeconds(3)).state as DecimalType) == 0)
			{
				sendTelegram("****_bot", "Sensor0 was dry less than 5 seconds");			
			}
			else
			{
				sendTelegram("****_bot", "Sensor0 become wet! Valves will be closed!")
			}
		}
	end
rule "Check watercount_sensor1"
	when
		Item watercount_sensor1 received update
	then
		if ((watercount_sensor1.state as DecimalType) == 1)
		{
			if ((watercount_sensor1.historicState(now.minusSeconds(3)).state as DecimalType) == 1)
			{
				sendTelegram("****_bot", "Sensor1 was wet less than 5 seconds")
			}
			else
			{
				sendTelegram("****_bot", "Sensor1 become dry")
			}
		}
		else
		{
			if ((watercount_sensor1.historicState(now.minusSeconds(3)).state as DecimalType) == 0)
			{
				sendTelegram("****_bot", "Sensor1 was dry less than 5 seconds");			
			}
			else
			{
				sendTelegram("****_bot", "Sensor1 become wet! Valves will be closed!")
			}
		}
	end
	
rule "Check watercount_temp2"
	when
		Item watercount_temp2 received update
	then
		if ((watercount_temp2.state as DecimalType) < 37 )
		{
			sendTelegram("****_bot", String::format("Hot water temp drop to %s", watercount_temp2.state.toString));
		}
	end

rule "Check watercount_pressure0"
	when
		Item watercount_pressure0 received update
	then
		if ((watercount_pressure0.state as DecimalType) < 1 && (watercount_pressure0.historicState(now.minusSeconds(3)).state as DecimalType) >= 1)
		{
			sendTelegram("****_bot", String::format("Cool pressure drop to %s", watercount_pressure0.state.toString));
		}
		if ((watercount_pressure0.state as DecimalType) > 1 && (watercount_pressure0.historicState(now.minusSeconds(3)).state as DecimalType) <= 1)
		{
			sendTelegram("****_bot", String::format("Cool pressure rise to %s", watercount_pressure0.state.toString));
		}
	end
rule "Check watercount_pressure1"
	when
		Item watercount_pressure1 received update
	then
		if ((watercount_pressure1.state as DecimalType) < 1 && (watercount_pressure1.historicState(now.minusSeconds(3)).state as DecimalType) >= 1)
		{
			sendTelegram("****_bot", String::format("Hot pressure drop to %s", watercount_pressure1.state.toString));
		}
		if ((watercount_pressure1.state as DecimalType) > 1 && (watercount_pressure1.historicState(now.minusSeconds(3)).state as DecimalType) <= 1)
		{
			sendTelegram("****_bot", String::format("Hot pressure rise to %s", watercount_pressure1.state.toString));
		}
	end

rule "Generate send string counters" //every 24 day of mounth  in 00.01 minutes
	when
		Time cron "0 0 1 24 1/1 ?" 
	then
		
		var float deltaCool = (watercount_count0.state as DecimalType).floatValue() - (watercount_sendCool.state as DecimalType).floatValue()
		var float deltaHot = (watercount_count1.state as DecimalType).floatValue() - (watercount_sendHot.state as DecimalType).floatValue()
		
		if (deltaCool >= 0 && deltaHot >= 0)
		{
			watercount_sendStr.postUpdate(String::format(" %.2f / %.2f 3", deltaCool, deltaHot))
			watercount_sendCool.state = watercount_count0.state
			watercount_sendHot.state = watercount_count1.state
			sendTelegram("****_bot", String::format(" 23,  5, . 23.  тДЦ2560097 (.) = %.2f 3. C тДЦ2538996 (.) = %.2f 3. %s", (watercount_sendCool.state as DecimalType).floatValue(), (watercount_sendHot.state as DecimalType).floatValue(), watercount_sendStr.state.toString()))
		}
		else
		{
			watercount_sendSwitch.postUpdate(0)
			sendTelegram("****_bot", "Current counters value less than sended last time. Turn off autosend.")
		}
end
rule "Send string counters" 
	when
		Time cron "0 0 23 24 1/1 ?"
	then
		if (watercount_sendSwitch.state == 1)
		{
			sendMail("uk@uk.ru", " 23,  5, . 23", String::format(" 23,  5, . 23.  тДЦ2560097 (.) = %.2f 3. C тДЦ2538996 (.) = %.2f 3", (watercount_sendCool.state as DecimalType).floatValue(), (watercount_sendHot.state as DecimalType).floatValue()));
			sendTelegram("****_bot", "Send email with watercount values");
		}
		else
		{
			sendTelegram("****_bot", "Can't send email with watercount values - autosend is OFF.");
		}
end
rule "Rotate valves" 
	when
		Time cron "0 0 05 25 1/1 ?"
	then
		if (watercount_valve0.state == 0 && watercount_valve1.state == 0)
		{	
			watercount_valve0.postUpdate(1)
			Thread::sleep(1000)
			watercount_valve1.postUpdate(1)
			Thread::sleep(1000)
			watercount_valve0.postUpdate(0)
			Thread::sleep(1000)
			watercount_valve1.postUpdate(0)
			sendTelegram("****_bot", "Valves was rotated.");
		}
		else
		{
			sendTelegram("****_bot", "Can't rotate valves, it's closed.");
		}
end


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

рдирд┐рдпрдо рд╕реЗ рдЪрд▓реЛред

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

Watercount_temp2 рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ - рдпрджрд┐ 37 рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдЧрд░реНрдо рдкрд╛рдиреА рдардВрдбрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЖрдЧрдорди рдкрд░ рдлреНрд▓реЛ рд╣реАрдЯрд░ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реЙрдЯрд░рдХрд╛рдЙрдВрдЯ_рдкреНрд░реЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ - рд╣рдо рд╡рд░реНрддрдорд╛рди рдФрд░ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде 1 рдПрдЯреАрдПрдо рд╕реЗ рдиреАрдЪреЗ рдХреА рдЧрд┐рд░рд╛рд╡рдЯ рдФрд░ рдЙрд╕рдХреЗ рдКрдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред

рднреЗрдЬреЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рдЙрдВрдЯрд░- рдкреНрд░рддреНрдпреЗрдХ рдорд╣реАрдиреЗ рдХреА 24 рддрд╛рд░реАрдЦ рдХреЛ рд╕реБрдмрд╣ 1 рдмрдЬреЗ рдХреНрд░реЛрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рднреЗрдЬреЗ рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдм рдорд╛рди рдмрдбрд╝реЗ рд╣реИрдВред рдпрджрд┐ рдХрдо рд╣реИ, рддреЛ рдСрдЯреЛ рднреЗрдЬрдиреЗ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЕрд▓рд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдпрджрд┐ рдареАрдХ рд╣реИ - рд╣рдореЗрдВ рдЖрдкрд░рд╛рдзрд┐рдХ рдХреЛрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдпрд╛рдж рд╣реИ, рддреЛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо watercount_sendStr рдореЗрдВ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рдЦрд╛рдпрд╛ред

рдЬрдирд░реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ - 24 рддрд╛рд░реАрдЦ рдХреЛ 23.00 рдмрдЬреЗ рдХреНрд░реЛрди рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдСрдЯреЛ рднреЗрдЬрдирд╛ рд╕рдХреНрд╖рдо рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЪрд╛рд▓реВ рд╣реИ - рд╣реЗрд▓рдореЗрдЯ рд╢рд┐рдкрд┐рдВрдЧ рдХрдВрдкрдиреА рдХреЗ рдореЗрд▓ рдкрд░ рдХрд╛рдЙрдВрдЯрд░ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдкреВрд░реЗ рджрд┐рди рдореЗрдВ 24 рд╡рд╛рдВ рджрд┐рди рд╣реИ, рдХреБрдЫ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдпрд╛ рдмрд╕ рдСрдЯреЛ рднреЗрдЬрдиреЗ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЯреЗрд▓реАрдлрд╝реЛрди рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИред

рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ ред рд╡рд╛рд▓реНрд╡ рдШреБрдорд╛рдПрдБ- рдЙрдмрд▓рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдирд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ / рдЦреЛрд▓рдиреЗ рдХрд╛ рдирд┐рдпрдоред 25 рддрд╛рд░реАрдЦ рдХреЛ рд╕реБрдмрд╣ 5 рдмрдЬреЗ - рддрд╛рдХрд┐ рдбрд┐рд╢рд╡реЙрд╢рд░ рдпрд╛ рд╡реЙрд╢рд┐рдВрдЧ рдорд╢реАрди рдХреЗ рдХрд╛рдо рдореЗрдВ рди рдЖрдПрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪ рднреА рдЬрд╛рддрд╛ рд╣реИ - рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдкрд╛рдиреА рдХрд╛ рдУрд╡рд░рд▓реИрдк рд▓рдЧрднрдЧ 3-4 рд╕реЗрдХрдВрдб рд╣реЛрдЧрд╛ред

рдФрд░ рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ...
рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рдмрд┐рдВрджреБ (рдУрдкрдирд╣реИрдм) рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдк рддрд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд╕реНрд╡рд╛рдпрддреНрдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдкрд╛рдиреА рдХреЗ рдореАрдЯрд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА рдПрдХ рдШрдЯрдирд╛ рдЖ рдЧрдИ рд╣реИ - рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реА рд╕рдХреНрд░рд┐рдп рд╣реИ, рд╕рд╛рдордиреЗ рдХреЗ рджрд░рд╡рд╛рдЬреЗ рдХреЗ рддрд╛рд▓реЗ рдмрдВрдж рд╣реИрдВ, рдбрд┐рд╢рд╡реЙрд╢рд░ рдФрд░ рд╡реЙрд╢рд┐рдВрдЧ рдорд╢реАрди рдХреА рдКрд░реНрдЬрд╛ рдЦрдкрдд 5 рд╡рд╛рдЯ рд╕реЗ рдХрдо рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реЗрдВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рд╣рдо рдХреНрд░реЗрди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдмрдирд╛рддреЗ рд╣реИрдВ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдмреЙрдЯ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдж рдореЗрдВ рдПрдХ рдзрд╛рдЧреЗ рдХреА рддрд░рд╣ рд╣реИред

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


All Articles