Азбука микроэлектроники. Урок 2. Кнопка. Button KosachenkoSV's blog / 24.08.2015 Предыдущие посты:Азбука микроэлектроники. ВведениеАзбука микроэлектроники. Урок 1. Светодиоды. Blink. СветофорПримечания к предыдущему Занятию №1:1. Можно "подарить" ребятам схему светофора, но готовую программу они должны сделать самостоятельно. Важно, чтобы ребята научились читать чужую программу, ориентироваться в ней по комментариям. На первом занятии у них огромная мотивация, вызванная новизной, ее вполне хватает, чтобы преодолеть эту трудность и при этом приобрести важный навык, который им многократно пригодиться в будущем. Конечно, они еще не знакомы с синтаксисом Си и командами, поэтому важно помочь, но не сразу, а после нескольких попыток.2. Обычно на первом занятии я объясняю обучающимся как работать с мультиметром. Как им измерять номиналы резисторов (сопротивление). Нам поставщик наборов, у которого мы закупали радиодетали, "помог" стимулировать работу ребят с мультиметром: все резисторы в наборах оказались одной цветовой маркировки не зависимо от номинала, поэтому единственная возможность выбрать нужный резистор - замерить его сопротивление. Очень благодарен поставщику за такую возможность! И не забывайте напоминать, чтобы ребята по окончанию занятий мультиметры выключали, иначе в них разрядятся батарейки и на следующем занятии мультиметр будет нерабочим.Занятие №2 Кнопка. Button В котором мы подключаем кнопку.Что хотимНа монтажной плате диод и кнопка. Нажимаем кнопку – диод горит, отпускаем – не горит, нажимаем – горит, отпускаем – опять не горит. Замечательно не горит.Что потребуется Ардуино Монтажная плата Резистор 220 Ом Резистор 10 кОм Светодиод Тактовая кнопка Проводники Среда программирования Arduino IDE Этапы работы Разбираемся Собираем схему Пишем программу Подсоединяем плату к компьютеру и прошиваем Наслаждаемся Экспериментируем РазбираемсяНа прошлом занятии с помощью команды digitalWrite (13,HIGH); мы подавали логическую единицу (+5В) на тринадцатый порт (13 Pin) платы. На самом деле, таких цифровых выходов на классических Arduino 14 штук.Замечательным свойством этих выходов является то, что они могут быть еще и входами. То есть микроконтроллер может узнать, какое логическое значение подается на эти разъемы: 0 (LOW) или 1 (HIGH). С технической точки зрения логическому 0 соответствует напряжение из диапазона от 0 до 2 В, а логической единице – от 3 до 5В.Для того, чтобы некоторый порт работал на чтение информации (на вход), в разделе программы setup нужно соответствующим образом настроить его режим (Mode). Допустим, читать информацию будем со 2-ого Pin'а. Тогда:Для чтения информации со 2-ого входа в программе будем использовать функцию digitalRead(). Её значение нужно запомнить в переменной. Назовём эту переменную Pin2. Оператор в программе запишется так:Pin2 = digitalRead(2);Что же будет читать программа? Какое значение записывается в Pin2? Точно ответить на данный вопрос невозможно. Но... Для того, чтобы на входе платы гарантировано считался «логический 0», нужно, чтобы на этот вход поступало 0 Вольт (на самом деле, достаточно напряжения ниже 2 Вольт). Для этого этот вход надо «стянуть» через достаточно большое сопротивление (порядка 10кОм) на GND (ground – земля, «0 Вольт») платы: Но если на вход Pin2 будет подаваться +5 Вольт, то программа считает «логическую 1». Таким образом программа считывает БИТ информации! Из Информатики вы уже знаете, что такое «бит». «Бит (англ. binary digit — двоичное число; также игра слов: англ. bit — кусочек, частица) — единица измерения количества информации, равная одному разряду в двоичной системе счисления.» Единицу на вход Pin2 будем подавать через кнопку:Сопротивление должно быть высокоомным по двум причинам:1. При замыкании кнопки не произойдёт КОРОТКОЕ ЗАМЫКАНИЕ, плата не сгорит.2. Ток не уйдёт в землю, а пойдёт туда, куда нам надо – на вход платы.Стягивающие и подтягивающие резисторы (из Wiki Амперки)Стягивающие (pull-down) и подтягивающие (pull-up) резисторы используются в схемах рядом со входными контактами логических компонентов, которым важен только факт: подаётся ноль вольт (логический ноль) или не ноль (логическая единица). Примером являются цифровые входы Ардуино. Резисторы нужны, чтобы не оставить вход в «подвешенном» состоянии (при котором он будет считывать что-попало из-за электромагнитных наводок). Возьмём такую схему Мы хотим, чтобы когда кнопка не нажата (цепь разомкнута), вход фиксировал отсутствие напряжения. Но в данном случае вход находится в «никаком» состоянии. Он может срабатывать и не срабатывать хаотично, непредсказуемым образом. Причина тому — шумы, образующиеся вокруг: провода действуют как маленькие антенны и производят электричество из электромагнитных волн среды. Чтобы гарантировать отсутствие напряжения при разомкнутой цепи, рядом с входом ставится стягивающий резистор: Теперь нежелательный ток будет уходить через резистор в землю. Для стягивания используются резисторы больших сопротивлений (10 кОм и более). В моменты, когда цепь замкнута, большое сопротивление резистора не даёт большей части тока идти в землю: сигнал пойдёт к входному контакту. Если бы сопротивление резистора было мало (единицы Ом), при замкнутой цепи произошло бы короткое замыкание (из-за чего Arduino может сгореть). Аналогично, подтягивающий резистор удерживает вход в состоянии логической единицы, пока внешняя цепь разомкнута: То же самое: используются резисторы больших номиналов (10 КОм и более), чтобы минимизировать потери энергии при замкнутой цепи и предотвратить короткое замыкание при разомкнутой. Собираем схему: Пишем программуДиод должен гореть только если кнопка нажата, т.е. сигнал на Pin2 имеет значение HIGH. Пишется это так:Переменные надо описывать. В самом начале напишем строкуint Pin2 = 0;Тем самым мы создадим целочисленную переменную с именем Pin2 и присвоим ей значение 0.Программа полностью:Подключаем, прошиваем, радуемсяЭкспериментируем1. Где можно применить созданный прибор? 2. Попробуйте сделать нормальным состоянием для светодиода – включено. При нажатии на кнопку светодиод должен гаснуть. 3. Можно реализовать такую схему: бегущий огонёк из 3-4 светодиодов бежит в одну сторону. При нажатии на кнопку огоньки бегут в другую сторону. Схему для подключения светодиодов можно посмотреть на прошлом занятии. 4. Подумайте, как подключить вторую кнопку. Для разработки схемы Вам может помочь программа FRITZING http://fritzing.org/. Если у Вас серьезные намерения на освоение основ микроэлектроники вообще и Arduino в частности, то обязательно скачайте и установите эту программу. Схемы, которые вы видите на занятиях, делаются именно в этой программе. 5. А не реализовать ли Вам такой проект: несколько светодиодов в свободном состоянии выключены. При нажатии на правую кнопку огонёк светодиодов бежит вправо, на левую – влево. Замечательный указатель поворота, который можно укрепить на велосипеде. Еще можно добавить третью кнопку – это будет стоп-сигнал – все диоды зажигаются одновременно. А еще четвертую – мигающий сигнал всех диодов – осторожно, велосипедист! А еще… (тут Остап понял, что его понесло… ) Заметки для учителя.1. В этом уроке применена маленькая защита от бездумного копи-паста. В тексте полной программы специально внесены ошибки в 3-й и 4-й строках:PinMode(13,OUT);PinMode (2,INPUT);Дело в том, что данная команда пишется с маленькой буквы (pinMode) и режим не OUT, а OUTPUT. Обучающиеся, скопировав эту программу и вставив ее в окно Arduino IDE, при попытке загрузить скетч в Arduino вдруг увидят, что «что-то идет не так». Важно в этот момент обратить их внимание на вывод сообщений об ошибках, выводимую информацию о том, в какой строке обнаружена ошибка, и собственно о самой ошибке. И советовать в будущем не терять бдительность: в чужих программах могут встречаться ошибки, поэтому их нужно проверять!2. Кнопка — это простейший датчик. Важно донести, что по отношению к контроллеру есть устройства вывода OUTPUT (например, светодиод) и есть устройства ввода INPUT (например, кнопка). Если ребята уже были знакомы с робототехническим набором LEGO Mindstorms, то можно рассказать им, что в датчике касания этой фирмы реализована точно такая же схема подключения кнопки через стягивающий резистор. Предложите им поискать в сети Интернет стоимость такого датчика, например по запросу «lego датчик касания 9843 купить», а потом предложите поискать стоимость резистора и кнопки, которые были использованы в данном проекте. Положительные эмоции ребятам и вам будут гарантированы. Lego arduino freeduino ТФТЛ микроэлектроника