11 апр 2022 · 15:33    
{"document":[{"text":[{"type":"string","attributes":{"bold":true},"string":"Как сделать акустический выключатель для дома на Arduino Uno."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"Помните как в детстве на новогоднем утреннике нас собирали вокруг елки и просили хлопать в ладоши и кричать: \"Елочка, гори!\"? И когда все уже давно устали кричать и хлопать в ладоши, происходило чудо. Елочка вдруг вспыхивала яркими огнями!"},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"attachment","attributes":{"presentation":"gallery"},"attachment":{"caption":"","contentType":"image/png","filename":"Паблико1 (5).png","filesize":3695725,"height":1080,"pic_id":37678,"url":"/files/article_image/2022/04/11/%D0%9F%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE1_5.jpeg","width":1920}},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"Конечно, тогда мы не догадывались что этим чудом управляет местный электрик, который по сигналу ведущего втыкает вилку в розетку. :) Но можно ли на самом деле сделать такое чудо? Например, заходишь в темную комнату, хлоп в ладоши и свет зажегся!"},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{"bold":true},"string":"Да, можно! В "},{"type":"string","attributes":{"bold":true,"href":"https://ali.ski/b3YkK"},"string":"стартовый набор Arduino Uno"},{"type":"string","attributes":{"bold":true},"string":" входит небольшая плата (шилд) с акустическим датчиком. На плате расположен микрофон и микросхема - интегральный компаратор LM393. Ну и немного \"рассыпухи\"."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"Микросхема не только усиливает сигнал с микрофона, но и формирует цифровой сигнал при резком изменении уровня звука, например при хлопке, ударе, выстреле и т.д. Следовательно, у него есть два выхода: аналоговый и цифровой.\n"},{"type":"attachment","attributes":{"caption":"Акустический датчик","presentation":"gallery"},"attachment":{"caption":"","contentType":"image/png","filename":"Паблико1 (6).png","filesize":2479047,"height":1080,"pic_id":37679,"url":"/files/article_image/2022/04/11/%D0%9F%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE1_6.jpeg","width":1920}},{"type":"string","attributes":{},"string":"\n\nАналоговый можно использовать для записи разговоров в охраняемом помещении, в качестве диктофона и т.д. Но дя наших целей мы будем использовать цифровой выход. Подключим его к порту \"3\" Arduino Uno."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"К портам 4-6 подключим как обычно разноцветный светодиоды: красный, желтый, синий. Их будем зажигать поочередно при каждом хлопке. Но как определить момент хлопка? Можно как обычно в функции loop() проверять изменилось ли состояние выхода GP3."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"attachment","attributes":{"presentation":"gallery"},"attachment":{"caption":"","contentType":"image/png","filename":"Паблико1 (7).png","filesize":2860575,"height":1080,"pic_id":37682,"url":"/files/article_image/2022/04/11/%D0%9F%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE1_7_aRlQ1XT.jpeg","width":1920}},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"А если нам помимо этого нужно выполнять и другую полезную работу? Считывать состояние датчиков освещения, состояние дверей и т.д. и т.п. Тогда время реакции на хлопок будет слишком большим и момент хлопка можно пропустить. Поэтому будем использовать другую технологию - прерывания."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"При прерывании выполнение основной программы - функции "},{"type":"string","attributes":{"bold":true},"string":"loop()"},{"type":"string","attributes":{},"string":" прерывается и начинает выполняться специальная функция - обработчик прерывания. Имя этой функции задается в функции "},{"type":"string","attributes":{"bold":true},"string":"attachInterrupt(1,Click, RISING)"},{"type":"string","attributes":{},"string":". Где первый параметр задает номер прерывания, второй это имя обработчика прерывания а третий - режим или условие при котором оно происходит.\n"},{"type":"attachment","attributes":{"caption":"Схема","presentation":"gallery"},"attachment":{"caption":"","contentType":"image/png","filename":"Паблико1 (8).png","filesize":920877,"height":1080,"pic_id":37683,"url":"/files/article_image/2022/04/11/%D0%9F%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE1_8.jpeg","width":1920}},{"type":"string","attributes":{},"string":"\nВ функции "},{"type":"string","attributes":{"bold":true},"string":"Click()"},{"type":"string","attributes":{},"string":" - обработчике прерывания мы будем просто изменять значение переменной Mode, которая будет определять какой светодиод будет гореть. А при Mode = 0 мы выключим все светодиоды."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"В основной функции "},{"type":"string","attributes":{"bold":true},"string":"loop()"},{"type":"string","attributes":{},"string":" мы будем определять значение переменной Mode с помощью конструкции "},{"type":"string","attributes":{"bold":true},"string":"switch case"},{"type":"string","attributes":{},"string":" и зажигать нужный светодиод. Вот и вся программа. надеюсь теперь всем понятно.\n"},{"type":"attachment","attributes":{"caption":"Скетч","presentation":"gallery"},"attachment":{"caption":"","contentType":"image/png","filename":"Паблико1 (9).png","filesize":726183,"height":1080,"pic_id":37685,"url":"/files/article_image/2022/04/11/%D0%9F%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA%D0%BE1_9.jpeg","width":1920}},{"type":"string","attributes":{},"string":"\n\nТолько хочу указать на ошибку в соответствующем скетче на сайтах, посвященных программированию Arduino. Почему то все функцию - обработчик прерывания помещают в конце, после функции"},{"type":"string","attributes":{"bold":true},"string":" loop()"},{"type":"string","attributes":{},"string":", а применяют перед ее объявлением в функции "},{"type":"string","attributes":{"bold":true},"string":"setup()"},{"type":"string","attributes":{},"string":"."},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{},"string":"Но в Си функция должна быть описана ДО ее вызова! Компилятор выдает ошибку! Поэтому функция"},{"type":"string","attributes":{"bold":true},"string":" Click()"},{"type":"string","attributes":{},"string":" в нашем скетче описана сразу за объявлением переменных и перед функцией "},{"type":"string","attributes":{"bold":true},"string":"setup()"},{"type":"string","attributes":{},"string":", где упоминается обработчик прерывания. Это правильный код!"},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":["quote"]},{"text":[{"type":"string","attributes":{"bold":true},"string":"А если вам понравилась статья, смело ставьте ЛАЙК!"},{"type":"string","attributes":{"blockBreak":true,"bold":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{"bold":true},"string":"Попробуйте собрать такую конструкцию и поделитесь своим мнением в комментариях!"},{"type":"string","attributes":{"blockBreak":true,"bold":true},"string":"\n"}],"attributes":[]},{"text":[{"type":"string","attributes":{"bold":true,"href":"https://pabliko.ru/@shulp/"},"string":"Подписывайтесь на канал!"},{"type":"string","attributes":{"blockBreak":true},"string":"\n"}],"attributes":[]}],"selectedRange":[2801,2801]}
Комментарии 0