Самодельный 7-сегментный индикатор. Подключение к arduino

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

Все началось с того, что мне понадобился большой 7-сегментный индикатор, для вывода цифр… Была идея, оборудовать гараж ультразвуковыми дальномерами, сделать аналог парктроника, только расстояние до препятствия(в данном случае автомобиль) должно было выводиться на стене. До дальней стены, на которую должно было крепиться информационное табло, примерно, метров 5, поэтому выводить циферки планировалось на больших светодиодных индикаторах. Сам проект «гаражного парктроника» пришлось закрыть из-за недостатка финансирования и судебных разбирательств со стороны крупных мафиозных кланов, которые в тайне, от всего мира, владеют империей по продажам парктроников. Шутка. Проекту не суждено сбыться, поскольку гараж оказался меньше, чем я рассчитывал и пригоден только для хранения велосипедов и другого мусора, который обычно и хранят в гаражах. Машина просто-напросто не влезла по длине. Но нет повода для печали, ведь уже есть некоторые наработки – они пригодятся в будущих девайсах. Про одну такую наработку, я и хочу сегодня рассказать. Это самодельный 7-сегментный индикатор, который в несколько раз больше, покупных аналогов.

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

Идея 7-сегментного индикатора очень простая – для каждого сегмента можно приспособить несколько светодиодов, в данном случае я использовал по три штуки на сегмент. Если индикатор нужен крупнее, то можно взять большее количество светодиодов. Светодиоды каждого сегмента собираются в параллельно подключенные звенья, что позволяет управлять каждым сегментом, как будто это один светодиод. А далее, уже дело техники, можно управлять индикатором на прямую с помощью ардуино или использовать сдвиговые регистры, для экономии пинов и удобства программирования. Ниже приведена схема, по которой я собрал экспериментальный индикатор. А так же, если кто-нибудь захочет повторить, прикладываю исходник схемы – скачать. Открыть схему можно в программе Sprint Layout.
схема 7-сегментного индикатора
Чтобы индикатор получился более эстетически красивым, я вытравил плату и припаял светодиоды с резисторами на получившуюся заготовку. А так же напечатал корпус на 3D-принтере. Правда, с печатью немного «накосячил», поторопившись, и корпус получился не самого лучшего качества – сильно видны слои. Но, в качестве прототипа сойдет. Если делать индикатор для готового устройства, то корпус можно сделать более удачным, тогда и рассеивание света от сегментов будет на много меньше. Ниже прикреплена фотография собранного и подключенного индикатора.
самодельный 7-сегментный индикатор
корпус для самодельного 7-сегментного индикатора

Подключение 7-сегментного индикатора к arduino

Как уже писал выше, индикатор можно подключать как напрямую к ардуино, так и с помощью сдвигового регистра. Я решил использовать сдвиговый регистр 74HC595, он позволит сэкономить пины arduino. Вместо семи, будет задействовано только три. Ниже приведена схема подключения индикатора, сдвигового регистра и ардуино.
Подключение 7-сегментного индикатора к arduino + 74HC595

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

Остается только написать прошивку, для управления индикатором. Тут все предельно просто – создаем байтовый массив, для всех необходимых цифр, где каждый бит задает положение сегмента: включен или выключен. И для примера, запустим цикл, в котором каждую секунду по очереди будет отображаться нужная цифра от 0 до 9.

//Пин подключен к SH_CP входу 74HC595
int clockPin = 13;
//Пин подключен к ST_CP входу 74HC595
int latchPin = 12;
//Пин подключен к DS входу 74HC595
int dataPin = 11;

// массив цифр
byte numbers_array[10] = {    
    B00111111, B00110000, B01101101, B01111001, // 0 1 2 3
    B01110010, B01011011, B01011111, B00110001, // 4 5 6 7
    B01111111, B01111011 // 8 9
};

// функция для включения нужной цифры
void showNumber(int number){
  // зажигаем нужные сегменты 
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, numbers_array[number]); 
  digitalWrite(latchPin, HIGH);
}

void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
  
void loop() {
  // по очереди зажигаем цифры от 0 до 9
  for(int i=0; i<10; i++){
    showNumber(i);
    delay(1000);
  }  
}
 

Послесловие

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

Рассказать друзьям:


Оценить:
(1 оценок, среднее: 5,00 из 5)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code