Как подключить 7 сегментный индикатор к ардуино

от admin

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

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

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

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

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

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

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

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

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

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

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

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

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

Для проверки можно запустить стандартный пример 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-сегментный индикатор

4 segment

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

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

4 segment

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

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

4 segment

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

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

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

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

Библиотека fDigitsSegtPin

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

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

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

Семисегментный индикатор Ардуино

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

Одноразрядный семисегментный индикатор подключить к Ардуино можно через макетную плату, самое главное знать распиновку (цоколевку индикатора), чтобы управлять сегментами от Arduino Uno. Рассмотрим, как подключить семисегментный индикатор к Ардуино и сделать простую программу с таймером. Будем управлять индикатором напрямую от микроконтроллера, используя тактовую кнопку.

Семисегментный индикатор распиновка

Распиновка (цоколевка) семисегментного индикатора

Распиновка 1-разрядного семисегментного индикатора hdsp 7503 / 5161as

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

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

Как подключить семисегментный индикатор

Для этого занятия потребуется:

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

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

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

Для использования модуля 5161as / hdsp 7503 без сдвигового регистра потребуется использовать большое количество пинов Arduino Uno для включения светодиодов на индикаторе. В первом примере мы будем просто поочередно включать / мигать светодиодами для индикации на панели различных чисел. Соберите схему, как на представленной выше картинке и загрузите следующий скетч в микроконтроллер.

Скетч. Вывод чисел на 7-сегментный индикатор Ардуино

Пояснения к коду:
  1. скетч получается большим, поэтому мы ограничились тремя числами. Вывод других чисел на семисегментный индикатор Arduino не составит труда.

Управление семисегментными индикаторами

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

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

В следующем примере переключение чисел на индикаторе будет происходить только при нажатии тактовой кнопки. Дойдя до числа 3, таймер вновь обнулится и будет ожидать повторного нажатия на кнопку. Это довольно простые программы для Ардуино и семисегментного индикатора, для более сложных и интересных программ необходимо уже использовать сдвиговый регистр 74hc595 для Ардуино.

Скетч. Одноразрядный семисегментный индикатор и кнопка

Пояснения к коду:
  1. переменная byte v = 0; используется в программе для перехода одного цикла while к другому. При нажатии на кнопку значение переменной v меняется;
  2. в программе поставлена небольшая задержка в каждом условии для защиты от быстрого перехода от одного цикла while в другой.

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

Using a 7 Segment LED Display w/ Arduino Uno

I recently purchased an Arduino Uno starter kit which included a number of 7 segment LED displays (like the one pictured below), which were some what confusing for someone new to electronics and the Arduino itself.

After a bit of reading and experimentation with said LED displays, I have developed a reusable library that can be used for these components, and others that are made in the same way.

To complete this small tutorial you will need the following:

  • An Arduino device with at least ten digital pins
  • A double digit common anode 7-segment LED display
  • Ten jumper cables
  • Two 330 ohm resistors
  • Two breadboards or one with two sets of rails

The LED display I am using for this guide (a 5261BS) came with an Arduino starter kit as previously mentioned, which I purchased from 4tronix UK (http://stores.ebay.co.uk/4tronix-UK). The manufacturer seems to be a company called Wahkitsing, who sell the same part On This Website. However, from the research I’ve done, it seems most manufacturers of these components use the same basic approach, and thus this code and guide should be transferable to other dual digit 7-segment displays.

Wiring it up

The first thing we’re going to have to do is obviously wire up the component to the Arduino. Before doing so I’m going to explain how this particular component actually works, so that you have a better understanding of why we’re doing what we are.

Each digit on the LED display is made up of seven segments, and one extra segment for the decimal point, as can be seen in the illustration below.

The first thing you’re probably wondering is: “how do we use a total of 16 different segments if we only have ten pins on the component?”. The answer to that is by using two pins which act as bit flags to indicate which digit’s segments to light up.

For the component I am using, the digit flags are accessed via pins 8 and 7, however these pins seem to vary between different manufacturers, so be sure to check any instructions that came with yours. Most of these displays ship with a diagram similar to that which can be found below.

As you can see, the diagram indicates which pins are our digit bit flags (pin 8 for digit 1 and pin 7 for digit 2), and it shows us which pins map to which segment of the digits. In case the diagram is not clear as to which pins map to which segments, they are as follows:

  • Pin 10 maps to segment A
  • Pin 9 maps to segment B
  • Pin 1 maps to segment C
  • Pin 4 maps to segment D
  • Pin 3 maps to segment E
  • Pin 6 maps to segment F
  • Pin 5 maps to segment G
  • Pin 2 maps to segment DP
Читать:
Dc dc понижающий как повысить входное напряжение

Important Note: If your component has illustrations that are different to this it’s important to note which two pins are the bit flags and which map to which segment, as you’ll have to make alterations to the code later to comply with them.

Now that we have an understanding of how the component works, we can begin wiring it up to the Arduino!

Start by plugging the LED display module into your breadboard, this is going to have to spread over two boards so that you have room to connect all the pins, as can be seen in the picture below.

When looking at the component from this perspective (that being so that the decimal points are at the bottom) the pins are in the following order:

  • On the bottom side, from left to right: 1, 2, 3, 4, 5
  • On the top side, from left to right: 10, 9, 8, 7, 6

The majority of these pins connect directly to the Arduino itself. However, the two pins mentioned earlier which act as bit flags need to connect through 330 ohm resistors. If you’re not sure how to identify what type of resistor you have, I’d recommend bookmarking This Page. To save you the time in reading though, the resistor you need is the one with two orange bands and a black band, in that specific order, as can be seen below (or if you only have resistors with two orange bands and a brown band this will also suffice).

Once the resistors are connected to pins 7 and 8, place a jumper cable from them to form the following connections:

  • Pin 7 of the component to Arduino pin 10
  • Pin 8 of the component to Arduino pin 11

The rest of the pins as previously mentioned connect without the need of a resistor, and should be done so as follows:

  • Pin 10 of the component to Arduino pin 2
  • Pin 9 of the component to Arduino pin 3
  • Pin 1 of the component to Arduino pin 4
  • Pin 4 of the component to Arduino pin 5
  • Pin 3 of the component to Arduino pin 6
  • Pin 6 of the component to Arduino pin 7
  • Pin 5 of the component to Arduino pin 8
  • Pin 2 of the component to Arduino pin 9

An illustration and schematic of this wiring can be found below.

Writing the code

In order to make this easier for those who may not have the strongest of programming abilities, I have written a reusable library which will handle near all of the code side of things for you! To use this library first download it by clicking this link: LEDDisplay Arduino Library or by grabbing the latest source code from This GitHub Repository.

Once you have downloaded the library, extract the LEDDisplay directory into the libraries directory inside your Arduino directory, as can be seen below. Or if you’re using OS X, follow this guide: http://blog.arduino.cc/2009/08/15/new-library-folder-and-compilation-process-in-arduino-0017/

Now that the library is installed, start up the Arduino IDE and copy and paste the following code into it:

As you can see, this is a very simple example which will show the number “24″ on the LED display (yes, I’ve chosen that number because I love the TV series, 24!); but to explain what it’s doing anyway:

  • We start by importing the LEDDisplay library into our sketch by using the #import syntax
  • We create an LEDDisplay object that we can then use throughout the sketch
  • We instantiate the object inside the setup method (more about this further down)
  • We call the displayNumber method of the object to show the number 2 on digit 1, and the number 4 on digit 0 (we count the digits from right to left, so the right most one is zero)

The most daunting part of this code is the code in the setup method which creates the LEDDisplay object. Remember I mentioned earlier about taking note of the pins you connect? Well this is why!

The digitFlagPins array that we find on the first line of the setup method is creating an array of integers with the values 10 and 11. These are the Arduino pin numbers that we have connected to the pins that act as our digit bit flags (the ones that we put through the resistors). It is important that you specify these in the correct order (that being the right most digit be first, so in this case pin 11, as that is connected to the pin that controls the right most digit), otherwise the library will not be able to display the numbers on the correct digits!

The second array we see being initialised is the segmentPins array. This is an array of all the Arduino pin numbers which are connected to pins on the LED display which control the segments; so in this case these are the ones that we connected directly from the breadboard to the Arduino. These also have to be put in the correct order as the library assumes that the pins are in the following order: A, B, C, D, E, F, G, DP.

The third variable we assign to is the decimalPointPin integer, this is simply the Arduino pin number that the decimal point segment is connected to; so in this case pin 9.

After creating these variables, we then pass them in to the LEDDisplay constructor, as well as an additional integer at the beginning, that being the number two. This number indicates to the LEDDisplay object how many digits you have on your display. A maximum of four digits are supported by this library, however as we are using a dual digit display, we simply just pass the number two.

Now, upload this sketch to your Arduino and you should see the number 24 on the display!

To see this in a slightly more dynamic example, we can adapt the example to make the LED display act as a counter (obviously only up to the number 99). To give this a try, copy and paste the following code and upload it to your Arduino:

Once uploaded and running, you should see something to the effect demonstrated in the video below:

In addition to the displayNumber method, you can also call the following methods on the LEDDisplay object:

Как подключить семисегментный индикатор к Arduino

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

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

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

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

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

Семисегментный индикатор — это просто набор обычных светодиодов в одном корпусе. Просто они выложены восьмёркой и имеют форму палочки-сегмента. Можно подключить его напрямую к 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’у драйверов; разводим питание; включаем — работает!

Похожие публикации