В прошлой статье мы программировали «бегущий огонёк» на разноцветных диодах, средствами платы Arduino UNO. Сейчас мы немного расширим навыки и в схему из нескольких светодиодов добавим кнопку.
Мы нашли вот такую замечательную платочку, извлечённую из какого-то старого прибора. На ней есть как раз то, что нам нужно — это три разноцветных диода и кнопка.
Схема очень простая — от каждого диода и от кнопки отходят по два провода. Получается всего 8 проводов, выведенных в единый шлейф.
Я обрезала шлейф и зачистила все 8 контактов. Затем припаяла разноцветные провода: 2 красных от красного диода, 2 желтых, 2 зелёных, а от кнопки белый и серый, чтобы было нагляднее.
Затем, мы напечатали на 3D принтере элемент, для крепления платы Arduino и платы с диодами.
Он представляет собой пластину, с несколькими выступающими пазиками как раз в тех местах, где нужно прикручивать платы. Для прикручивания использовали саморезы.
Далее нужно собрать схему.
У нас три диода. Каждый из анодов через резистор 220 Ом подключён к одному из цифровых контактов Arduino. К нас это 2, 3, 4.
Катоды выходят на общую шину заземления. Шина соединяется с контактом Ардуино GND (земля).
От кнопки провод анод подключен к контакту Arduino 5V. К катоду подключается провод, опрашивающий состояние на выходе кнопки, затем, мы присоединяем его к цифровому контакту Arduino (у нас 12). Далее катод через резистор на 10КОм подключается к шине заземления.
Для чего нужен резистор 10КОм? Когда кнопка включена, то на провод, опрашивающий её состояние приходит 5V и мы регистрируем включение. Когда выключена, то 5V не приходит, однако на опрашивающий провод могут повлиять различные помехи и излучения на близлежащих выводах. Под их влиянием провод может подать сигнал о наличии напряжения. Чтобы этого не происходило мы добавляем стягивающий резистор, который забирает на себя мешающее напряжение и переводит его в тепло. Провод в этом случае не регистрирует напряжение и подаёт сигнал о выключении кнопки.
Эту схему можно собрать на базе макетной платы, как делалось в предыдущей статье. Но мы решили, для удобства и компактности спаять несколько переходников для соединения между собой элементов нашей схемы.
Прежде всего нам нужно, чтобы к проводам легко подсоединялись и отсоединялись резисторы. Берём такие контактные разъёмы с проводами и кассету с металлическими штырьками.
К одному концу резистора припаиваем металлический штырёк, к другому разъём. Всё это закрываем термоусадкой. Получаем вот такие элементы.
К ним легко присоединяются провода, для включения резисторов в цепь.
Еще нам нужен элемент с двумя контактами-разъёмами на входе и одним проводом на выходе.
В него будут втыкаться катод от кнопки, и провод, регистрирующий состояние кнопки. Другой конец подключается к земле.
И, наконец, по такому же типу сделанная шина заземления. Только входных контактов не два, а несколько.
Всё, наша схема готова, теперь можно писать программы и загружать их в Arduino.
Запускаем среду разработки программ под Arduino. В прошлой статье мы писали как устанавливается эта программа.
Далее создаём новый scetch.
Мы предлагаем Вашему вниманию три разные программы, написанные для нашей схемы, и задающие поведение диодов в ответ на нажатие кнопки.
Программа 1. При нажатии на кнопку зажигается следующий диод, а предыдущий — гаснет.
/*Программа для трёх светодиодов и одной кнопки. При нажатии на кнопку зажигается следующий диод, а предыдущий — гаснет.*/ //массив, содержащий номера контактов int LEDS[3] = {2, 3, 4}; // размер массива LEDS int sizeof_LEDS = 3; //индекс элемента из массива LEDS, который сейчас включён int current_led_index = 0; /* целочисленная константа с номером контакта от кнопки, этот контакт будет опрашивать состояние кнопки*/ const int BUTTON = 12; /* переменная, хранящяя состояние кнопки, может принимать только значения true или false */ bool but_state = false; // инициализация всех переменных // функция, в которой циклически повторяются заданные нами действия /*Cравниваем с предыдущим состоянием кнопки. Если раньше кнопка была отжата, а теперь нажата, то меняем значение переменной на true для того, /*задержка в 5 милисекунд нужна, чтобы избежать реакции кнопки на дребезг контактов*/ /* функция осуществляет проверку выходит ли передаваемый параметр (индекс элемента массива LEDS) за пределы размера массива*/ |
Программа 2. Диоды попеременно загораются слева-направо. При нажатии на кнопку меняют направление справа-налево, и наоборот.
/*Программа для трёх диодов и одной кнопки. Диоды попеременно загораются слева-направо. При нажатии на кнопку меняют направление справа-налево, и наоборот.*/ //массив, содержащий номера контактов int LEDS[3] = {2, 3, 4}; // размер массива LEDS int sizeof_LEDS = 3; //индекс элемента из массива LEDS, который сейчас включён int current_led_index = 0; /* целочисленная константа с номером контакта от кнопки, этот контакт будет опрашивать состояние кнопки*/ const int BUTTON = 12; /* переменная, хранящяя состояние кнопки, может принимать только значения true или false */ bool but_state = false; //временной интервал, через который опрашивается состояние кнопки int check_but_state_delay = 5; //временной интервал, через который меняется состояние диодов int change_diode_state_delay = 500; //направление мигания диодов: 1 - слева-направо, -1 - справа-налево int direct_light = 1; // инициализация всех переменных // включаем первый диод // для контакта кнопки задаём значение: входной контакт //функция, в которой циклически повторяются заданные нами действия /*цикл, в котором вызывается функция проверки состояния кнопки через через заданный вначале временной интервал - check_but_state_delay. По прошествии заданой задержки change_diode_state_delay мы выскакиваем из цикла, чтобы переключить диоды*/ //выключаем текущий диод /*в функции check_contact_param проверяем выходит ли следующий индекс за пределы размера массива*/ //включаем следующий диод /*Функция, проверяющая изменилось ли состояние кнопки*/ /*сравниваем с предыдущим состоянием кнопки. Если раньше кнопка была отжата, а теперь нажата, то меняем значение переменной на true для того, чтобы программа среагировала только на факт нажатия*/ //меняем направление мигания диодов на противоположное /* функция осуществляет проверку выходит ли передаваемый параметр (индекс элемента массива LEDS) за пределы размера массива*/ |
Программа 3. Сколько раз нажимаем на кнопку, столько диодов и загорается.
/*Программа для трёх диодов и одной кнопки. Сколько раз нажимаем на кнопку, столько диодов и загорается.*/ //массив, содержащий номера контактов int LEDS[3] = {2, 3, 4}; // размер массива LEDS int sizeof_LEDS = 3; //индекс элемента из массива LEDS, который сейчас включён int current_led_index = 0; /* целочисленная константа с номером контакта от кнопки, этот контакт будет опрашивать состояние кнопки*/ const int BUTTON = 12; /* переменная, хранящяя состояние кнопки, может принимать только значения true или false */ bool but_state = false; //временной интервал, через который опрашивается состояние кнопки int check_but_state_delay = 5; //временной интервал, через который меняется состояние диодов int change_diode_state_delay = 2000; // инициализация всех переменных // для контакта кнопки задаём значение: входной контакт //функция, в которой циклически повторяются заданные нами действия /*проходимся по массиву диодов и включаем столько, сколько раз нажималась кнопка*/ /*Функция, проверяющая изменилось ли состояние кнопки - если фиксируется нажатие, то возвращает 1, если нет, то возвращает 0*/ /*сравниваем с предыдущим состоянием кнопки. Если раньше кнопка была отжата, а теперь нажата, то меняем значение переменной на true для того, чтобы программа среагировала только на факт нажатия*/ |
Скачать stl файл пластины для соединения двух плат и проект в blrnder3D можно по ссылке ниже: