Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp3 [2020/05/13 12:21] – [Схема эксперимента] labuser29products:laboratory_iot:exp3 [2024/11/12 16:31] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
-===== Эксперимент 3. Кнопка и подтягивающий резистор =====+===== Эксперимент 3. Железнодорожный переезд =====
  
-Познакомимся с кнопкой— важным электронным компонентом. Кнопка нужна везде, где требуется взаимодействие электроники с человеком. Для начала, рассмотрим, как устроена кнопка. Как можно догадаться, внутри корпуса кнопки находится пара металлических контактов. Когда кнопка находится в нормальном состоянии, ее контакты разомкнуты, а при нажатии— замыкаются. +В этом эксперименте разберемся с полярностью светодиодов и способами их подключения. Целью эксперимента является создание конструкции с двумя светодиодамимигающими по очереди, как лампы в железнодорожном переезде.
-{{ :products:esp-iot:exp3.1.png?nolink |}} +
-//Рисунок 1. Внешний вид тактовых кнопок и обозначение на электрических схемах//+
  
-==== Подключение кнопки ==== +==== Подключение светодиодов ==== 
-Как мы [[theory:logic_1_0|узнали ранее]]микроконтроллер оперирует с понятиями //логического нуля// и //логической единицы//, но как получить их с помощью кнопки? Логично подключить кнопку между выводом микроконтроллера и напряжением питания. Когда кнопка нажимаетсянапряжение питания подается на ножку, что является //логической единицей//. Такая схема изображена на рисунке 2.+Как мы уже разобрались ранее, светодиод— полярный элемент. У него есть //анод// и //катод//. Чтобы светодиод светился, его нужно подключить в прямом направлении— анод к плюсу питания, катод— к минусу. Если подключить наоборот, светодиод светиться не будет, хотя и не испортится. Просто светодиод в первую очередь //диод//— полупроводниковый электронный компонент, пропускающий электрический ток только в одном направлении.
  
-{{ :products:esp-iot:exp3.2.png?nolink |}} +{{ :products:esp-iot:led.png?nolink&600 |}} 
-//Рисунок 2Неправильная схема подключения кнопки//+//Рисунок 1Светодиод. Внешний вид и обозначение на электрических принципиальных схемах//
  
-Почему же эта схема неправильная? Дело в том, что когда кнопка нажата, на ножку микроконтроллера, действительно, подается напряжение питаниячто является уровнем логической единицыоднако, когда кнопка не нажата, то на ножку не подается ничего. Говорят, что она "висит в водздухе"— то есть никуда не подключена. Такое состояние не является состоянием логического нуля. Состояние такого вывода может самопроизвольно меняться, например из-за статического электричества, или даже радиоволны. Чтобы получить состояние логического нуля, нужно подключить ножку к //земле//. Так называют минус питания, "общийпровод, относительно которого и отсчитывается напряжение во всей схеме+В прошлом эксперименте мы подключали один светодиод к одной ножке микроконтроллера. Если нам нужно 2 светодиода, то можно было бы подключить каждый к своей ножке и управлять ими независимо. Но мы подключим оба светодиода к одной ножке. Как же в таком случае зажигать их поочереди? Воспользуемся свойством полярности светодиодов. Просто подключим их разной полярностью.
  
-Но как подключить кнопку, чтобы в одном состоянии она соединяла ножку с питанием, а в другом— с землей, ведь у нее только один контакт, который лизо замкнут, либо разомнкут? В таком случае используют резистор, с помощью которого ножку микроконтроллера //подтягивают// к противоположному уровню.+==== Схема эксперимента ====
  
-{{ :products:esp-iot:exp3.3.png?nolink |}} +{{ :products:esp-iot:exp3.1.1.png?nolink&400 |}} 
-//Рисунок 3Правильные схемы подключения кнопки//+//Рисунок 2Электрическая принципиальная схема эксперимента//
  
-На рисунке изображено два варианта правильного подключения кнопки. +Давайте разберемся как работает эта схема. Светодиод VD2 подключен точно так же, как в прошлом эксперименте, но появился второй светодиод— VD1. Его катод подключен к выводу микроконтроллера, а анод к питанию
  
-Вариант А: Когда кнопка не нажата, ножка микроконтроллера подключена к земле через резистор, что является состоянием логического нуля. Сопротивление подтягивающего резистора выбирают достаточно большим, чтобы уменьшить протекающий через него ток, например, 10 килоом. Когда кнопка нажата, вывод микроконтроллера подключается к плюсу питания, что является логической единицей. Хотя, в это же время, соединение с землей через резистор также сохраняется, но ток, протекающий через него, слишком мал, чтобы "соперничать" с прямым подключением  к питаниюпоэтому он не может помешать установлению логической единицы на ножке микроконтроллера.+Когда на выводе микроконтроллера логическая единица (высокий уровень напряжения, равный напряжению питания), светодиод VD2 включен в прямом направлении. На его аноде +3.3 вольта (напряжение питания от контроллера), а на катоде 0 вольт (так как он подключен к //земле//. Так называют минус питания, «общий» провод, относительно которого и отсчитывается напряжение во всей схеме.) Поэтому через светодиод протекает ток и VD2 светится. В это же время светодиод VD1 не светится. Так как его катод подключен к ножке микроконтроллера, где напряжение +3.3 В, а его анод— к напряжению питания, также + 3.3 В. На обоих выводах светодиода VD1 получается одинаковое напряжение и тока не возникает.
  
-Вариант Б: Когда кнопка не нажата, ножка микроконтроллера подключена к питанию через резистор, что является состоянием логической единицы. А когда нажата— к земле, что является логическим нулем.+Когда на выводе микроконтроллер логический 0 (0 вольт), светодиод VD1 оказывается включенным в прямом направлении и светится. На его катоде, подключенном к ножке МК, 0 вольт, а на аноде + 3.3 в. А светодиод VD2 не светится так как теперь на обоих его контактах 0 вольт.
  
-Теперь мы знаем как правильно подключать кнопку, а из предыдущего эксперимента возьмем схему подключения светодиода. Объединим это в одну схему+Соберем эту схему как показано на Рисунке 3.
  
-==== Схема эксперимента ==== +{{ :products:esp-iot:exp3_1.png?direct&400 |}} 
- +//Рисунок 3. Монтажная схема эксперимента//
-{{ :products:esp-iot:exp3.4.png?direct |}} +
-//Рисунок 4. Электрическая принципиальная схема эксперимента №3// +
- +
-На рисунке изображен токоограничительный резистор последовательно со светодиодом. При сборке схемы мы не будем устанавливать его сами так как он уже установлен на плате конструктора. +
- +
-Соберем эту схему: +
-{{ :products:esp-iot:exp3.png?direct&600 |}} +
-//Рисунок 5. Монтажная схема эксперимента №3//+
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-Теперь напишем программный код. Пусть, когда кнопка не нажата, светодиод не горит. А при нажатии кнопки— горит. 
  
 <file python Exp3.py[enable_line_numbers="2", start_line_numbers_at="1"]> <file python Exp3.py[enable_line_numbers="2", start_line_numbers_at="1"]>
 from machine import Pin from machine import Pin
 +import time
 _init() _init()
- +  
-ButtonPin = 16 +LedPin = 16 
-LedPin = 0 +  
- +led = Pin(LedPin, Pin.OUT) 
-Button = Pin(ButtonPin, Pin.IN) + 
-Led = Pin(LedPin, Pin.OUT) +
 while True: while True:
-    button_value = Button.value() +    led.off() 
-    if button_value == 1: +    time.sleep(1) 
-        Led.on() +    led.on() 
-    else: +    time.sleep(1)
-        Led.off()+
 </file> </file>
  
-Как и в прошлом эксперименте, сначала подключаем необходимые библиотеки, а именно ''Pin'' из системной библиотеки ''machine''. Вызываем функцию инициализации платы. +Никаких отличий от программы из прошлого эксперимента нет. Два светодиода мигают поочереди только благодаря схемотехнике.
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="4"]> +
-ButtonPin = 16 +
-LedPin = 0 +
-</code> +
- +
-Создаем переменные, в которые записываем номера выводов микроконтроллера для подключения кнопки и светодиода. Кнопку подключаем к 16 выводу, светодиод к 0. +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="4"]> +
-Button = Pin(ButtonPin, Pin.IN) +
-Led = Pin(LedPin, Pin.OUT) +
-</code> +
- +
-Создаем объекты выводов микроконтроллера и настраиваем их. Ножку для кнопки настраиваем как вход (''Pin.IN''), а для светодиода— как выход (''Pin.OUT''). Теперь можно работать с этими выводами. +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="10"]> +
-while True: +
-</code> +
- +
-Начинаем бесконечный цикл +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="11"]> +
-    button_value = Button.value() +
-    if button_value == 1: +
-        Led.on() +
-    else: +
-        Led.off() +
-</code> +
-Тело цикла. Этот код повторяется бесконечное количество раз, пока программа не будет прервана пользователем с помощью кнопки {{ :products:2020-05-04_12-35-46.png?nolink |}} +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="12"]> +
-    button_value = Button.value() +
-</code> +
-Сначала мы считываем состояние вывода, к которому подключена кнопка, с помощью вызова функции ''Button.value()'' и записываем это состояние в переменную ''button_value''. Если кнопка нажата, то (в соответствии со схемой на рисунке 4) на выводе микроконтроллера состояние логической единицы, значит в переменную ''button_value'' запишется ''1''. А если кнопка не нажата, на ножке логический ноль, в переменную запишется 0.  +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="12"]> +
-    if button_value == 1: +
-</code> +
- +
-Здесь мы впервые сталкиваемся с //условным оператором//. Оператор if проверяет выполнение условия и исполняет код в зависимости от того выполнено условие или нет. Если условие выполняется, то выполняется код в блоке прямо под ним. Если условие ложно, то исполняется код в блоке ''else''+
- +
-В нашем случае условием является ''button_value == 1''. Символ двойного равенства ''=='' это оператор сравнения. Он сравнивает значение выражения слева от себя со значением выражения справа от себя. Если эти значения равны, то равенство выполняется, иначе— нет.  +
- +
-<WRAP center round important 60%> +
-Ранее мы уже сталкивались с оператором присвоения = . Этот оператор предназначен для присвоения значения переменной. Например  +
-<code python> +
-    a = 2 +
-</code> +
-присваивает значение 2 переменной ''a''. Теперь же мы использовали оператор сравнения == Он сравнивает два значения. По виду они похожи, но это совершенно разные операторы и путать их нельзя. +
-</WRAP> +
- +
-Итак, в строке 12 с помощью оператора ''if'' мы проверяем выполнение условия равенства переменной button_value цифре 1. По сути это проверка нажата ли кнопка. Если да, если условие выполняется, то выполняется код +
-<code python[enable_line_numbers="2", start_line_numbers_at="13"]> +
-        Led.on() +
-</code> +
-который зажигает светодиод. А если условие не верно, а значит кнопка не нажата, то выполняется код в блоке ''else'' +
-<code python[enable_line_numbers="2", start_line_numbers_at="15"]> +
-        Led.off() +
-</code> +
-который гасит светодиод. +
- +
-Теперь, когда мы разобрали каждую строку программы, взглянем опять на алгоритм целиком: программа постоянно, бесконечное количество раз, проверяет нажата ли кнопка. Если кнопка нажата, то на светодиод зажигается, если же кнопка не нажата то светодиод выключается. +
- +
-==== Дополнительное задание ==== +
-<WRAP center round tip 60%> +
-1. Как изменить программу, чтобы наоборот, когда кнопка не нажата— светодиод светился, а если нажата— гас? +
- +
-2. Как изменить электрическую схему, чтобы добиться такого же результата, но без изменения программы? +
-</WRAP> +
- +