Домашняя система орошения на arduino с 7-сегментным дисплеем

Четырехразрядный семисегментный индикатор

Четырехразрядный семисегментный индикатор Ардуино ► светодиодный индикатор четырехсимвольный используется для таймеров на Arduino или вывода чисел в проектах.

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

Распиновка 4 разрядного 7 сегментного индикатора

Распиновка сегментов индикатора, состоящего из четырех символов ничем не отличается от одно символьного семисегментного индикатора Ардуино. Отличие модуля в количестве разрядов (символов) — каждый разряд включается отключением питания от соответствующего катода. Таким образом все светодиоды одного сегмента в разрядах (например, A-A-A-A) подключены параллельно к общему катоду.

Распиновка четырехразрядного семисегментного светодиодного индикатора

С включением сегмента довольно просто разобраться. Разберем небольшой пример. Изначально на все 4 разряда (D1, D2, D3, D4) подано напряжение. Чтобы включить сегмент A на втором символе, необходимо на ножку A (анод) подать напряжение. Но сегмент не загорится, пока мы не отключим напряжение у ножки D2. Таким образом можно включать любой светодиод на модуле 7 сегментного индикатора.

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

Подключение 4 разрядного 7 сегментного индикатора

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • четырехразрядный семисегментный индикатор;
  • макетная плата (breadboard);
  • тактовая кнопка;
  • аналоговый датчик воды;
  • резисторы 220 Ом;
  • провода «папа-папа».

Схема подключения четырехсегментного индикатора к Ардуино

В первом примере мы продемонстрируем простую программу, чтобы можно было наглядно понять, как работает 4-разрядный 7-сегментный индикатор к Ардуино. Схема подключения индикатора к микроконтроллеру представлена на схеме выше, но в первом примере не все пины Ардуино используются в программе. Подключите светодиодный четырехразрядный индикатор к плате и загрузите следующий код.

Arduino: 7-сегментный индикатор

Если вы научились пользоваться “световой шкалой”, то следующий шаг в освоении нового компонента “7-сегментный индикатор” дастся вам легко. Он попадается практически во всех стартовых наборах.

Одноразрядный 7-сегментный индикатор

Мы имеем дело опять с набором светодиодов, только на этот раз их 8 (семь полосок и один кружочек) и они расположены не друг за другом, а в определённом порядке, которые позволяют вам выводить цифры от 0 до 9.

Важная отличительная черта – у индикатора имеются общие ножки для катода (ножки 3 и 8). Всего их две и они равноценны. Это удобно, вам не нужно будет от каждого катода вести отдельный провод на землю. Достаточно выбрать один из общих катодов и от неё соединиться с GND. Аноды у всех отдельные.

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

На 7-сегментный индикатор распространяются те же правила, что и на стандартные светодиоды – у каждого должен быть свой резистор. Поэтому для опытов приготовьте 8 резисторов.

Схематично можно изобразить следующим образом.

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

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

Если мы хотим помигать цифрой 1, то нам надо использовать светодиоды 4 и 6, которые идут на порты 4 и 6 платы микроконтроллера.

Если мы захотим вывести цифру 5, то понадобится работать с пятью светодиодами, цифру 8 – уже семь светодиодов. При сложных проектах работать с таким количеством становится затруднительно. Придётся каждый раз смотреть на схему, что вспомнить, какие светодиоды нужно включить для отображения каждой цифры.

Но можно пойти другим путём. А поможет нам единица информации – байт. Байт в своём двоичном представлении состоит из 8 бит. Каждый бит может принимать значения 0 или 1. А наш светодиодный индикатор как раз и состоит из восьми светодиодов. Таким образом мы можем представить цифру на индикаторе в виде набора байт, где единица будет отвечать за включённый диод, а ноль – за выключенный диод.

Число в двоичном виде записывается следующим образом:

Первые два символа 0b дают понять, что речь идёт о двоичном счёте. Все нули означают, что все светодиоды будут выключены.

У нас задействованы порты от 2 по 9. Второй порт записывается в самую правую позицию. Чтобы его включить, поставим единицу.

Можно самостоятельно включать по отдельности каждый диод, перемещая единицу в представленном байте. Поняв принцип, можно, например, заметить, что за точку отвечает четвёртый бит справа. Если мы его не будем использовать, то он всегда будет равен 0. За чёрточку посередине индикатора отвечает самый последний байт (или первый слева).

Комбинируя набор нулей и единиц, можно создать нужные нам цифры. Например, цифра 0 будет представлена как 0b01110111.

Давайте напишем пример вывода цифры 0.

Код немного избыточен, переменная mask здесь лишняя, но она нам пригодится в следующем примере. Здесь важно, что мы пробегаемся в цикле по числу светодиодов и устанавливаем у всех режим OUTPUT. Затем также в цикле проходим через все светодиоды и узнаём, комбинацию бит с помощью метода bitRead(). Полученная информация помогает нам подсветить нужные светодиоды и получить цифру 0 на выходе.

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

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

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

На видео некоторые цифры отображаются коряво, видимо из-за особенностей записи. В реальности все цифры работают как положено.

Позже я добавил на плату ещё один светодиод, который загорался при значении 0. При других значениях он был выключен.

На Амперке есть упоминания о двух компонентах, которые можно использовать для светодиодного индикатора. Я пока ими не пользовался:

Четырёхразрядный 7-сегментный индикатор

У четырёхразрядного 7-сегментного индикатора двенадцать выводов: 8 для каждого разряда с точкой и 4 для выбора нужного разряда. Чтобы разобраться в подключении, желательно иметь картинку перед глазами.

Если индикатор держать точкой вниз, то отсчёт идёт против часовой стрелки от нижнего левого угла.

Выводы 6, 8, 9 и 12 отвечают за конкретные разряды. Это могут быть общие катоды или общие аноды.

Выводы 1, 2, 3, 4, 5, 7, 10, 11 отвечают за конкретные сегменты. Например, самая верхняя полоска обозначена буквой A и имеет номер вывода 11. Таким образом, если подключить выводы 11 и 12 индикатора к выводу 11 и 12 на плате Arduino, то можем управлять этой полоской стандартным способом, например, помигать светодиодом.

Соедините все двенадцать выводов индикатора с выводами на плате. В своих примерах я использовал следующую схему.

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

Включаем букву H на всех разрядах.

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

Библиотека fDigitsSegtPin

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

Модули 7-сегментных дисплеев

Большое количество выводов у 7-сегментных дисплеев не слишком удобно использовать. Поэтому появились дисплеи в виде готовых модулей. Например, популярна модель TM1637.

Схема подключения 7-сегментных индикаторов к Arduino

В этой статье описывается схема подключения пары светодиодных семисегментных индикаторов к Arduino Uno с помощью микросхем-драйверов CD4026. При таком подходе, для вывода числа с любым количеством разрядов используется всего 2 цифровых выхода Arduino.

Для примера будем выводить на индикаторы количество секунд, прошедших с момента старта работы.

Исходные компоненты

Для эксперимента нам понадобятся:

Принцип работы

Семисегментный индикатор — это просто набор обычных светодиодов в одном корпусе. Просто они выложены восьмёркой и имеют форму палочки-сегмента. Можно подключить его напрямую к Arduino, но тогда будет занято 7 контактов, а в программе будет необходимо реализовать алгоритм преобразования числа из двоичного представления в соответствующие «калькуляторному шрифту» сигналы.

Для упрощения этой задачи существует 7-сегментный драйвер. Это простая микросхема с внутренним счётчиком. У неё есть 7 выходов для подключения всех сегментов (a, b, c, d, e, f, g pins), контакт для сбрасывания счётчика в 0 (reset pin) и контакт для увеличения значения на единицу (clock pin). Значение внутреннего счётчика преобразуется в сигналы (включен / выключен) на контакты a-g так, что мы видим соответствующую арабскую цифру.

На микросхеме есть ещё один выход, обозначенный как «÷10». Его значение всё время LOW за исключением момента переполнения, когда значение счётчика равно 9, а его увеличивают на единицу. В этом случае значением счётчика снова становится 0, но выход «÷10» становится HIGH до момента следующего инкремента. Его можно соединить с clock pin другого драйвера и таким образом получить счётчик для двузначных чисел. Продолжая эту цепочку, можно выводить сколь угодно длинные числа.

Микросхема может работать на частоте до 16 МГц, т.е. она будет фиксировать изменения на clock pin даже если они будут происходить 16 миллионов раз в секунду. На той же частоте работает Arduino, и это удобно: для вывода определённого числа достаточно сбросить счётчик в 0 и быстро инкрементировать значение по единице до заданного. Глазу это не заметно.

Подключение

Сначала установим индикаторы и драйверы на breadboard. У всех них ноги располагаются с двух сторон, поэтому, чтобы не закоротить противоположные контакты, размещать эти компоненты необходимо над центральной канавкой breadboard’а. Канавка разделяет breadboard на 2 несоединённые между собой половины.

Далее, подключим один из драйверов в соответствии с его распиновкой

Контакты 3 и 8 на индикаторе обозначены как «катод», они общие для всех сегментов, и должны быть напрямую соединены с общей землёй.

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

Соединять необходимо сопоставляя распиновку микросхемы (выходы a-g) и распиновку индикатора (входы a-g)

Повторяем процедуру для второго разряда

Теперь вспоминаем о контакте «reset»: нам необходимо соединить их вместе и притянуть к земле через стягивающий резистор. В последствии, мы подведём к ним сигнал с Arduino, чтобы он мог обнулять значение целиком в обоих драйверах.

Также подадим сигнал с «÷10» от правого драйвера на вход «clock» левого. Таким образом мы получим схему, способную отображать числа с двумя разрядами.

Стоит отметить, что «clock» левого драйвера не стоит стягивать резистором к земле, как это делалось для правого: его соединение с «÷10» само по себе сделает сигнал устойчивым, а притяжка к земле может только нарушить стабильность передачи сигнала.

Железо подготовленно, осталось реализовать несложную программу.

Программирование

Результат

Подключаем контакт 2 с Arduino к контакту clock младшего (правого) драйвера, контакт 3 — к общему reset’у драйверов; разводим питание; включаем — работает!

Уроки Arduino: автоматическая система полива (орошения)

В этом уроке – создание системы домашнего орошения растений на основе микроконтроллера Arduino (Ардуино). Есть тонны похожих проектов и обучающих программ, уже размещенных в Интернете, но, возможно, данный урок – это некая иная альтернатива, которая натолкнет на дополнительные мысли и идеи.

Шаг 1: Готовим инструменты и детали

Что нам понадобится:

  • 1 шт. – Arduino Uno (или чип atmega328 и программист)
  • 1 шт. – резистор 10 кОм
  • 1 шт. – резистор 20 кОм
  • 1 шт. – ULN2803a (или MOSFETS + диоды)
  • 1 шт. – дисплей TM1637
  • 2 шт. – гигрометрические датчики
  • 1 шт. – кратковременная кнопка
  • 1 шт. – релейная плата
  • 2 шт. – насосы
  • 1 шт. – 2-полюсная клемма
  • Сокеты (опционально, но настоятельно рекомендуется иметь возможность легко перепрограммировать чип atmega, если это необходимо)

И в зависимости от того, используете ли вы Arduino или Atmega:

  • 1 шт. – 16 МГц кристалл
  • 2 шт. – 22 пФ конденсатора
  • 1 шт. – 10 мкФ конденсатор
  • 1 шт. – 1N4001 диод
  • Соединительные провода и кабели
  • Трубка
  • Макетная плата
  • Источники питания (5 В или более и один блок питания для ваших насосов)

Вам понадобятся также основные инструменты, например:

  • Паяльник
  • Плоскогубцы
  • Кабельный стриппер
  • Цифровой мультиметр

Шаг 2: Схема подключения

Выше можно увидеть схемы как для автономной версии atmega328, так и для подключения к Arduino Uno. Поскольку устройство должно запускаться сам по себе после завершения урока, не будут нужны никакие функции arduino и просто используется чистый чип. Можно использовать чип от arduino или использовать arduino в качестве программера для другого чипа. Как можно увидеть из схема шины земли и питания (GND и 5V) есть с обеих сторон макетной платы. Все соединения GND и 5V на схеме идут на них.

Также ниже посмотрите распиновку чипа atmega в сравнении с ардуино:

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

Помимо этого, нужно иметь возможность воссоздать все соединения из схемы выше.

В уроке использован модуль ULN2803A, потому что выходные выводы atmega (и, следовательно, вероятно, arduino тоже) не обеспечивают достаточный ток для переключения реле. Реле требует около 60 мА, но на выводах atmega не должны быть превышения выше 40 мА. Кроме того вы не должны переключать индуктивные нагрузки как реле непосредственно так или иначе. Модуль защищает чип от повреждений. Модуль создает падение напряжения, поэтому, если ваше реле не может питаться с мощностью менее 5 В, используйте соответственно MOSFET и обратные диоды.

Шаг 3: Подключение реле и насосов

Плата реле состоит из 3 терминалов для каждого входа: NO, NC и COM. Уже есть привычка переключаться как на нейтраль, так и на фазу для каждого насоса, с конкретным источником питания, который был использован, было точное понимание какой провод куда идет. Это не всегда так, поскольку у вас может не быть защиты от полярности.

Отрезаем провода от источника питания и подключаем их к COM-портам. Затем подключаем разомкнутые клеммы к насосам. Когда реле включается, разомкнутое соединение закрывается и насос запускается. Чтобы иметь возможность использовать 1 блок питания для нескольких насосов, мы подключили закрытый порт к COM-порту следующего набора терминалов.

На всякий случай, для общего понимания, ниже пример того как подключить к Arduino Uno светодиод через модуль реле:

Когда насос 1 включен, терминалы 1 и 2 включаются, нейтраль и фаза соединены через клеммы «NO» и «COM», обычно закрытый терминал теперь открыт. Мы не включаем оба насоса одновременно, а включаем последовательно. Более подробное объяснение и пример того, как модули реле работают будет в следующих материалах.

Шаг 4: Код

Когда все подключено, пришло время погрузиться в код. Библиотека для 7-сегментного дисплея находится здесь.

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

Шаг 5: Итоговый результат

Теперь вы знаете, что с помощью микроконтроллеров подобных Arduino при сильном желании можно создать всё что угодно.

Источники:

http://developer.alexanderklimov.ru/arduino/7segment_display.php

http://wiki.amperka.ru/%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B8-%D0%B8-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B:7-%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80

http://arduinoplus.ru/arduino-sistema-poliva-orashenia/

http://arduino.zl3p.com/basic/13_ch340

Ссылка на основную публикацию