Цифровые контакты ардуино

ВВОД-ВЫВОД на Arduino

Рассмотрены различные режимы работы выводов платы Arduino и функции языка C++ для работы с этими выводами (пинами)

ВВОД-ВЫВОД

pinMode(pin, mode); — установка вывода pin на вход (INPUT) либо выход (OUTPUT)

По умолчанию цифровые выводы в Arduino предустановлены на вход, так что их нет нужды явно объявлять как INPUT с помощью pinMode().

Выводы, сконфигурированные как INPUT, подразумеваются в состоянии с высоким импедансом (сопротивлением).

Если на порт ввода не поступает сигнал, то рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к питанию +5 В, либо к земле.

Микроконтроллер ATmega имеет программируемые встроенные подтягивающие резисторы 20 кОм. Программирование данных резисторов осуществляется так:

Выводы, сконфигурированные как порты вывода находятся в низкоимпедансном состоянии. Данные выводы могут пропускать через себя достаточно большой ток. Выводы микросхемы ATmega могут быть источником тока до 40 мА.

digitalRead(pin) — Считывает значение заданного цифрового вывода (pin) и возвращает результат HIGH (=1) или LOW (=0). Вывод должен быть задан либо как переменная, либо как константа (0-13).

digitalWrite(pin, value); — задает либо логический уровень HIGH, либо LOW (включает или выключает) на заданном цифровом выводе pin.

Аналоговые входы

analogRead(pin) — cчитывает значение из заданного аналогового входа (pin) с 10-битовым разрешением. Эта функция работает только на аналоговых портах (0-5). Результирующее целое значение находится в диапазоне от 0 до 1023.

Аналоговые выводы не похожи на цифровые, и нет необходимости предварительно объявлять их как INPUT или OUTPUT (если только вы не планируете использовать их в качестве цифровых портов 14-18).

analogWrite(pin, value) , где value=0-255, — записывает псевдо-аналоговое значение, используя схему с широтно-импульсной модуляцией (ШИМ, PWM), на выходной вывод, помеченный как PWM. На новом модуле Arduino с ATmega168 (328), эта функция работает на выводах 3.

Аналоговые пины как цифровые

Аналоговые входы (номера от 14 до 19) также могут использоваться как цифровые выводы портов ввода/вывода:

Выводы аналоговые входов имеют подтягивающие резисторы работающие как на цифровых выводах. Включение резисторов производится командой

digitalWrite(14, HIGH); // включить резистор на выводе аналогового входа 0

пока вывод работает как порт ввода.

После работы аналогового входа в цифровом режиме может потребоваться настроить паузу между чтением функцией analogRead() других входов.

Питание Arduino:

1) VIN. Вход используется для подачи питания от внешнего источника (в отсутствие 5 В от разъема USB или другого регулируемого источника питания). Подача напряжения питания происходит через данный вывод.

Входное напряжение (рекомендуемое): 7-12 В.

Входное напряжение (предельное): 6-20 В.

2) 5V. Регулируемый источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от вывода VIN через регулятор напряжения, или от разъема USB, или другого регулируемого источника напряжения 5 В.

Источник

Digital Pins

The pins on the Arduino can be configured as either inputs or outputs. This document explains the functioning of the pins in those modes. While the title of this document refers to digital pins, it is important to note that vast majority of Arduino (Atmega) analog pins, may be configured, and used, in exactly the same manner as digital pins.

Properties of Pins Configured as INPUT

Arduino (Atmega) pins default to inputs, so they don’t need to be explicitly declared as inputs with pinMode() when you’re using them as inputs. Pins configured this way are said to be in a high-impedance state. Input pins make extremely small demands on the circuit that they are sampling, equivalent to a series resistor of 100 megohm in front of the pin. This means that it takes very little current to move the input pin from one state to another, and can make the pins useful for such tasks as implementing a capacitive touch sensor, reading an LED as a photodiode, or reading an analog sensor with a scheme such as RCTime.

This also means however, that pins configured as pinMode(pin, INPUT) with nothing connected to them, or with wires connected to them that are not connected to other circuits, will report seemingly random changes in pin state, picking up electrical noise from the environment, or capacitively coupling the state of a nearby pin.

Pullup Resistors with pins configured as INPUT

Often it is useful to steer an input pin to a known state if no input is present. This can be done by adding a pullup resistor (to +5V), or a pulldown resistor (resistor to ground) on the input. A 10K resistor is a good value for a pullup or pulldown resistor.

Properties of Pins Configured as INPUT_PULLUP

There are 20K pullup resistors built into the Atmega chip that can be accessed from software. These built-in pullup resistors are accessed by setting the pinMode() as INPUT_PULLUP. This effectively inverts the behavior of the INPUT mode, where HIGH means the sensor is off, and LOW means the sensor is on.

The value of this pullup depends on the microcontroller used. On most AVR-based boards, the value is guaranteed to be between 20kО© and 50kО©. On the Arduino Due, it is between 50kО© and 150kО©. For the exact value, consult the datasheet of the microcontroller on your board.

When connecting a sensor to a pin configured with INPUT_PULLUP, the other end should be connected to ground. In the case of a simple switch, this causes the pin to read HIGH when the switch is open, and LOW when the switch is pressed.

The pullup resistors provide enough current to dimly light an LED connected to a pin that has been configured as an input. If LEDs in a project seem to be working, but very dimly, this is likely what is going on.

The pullup resistors are controlled by the same registers (internal chip memory locations) that control whether a pin is HIGH or LOW. Consequently, a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then switched to an OUTPUT with pinMode(). This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode().

Prior to Arduino 1.0.1, it was possible to configure the internal pull-ups in the following manner:

NOTE: Digital pin 13 is harder to use as a digital input than the other digital pins because it has an LED and resistor attached to it that’s soldered to the board on most boards. If you enable its internal 20k pull-up resistor, it will hang at around 1.7V instead of the expected 5V because the onboard LED and series resistor pull the voltage level down, meaning it always returns LOW. If you must use pin 13 as a digital input, set its pinMode() to INPUT and use an external pull down resistor.

Properties of Pins Configured as OUTPUT

Pins configured as OUTPUT with pinMode() are said to be in a low-impedance state. This means that they can provide a substantial amount of current to other circuits. Atmega pins can source (provide positive current) or sink (provide negative current) up to 40 mA (milliamps) of current to other devices/circuits. This is enough current to brightly light up an LED (don’t forget the series resistor), or run many sensors, for example, but not enough current to run most relays, solenoids, or motors.

Short circuits on Arduino pins, or attempting to run high current devices from them, can damage or destroy the output transistors in the pin, or damage the entire Atmega chip. Often this will result in a «dead» pin in the microcontroller but the remaining chip will still function adequately. For this reason it is a good idea to connect OUTPUT pins to other devices with 470О© or 1k resistors, unless maximum current draw from the pins is required for a particular application.

Источник

Цифровые выводы

В прошлом уроке мы использовали вывод под номером 13. Познакомимся с другими портами и как можно их использовать.

У каждой платы Arduino есть свой набор выводов, которые также могут называться порты, выходы, пины (pin). В большинстве случаев рассматривается плата Arduino UNO. Набравшись опыта, вам не составит труда разобраться с другими платами.

Хорошенько осмотрите плату. По краям платы вы увидите колодки, в которые можно вставлять провода. Они все подписаны. С одной стороны идут цифровые выводы от 0 до 13 и GND, с другой стороны аналоговые выводы от A0 до A5 и GND (2 шт.), 5V, 3.3V. Запомните их расположение, оставшиеся выводы используются гораздо реже, особенно на начальном этапе. Подробнее о плате есть в отдельной статье.

Обратите внимание, что аналоговые выводы на самом деле являются цифровыми и их можно использовать в таком качестве, если вам не хватило стандартных выводов от 0 до 13. Поэтому аналоговые выводы можно представлять как 14, 15, 16, 17, 18, 19 вместо A0, A1, A2, A3, A4, A5. Может пригодиться при создании массива пинов, так проще перечислять все пины от 0 до 19. Но это происходит достаточно редко, вам должно хватить уже существующих выводов.

Аналоговые и цифровые выводы могут принимать цифровой сигнал. Цифровым сигналом называют последовательность нулей и единиц от скачков напряжения от 0 до 5 вольт. Вдобавок, аналоговые выводы могут принимать аналоговые сигналы — диапазон плавно изменяющего напряжения от 0 до 5 вольт с маленьким шагом.

Датчики могут быть тоже цифровыми и аналоговыми и подключаться к соответствующим выводам. Как минимум, у датчиков есть три провода: один ведёт к питанию, второй к земле, по третьему передаются данные.

Можно программно управлять цифровыми выводами — подавать ток и не подавать ток. А также можно считывать информацию — подаётся ли ток или нет. Чтобы проверить эти утверждения, необходимо создать замкнутую цепь. Но есть одна проблема — мы не можем увидеть проходящий ток. Поэтому для наглядности будем добавлять в цепь светодиод. Если ток в цепи есть, то светодиод будет светиться. Удобно. А также мы будем использовать Serial Monitor (о нём позже), чтобы выводить информацию на экран.

Старайтесь не использовать выводы 0 и 1. Они используются для приёма и передачи данных по USB, если в вашем проекте появится такая необходимость, а вы уже припаяли провода, то будут лишние проблемы и трата времени. Выводы 2 и 3 используются в прерываниях. Конечно, в простых проектах это не принципиально, но лучше сразу привыкнуть к правильному порядку. Таблица приоритетов может выглядеть следующим образом: D4, D7, D8. D5, D6, D9, D10. D2, D3. D11, D12, D13, D0, D1.

Мигаем светодиодом на любом выводе

Прежде чем мы двинемся дальше, следует познакомиться ещё с одним важным инструментом — макетная плата. Для сложных схем требуется больше места. В таких случаях соединяют отдельные компоненты схемы с помощью проводов. Для лучшего соединения провода желательно использовать пайку. Но для новичка это сложно, да и муторно. Ведь если схема сложная и мы где-то сделали ошибку, то придётся все заново отпаивать и припаивать.

Специально для этих целей была придумана макетная плата Breadboard. Когда я впервые взял её в руки, то растерялся. Интуитивно-понятным интерфейсом здесь и не пахло. Множество дырочек, красные и синие полосочки, буковки, циферки. Радиолюбители на форумах говорят, что это примитивная штука, не требующая объяснений. Но, когда впервые сталкиваешься с таким предметом, то так не думаешь.

Итак, плата Breadboard позволяет обойтись без пайки и собрать схему для испытаний. Внутри макетной платы проложены проводочки хитрым образом, что позволяет вам собирать довольно сложные конструкции.

На моей доске доступно 830 контактов. Четыре рельсы по бокам предназначены для подключения питания и земли. Между ними — 126 групп соединённых между собой контактов. У вас могут быть платы другого размера, но общая идея остаётся прежней.

Давайте соберём нашу первую схему на макетной плате. Нам понадобятся плата Arduino, Breadboard, светодиод, резистор и перемычки (или провода). Начнём с Breadboard. Вставляем в него светодиод следующим образом — длинную ножку вставляем в один из выводов, например, A5, а короткую ножку в отверстие синей рельсы, т.е. минус.

Берём резистор и вставляем его следующим образом (напоминаю, что у резистора порядок выводов не важен) — одну ножку вставляем в одно из свободных отверстий, которое находится на одной линии с занятым светодиодом отверстием. Вторую ножку втыкаем в любое отверстие красной рельсы (плюс). Наша схема готова.

Далее необходимо соединить Breadboard с платой Arduino. Располагаем их рядышком и соединяем их с помощью перемычек. Первая перемычка вставляется так — на Breadboard ножка перемычки вставляется в свободное отверстие красной рельсы, а вторая ножка втыкается на Arduino в порт вывода с меткой 5V. Вторую перемычку ставим так — первая ножка вставляется на Breadboard в отверстие синей рельсы, а вторая ножка вставляется на Arduino в порт вывода с меткой GND (на плате несколько меток GND, подойдёт любой).

Подключаем плату к компьютеру. Если все сделано правильно, то светодиод должен загореться. Ура, получилось!

Учимся читать схему

Посмотрим, что мы сделали. Мы последовательно соединили светодиод с резистором к источнику питания на 5 Вольт. По этой схеме ток течёт из вывода с меткой 5V, далее проходит через резистор, потом через светодиод и попадает в вывод с меткой GND.

Предположим, мы хотим поделиться описанием собранной схемы со своими друзьями, чтобы они сами собрали такую же штуку. Например, можно сделать фото и переслать его через электронную почту. Но радиолюбители пользуются в подобных случаях специальными схемами. И нам необходимо научиться рисовать и читать подобные схемы, чтобы собирать более сложные конструкции.

Каждый электронный компонент имеет свой графический символ. Например, для резистора используется следующий символ (используется в США, в России и Европе используется другой символ):

Как видите, символ резистора симметричен, как и сам компонент.

Светодиод обозначается символом:

Положительный вывод находится слева, а отрицательный справа. Кроме того, у символа имеются две маленькие стрелки, которые показывают, что это не просто диод, а светодиод.

Плюс (слева) и минус (справа) питания также имеют символы:

Попробуем соединить все описанные детали вместе, чтобы изобразить нашу цепь.

Дополним схему информацией об используемом резисторе, цвете светодиода, напряжении, и получим схему, которую можно отдать другу.

Усложняем схему

Мы создали примитивную схему, которой нельзя управлять. Ток течёт через резистор и светодиод, минуя порты ввода/вывода.

Изменим схему следующим образом. Сейчас у нас резистор соединяется с выводом 5V. Давайте соединим его теперь с выводом 13. Вытащим ножку резистора из вывода 5V и вставим его в отверстие на Breadboard таким образом, чтобы оно находилось на одной линии с другой ножкой резистора. Далее соединяем перемычкой вывод 13 на Arduino и соседнее отверстие рядом с ножкой резистора. Светодиод оставляем на месте.

На схеме это будет выглядеть следующим образом.

Откройте предыдущую программу с миганием встроенного светодиода и запустите её. У вас теперь будут мигать два светодиода одновременно — встроенный и наш, так как они оба использует выход 13.

Для закрепления материала перебросим перемычку на вывод с меткой 12. Схема теперь выглядит так:

Стандартный пример Blink уже не будет работать, так как использует вывод 13. Следует переписать скетч для мигания своим светодиодом на своём выводе.

02.Digital: BlinkWithoutDelay (Мигаем светодиодом без delay())

Рассмотрим урок BlinkWithoutDelay из меню File | Examples | 02.Digital.

В самом простом примере с миганием светодиода мы использовали функцию delay(). У данного способа есть большой недостаток, проявляемый в сложных проектах — во время вызова функции программа «замораживается» и не может выполнять других действий. В реальных задачах часто требуется, чтобы программа не только мигала светодиодом, но и выполняла другую работу в это же время. Решим проблему можно хитрым образом — программа будет запоминать время, когда был включён или выключен светодиод и в каждом цикле loop() будет проверять, не прошло ли достаточно времени для переключения светодиода.

В коде используется функция millis(), возвращающая количество миллисекунд с момента начала работы текущей программы.

Для демонстрации нужен светодиод с резистором и кнопка.

Режим INPUT

В примерах с миганием светодиодов мы устанавливали режим OUTPUT. По умолчанию, все выводы имеют режим INPUT и можно не указывать этот режим.

Но лучше контролировать данный процесс и явно прописывать, чтобы всегда видеть перед глазами код и понимать происходящее. С режимом ввода связан один интересный и важный момент. Воспроизведём следующую ситуацию. Подключим светодиод к выводу 13 (для наглядности, чтобы не всматриваться в встроенный маленький светодиод) и установим для вывода 7 режим ввода. Провод соединим между выводом 7 и 5V.

Светодиод будет светиться, если на выводе 7 есть ток, иначе светиться не будет. Мы следим за выводом 7, считывая показания через digitalRead(). Соединив второй конец провода от вывода 7 с выводом 5V, мы замыкаем цепь — ток течёт, функция получает значение логической единицы (true) и светодиод светится.

Вытаскиваем провод из вывода 5V и вставляем в вывод GND — ток не течёт, функция получает значение логического ноля и светодиод не светится.

В обоих случаях мы получаем логическую единицу или логический ноль, т.е. true или false.

Казалось, всё очевидно и понятно. Но сделаем одну вещь — вытащим провод из вывода GND и оставим его болтаться в воздухе. Теперь попробуйте взять провод в руки или просто проведите рукой над проводом — вы увидите, что иногда светодиод начинает светиться. Чудо! На самом деле всё просто — вход 7 находится в «никаком» состоянии. Он может срабатывать и не срабатывать хаотично, непредсказуемым образом, а причиной являются шумы, образующиеся вокруг: провода действуют как маленькие антенны и производят электричество из электромагнитных волн среды. На состояние могут действовать самые разные наводки — датчики, рука, другие устройства, провода и т.д.

Запомните это состояние, когда провод болтается в воздухе и мы получаем случайные данные. Данная ситуация нам встретится при работе с кнопками, где это будет проблемой, с которой нужно бороться.

В теории считается, что за логическую единицу принимается 5В, а за логический ноль — 0В. Но на самом деле это не так. Значения от 2.6В платой уже воспринимается как логическая единица. А логический ноль наступает при значении 2.1В и ниже. У нас возникает диапазон от 2.1 до 2.6, который является неопределённым и плата не может гарантированно опознать эти значения и может считать их в случайном порядке как единицу и как ноль. Именно это и произошло в нашем примере с висящим проводом. Причиной является делитель напряжение, который находится у каждого цифрового вывода

Выводы 0 и 1

Старайтесь не использовать выводы 0 и 1 в своих схемах, так как они используются самой платой для загрузки скетча через USB. Иногда применяют следующий приём: временно убирают модуль с этих выводов, загружают скетч, а потом снова устанавливают модуль. Например, такое можно наблюдать при работе с Bluetooth-модулями.

На следующих занятиях мы подключим светодиод и заставим его не только мигать, но и плавно менять своё свечение.

Источник

Цифровые контакты arduino

Цифровые выводы

В прошлом уроке мы использовали вывод под номером 13. Познакомимся с другими портами и как можно их использовать.

У каждой платы Arduino есть свой набор выводов, которые также могут называться порты, выходы, пины (pin). В большинстве случаев рассматривается плата Arduino UNO. Набравшись опыта, вам не составит труда разобраться с другими платами.

Хорошенько осмотрите плату. По краям платы вы увидите колодки, в которые можно вставлять провода. Они все подписаны. С одной стороны идут цифровые выводы от 0 до 13 и GND, с другой стороны аналоговые выводы от A0 до A5 и GND (2 шт.), 5V, 3.3V. Запомните их расположение, оставшиеся выводы используются гораздо реже, особенно на начальном этапе. Подробнее о плате есть в отдельной статье.

Обратите внимание, что аналоговые выводы на самом деле являются цифровыми и их можно использовать в таком качестве, если вам не хватило стандартных выводов от 0 до 13. Поэтому аналоговые выводы можно представлять как 14, 15, 16, 17, 18, 19 вместо A0, A1, A2, A3, A4, A5. Может пригодиться при создании массива пинов, так проще перечислять все пины от 0 до 19. Но это происходит достаточно редко, вам должно хватить уже существующих выводов.

Аналоговые и цифровые выводы могут принимать цифровой сигнал. Цифровым сигналом называют последовательность нулей и единиц от скачков напряжения от 0 до 5 вольт. Вдобавок, аналоговые выводы могут принимать аналоговые сигналы — диапазон плавно изменяющего напряжения от 0 до 5 вольт с маленьким шагом.

Датчики могут быть тоже цифровыми и аналоговыми и подключаться к соответствующим выводам. Как минимум, у датчиков есть три провода: один ведёт к питанию, второй к земле, по третьему передаются данные.

Можно программно управлять цифровыми выводами — подавать ток и не подавать ток. А также можно считывать информацию — подаётся ли ток или нет. Чтобы проверить эти утверждения, необходимо создать замкнутую цепь. Но есть одна проблема — мы не можем увидеть проходящий ток. Поэтому для наглядности будем добавлять в цепь светодиод. Если ток в цепи есть, то светодиод будет светиться. Удобно. А также мы будем использовать Serial Monitor (о нём позже), чтобы выводить информацию на экран.

Старайтесь не использовать выводы 0 и 1. Они используются для приёма и передачи данных по USB, если в вашем проекте появится такая необходимость, а вы уже припаяли провода, то будут лишние проблемы и трата времени. Выводы 2 и 3 используются в прерываниях. Конечно, в простых проектах это не принципиально, но лучше сразу привыкнуть к правильному порядку. Таблица приоритетов может выглядеть следующим образом: D4, D7, D8. D5, D6, D9, D10. D2, D3. D11, D12, D13, D0, D1.

Мигаем светодиодом на любом выводе

Прежде чем мы двинемся дальше, следует познакомиться ещё с одним важным инструментом — макетная плата. Для сложных схем требуется больше места. В таких случаях соединяют отдельные компоненты схемы с помощью проводов. Для лучшего соединения провода желательно использовать пайку. Но для новичка это сложно, да и муторно. Ведь если схема сложная и мы где-то сделали ошибку, то придётся все заново отпаивать и припаивать.

Специально для этих целей была придумана макетная плата Breadboard. Когда я впервые взял её в руки, то растерялся. Интуитивно-понятным интерфейсом здесь и не пахло. Множество дырочек, красные и синие полосочки, буковки, циферки. Радиолюбители на форумах говорят, что это примитивная штука, не требующая объяснений. Но, когда впервые сталкиваешься с таким предметом, то так не думаешь.

Итак, плата Breadboard позволяет обойтись без пайки и собрать схему для испытаний. Внутри макетной платы проложены проводочки хитрым образом, что позволяет вам собирать довольно сложные конструкции.

На моей доске доступно 830 контактов. Четыре рельсы по бокам предназначены для подключения питания и земли. Между ними — 126 групп соединённых между собой контактов. У вас могут быть платы другого размера, но общая идея остаётся прежней.

Давайте соберём нашу первую схему на макетной плате. Нам понадобятся плата Arduino, Breadboard, светодиод, резистор и перемычки (или провода). Начнём с Breadboard. Вставляем в него светодиод следующим образом — длинную ножку вставляем в один из выводов, например, A5, а короткую ножку в отверстие синей рельсы, т.е. минус.

Берём резистор и вставляем его следующим образом (напоминаю, что у резистора порядок выводов не важен) — одну ножку вставляем в одно из свободных отверстий, которое находится на одной линии с занятым светодиодом отверстием. Вторую ножку втыкаем в любое отверстие красной рельсы (плюс). Наша схема готова.

Далее необходимо соединить Breadboard с платой Arduino. Располагаем их рядышком и соединяем их с помощью перемычек. Первая перемычка вставляется так — на Breadboard ножка перемычки вставляется в свободное отверстие красной рельсы, а вторая ножка втыкается на Arduino в порт вывода с меткой 5V. Вторую перемычку ставим так — первая ножка вставляется на Breadboard в отверстие синей рельсы, а вторая ножка вставляется на Arduino в порт вывода с меткой GND (на плате несколько меток GND, подойдёт любой).

Подключаем плату к компьютеру. Если все сделано правильно, то светодиод должен загореться. Ура, получилось!

Учимся читать схему

Посмотрим, что мы сделали. Мы последовательно соединили светодиод с резистором к источнику питания на 5 Вольт. По этой схеме ток течёт из вывода с меткой 5V, далее проходит через резистор, потом через светодиод и попадает в вывод с меткой GND.

Предположим, мы хотим поделиться описанием собранной схемы со своими друзьями, чтобы они сами собрали такую же штуку. Например, можно сделать фото и переслать его через электронную почту. Но радиолюбители пользуются в подобных случаях специальными схемами. И нам необходимо научиться рисовать и читать подобные схемы, чтобы собирать более сложные конструкции.

Каждый электронный компонент имеет свой графический символ. Например, для резистора используется следующий символ (используется в США, в России и Европе используется другой символ):

Как видите, символ резистора симметричен, как и сам компонент.

Светодиод обозначается символом:

Положительный вывод находится слева, а отрицательный справа. Кроме того, у символа имеются две маленькие стрелки, которые показывают, что это не просто диод, а светодиод.

Плюс (слева) и минус (справа) питания также имеют символы:

Попробуем соединить все описанные детали вместе, чтобы изобразить нашу цепь.

Дополним схему информацией об используемом резисторе, цвете светодиода, напряжении, и получим схему, которую можно отдать другу.

Усложняем схему

Мы создали примитивную схему, которой нельзя управлять. Ток течёт через резистор и светодиод, минуя порты ввода/вывода.

Изменим схему следующим образом. Сейчас у нас резистор соединяется с выводом 5V. Давайте соединим его теперь с выводом 13. Вытащим ножку резистора из вывода 5V и вставим его в отверстие на Breadboard таким образом, чтобы оно находилось на одной линии с другой ножкой резистора. Далее соединяем перемычкой вывод 13 на Arduino и соседнее отверстие рядом с ножкой резистора. Светодиод оставляем на месте.

На схеме это будет выглядеть следующим образом.

Откройте предыдущую программу с миганием встроенного светодиода и запустите её. У вас теперь будут мигать два светодиода одновременно — встроенный и наш, так как они оба использует выход 13.

Для закрепления материала перебросим перемычку на вывод с меткой 12. Схема теперь выглядит так:

Стандартный пример Blink уже не будет работать, так как использует вывод 13. Следует переписать скетч для мигания своим светодиодом на своём выводе.

02.Digital: BlinkWithoutDelay (Мигаем светодиодом без delay())

Рассмотрим урок BlinkWithoutDelay из меню File | Examples | 02.Digital.

В самом простом примере с миганием светодиода мы использовали функцию delay(). У данного способа есть большой недостаток, проявляемый в сложных проектах — во время вызова функции программа «замораживается» и не может выполнять других действий. В реальных задачах часто требуется, чтобы программа не только мигала светодиодом, но и выполняла другую работу в это же время. Решим проблему можно хитрым образом — программа будет запоминать время, когда был включён или выключен светодиод и в каждом цикле loop() будет проверять, не прошло ли достаточно времени для переключения светодиода.

В коде используется функция millis(), возвращающая количество миллисекунд с момента начала работы текущей программы.

Для демонстрации нужен светодиод с резистором и кнопка.

Режим INPUT

В примерах с миганием светодиодов мы устанавливали режим OUTPUT. По умолчанию, все выводы имеют режим INPUT и можно не указывать этот режим.

Но лучше контролировать данный процесс и явно прописывать, чтобы всегда видеть перед глазами код и понимать происходящее. С режимом ввода связан один интересный и важный момент. Воспроизведём следующую ситуацию. Подключим светодиод к выводу 13 (для наглядности, чтобы не всматриваться в встроенный маленький светодиод) и установим для вывода 7 режим ввода. Провод соединим между выводом 7 и 5V.

Светодиод будет светиться, если на выводе 7 есть ток, иначе светиться не будет. Мы следим за выводом 7, считывая показания через digitalRead(). Соединив второй конец провода от вывода 7 с выводом 5V, мы замыкаем цепь — ток течёт, функция получает значение логической единицы (true) и светодиод светится.

Вытаскиваем провод из вывода 5V и вставляем в вывод GND — ток не течёт, функция получает значение логического ноля и светодиод не светится.

В обоих случаях мы получаем логическую единицу или логический ноль, т.е. true или false.

Казалось, всё очевидно и понятно. Но сделаем одну вещь — вытащим провод из вывода GND и оставим его болтаться в воздухе. Теперь попробуйте взять провод в руки или просто проведите рукой над проводом — вы увидите, что иногда светодиод начинает светиться. Чудо! На самом деле всё просто — вход 7 находится в «никаком» состоянии. Он может срабатывать и не срабатывать хаотично, непредсказуемым образом, а причиной являются шумы, образующиеся вокруг: провода действуют как маленькие антенны и производят электричество из электромагнитных волн среды. На состояние могут действовать самые разные наводки — датчики, рука, другие устройства, провода и т.д.

Запомните это состояние, когда провод болтается в воздухе и мы получаем случайные данные. Данная ситуация нам встретится при работе с кнопками, где это будет проблемой, с которой нужно бороться.

В теории считается, что за логическую единицу принимается 5В, а за логический ноль — 0В. Но на самом деле это не так. Значения от 2.6В платой уже воспринимается как логическая единица. А логический ноль наступает при значении 2.1В и ниже. У нас возникает диапазон от 2.1 до 2.6, который является неопределённым и плата не может гарантированно опознать эти значения и может считать их в случайном порядке как единицу и как ноль. Именно это и произошло в нашем примере с висящим проводом. Причиной является делитель напряжение, который находится у каждого цифрового вывода

Выводы 0 и 1

Старайтесь не использовать выводы 0 и 1 в своих схемах, так как они используются самой платой для загрузки скетча через USB. Иногда применяют следующий приём: временно убирают модуль с этих выводов, загружают скетч, а потом снова устанавливают модуль. Например, такое можно наблюдать при работе с Bluetooth-модулями.

На следующих занятиях мы подключим светодиод и заставим его не только мигать, но и плавно менять своё свечение.

Источник

Arduino.ru

Цифровые выводы

Выводы платформы Arduino могут работать как входы или как выходы. Данный документ объясняет функционирование выводов в этих режимах. Также необходимо обратить внимание на то, что большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода.

Свойства порта вводы/вывода (pin), сконфигурированного как порт ввода

Выводы Arduino (Atmega) стандартно настроены как порты ввода, таким образом, не требуется явной декларации в функции pinMode(). Сконфигурированные порты ввода находятся в высокоимпедансном состоянии. Это означает то, что порт ввода дает слишком малую нагрузки на схему, в которую он включен. Эквивалентом внутреннему сопротивлению будет резистор 100 МОм подключенный к выводу микросхемы. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока. Это позволяет применять выводы микросхемы для подключения емкостного датчика касания, фотодиода, аналогового датчика со схемой, похожей на RC-цепь.

С другой стороны, если к данному выводу ничего не подключено, то значения на нем будут принимать случайные величины, наводимые электрическими помехами или емкостной взаимосвязью с соседним выводом.

Подтягивающие (нагрузочные) резисторы

Если на порт ввода не поступает сигнал, то в данном случае рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к +5 В (подтягивающие к питанию резисторы), либо к земле (подтягивающие к земле резисторы).

Микроконтроллер Atmega имеет программируемые встроенные подтягивающие к питанию резисторы 20 кОм. Программирование данных резисторов осуществляется следующим образом.

Подтягивающий резистор пропускает ток достаточный для того, чтобы слегка светился светодиод подключенный к выводу, работающему как порт ввода. Также легкое свечение светодиодов означает то, что при программировании вывод не был настроен как порт вывода в функции pinMode().

Подтягивающие резисторы управляются теми же регистрами (внутренние адреса памяти микроконтроллера), что управляют состояниями вывода: HIGH или LOW. Следовательно, если вывод работает как порт ввода со значением HIGH, это означает включение подтягивающего к питанию резистора, то конфигурация функцией pinMode() порта вывода на данном выводе микросхемы передаст значение HIGH. Данная процедура работает и в обратном направлении, т.е. если вывод имеет значение HIGH, то конфигурация вывода микросхемы как порта ввода функцией pinMode() включит подтягивающий к питанию резистор.

Примечание: Затруднительно использовать вывод микросхемы 13 в качестве порта ввода из-за подключенных к нему светодиода и резистора. При подключении подтягивающего к питанию резистора 20 кОм на вводе будет 1.7 В вместо 5 В, т.к. происходит падение напряжения на светодиоде и включенном последовательно резисторе. При необходимости использовать вывод микросхемы 13 как цифровой порт ввода требуется подключить между выводом и землей внешний подтягивающий резистор.

Свойства порта ввода/вывода, сконфигурированного как порт вывода

Выводы, сконфигурированные как порты вывода, находятся в низкоимпедансном состоянии. Данные выводы могут пропускать через себя достаточно большой ток. Выводы микросхемы Atmega могут быть источником (положительный) или приемником (отрицательный) тока до 40 мА для других устройств. Такого значения тока достаточно чтобы подключить светодиод (обязателен последовательно включенный резистор), датчики, но недостаточно для большинства реле, соленоидов и двигателей.

Короткие замыкания выводов Arduino или попытки подключить энергоемкие устройства могут повредить выходные транзисторы вывода или весь микроконтроллер Atmega. В большинстве случаев данные действия приведут к отключению вывода на микроконтроллере, но остальная часть схемы будет работать согласно программе. Рекомендуется к выходам платформы подключать устройства через резисторы 470 Ом или 1 кОм, если устройству не требуется больший ток для работы.

Источник

Adblock
detector