Ежегодно на вывесках магазинов, улицах и переходах устанавливаются панели, отражающие рекламные записи в виде текста. Огоньки на панелях зажигаются по-разному: строки передвигаются вверх, вниз, в правую и левую сторону. Также актуальны светящиеся картинки.
Такие аксессуары прохожие не оставят без внимания. Многие начинающие электронщики интересуется тем, как устроена эта конструкция и что требуется для создания. Изделие легко изготавливается в домашних условиях. Статья познакомит начинающего любителя электронных устройств с принципами работы бегущей строки, где Ардуино используется в качестве основного компонента.
Что такое бегущая строка на Ардуино
Бегущая строка на Ардуино – электронное изделие, в основе которого лежит микроконтроллер Arduino. Рабочая область прибора покрыта светодиодами. Основное предназначение – транслирование изображения и текстовых сообщений. Данные могут быть статичными и анимированными.
Световые строки создаются с помощью модулей. Размер по умолчанию – 32х16 см. Область, предназначенная под рабочую поверхность, напрямую зависит отношению количеству модулей и их размеру.
Кроме того, в строку вставлен контроллер, роль которого – управление картинкой. Устройство работает в автономном режиме. Чтобы изменить текстовое послание или изображение, бегущую строку подключают к компьютеру. Профиль из алюминия держит всю конструкцию.
По цветовой гамме различают 2 вида бегущей строки на Arduino:
- Монохромный или одноцветный.
- Разные оттенки – обычно 8 цветов, здесь также включен черный фон.
Больше всего люди предпочитают красный оттенок, так как он наиболее насыщенный. Также не менее популярен белый цвет. Если белые огоньки ярко пылают на черном фоне, текст выглядит более аккуратно.
Все данные пользователь помещает в память микроконтроллера. Для обновления картинки или строки существует несколько методов:
- Базовый – через USB-кабель. Микропроцессор Ардуино подключается через USB-порт к компьютерному устройству. С компьютера разработчик переносит свой программный код в память микропроцессора.
- По сети через Лан-кабель. Способ предусмотрен для тех пользователей, которые постоянно обновляют электронную строку. Техника подключения аналогична предыдущему пункту.
По типу различают бегущие доски, сделанные для интерьера и применения на улице. Уличные часто защищены специальным козырьком, чтобы на светодиоды не попала дождевая вода.
Необходимый набор инструментов и материалов
Ниже приведена таблица с подробным описанием инструментов, которые понадобятся для конструирования бегущих огней на Ардуино.
Инструмент | Особенности |
---|---|
Arduino Nano | Нано – модель, которая по размерам самая миниатюрная среди линейки Ардуино. По своему характеру данная платформа напоминает своего сородича – Ардуино Уно. Начинающие электронщики, в основном, строят компактные модели своих устройств, поэтому в этом пригодится компактная Нано. Гнездо под внешнее питание спрятано внутри. Работа производится через USB-порты. Остальные характеристики схожи с моделью Уно.
Технические параметры:
Существует 2 способа для питания платформы:
|
Лента из светодиодов | Лента из светодиодов подключается параллельным способом, по несколько отрезков. Каждый отрезок должен быть не больше 5 м в длину. Кроме того, в магазинах она продается именно по таким меркам. Если же потребуется создать строку, на которую нужно 10 или даже 15 метров, придется повозиться. Нельзя ни при каких условиях соединять первый кусок с началом второго. Считается, что 5 метров – длина, показывающая расчет, при котором удерживаются дорожки ленты. Если нагрузить ленту, то произойдет поломка, и сделанное изделие испортится.
Да и со стороны ухоженности текстовая дорожка будет некрасиво выглядеть из-за неравномерного свечения: в начале дорожке свет будет ярким, а в конце потускнеет. |
Провода | Набор проводов для соединения компонентов |
Плата для управления процессом | На управляющую платформу помещается микропроцессор и остальные части для готового изделия (например Тройка Шилд). |
Чертежи и схемы
Чтобы управлять светодиодной лентой, в первую очередь, понадобится дать напряжение в аноды портов с номерами от 2-х до 9. После этого напряжение подается прямиком в катоды. Для этого понадобится блок транзисторов.
В проект включено использование биполярных транзисторов 2N2904. Если подцепить все транзисторы к своему контакту на матричной платформе, понадобится всего 10 штук транзисторов. При конструировании электронных устройств такой вид транзисторов наиболее популярен и подходит по всем критериям и условиям разработки бегущей строки на Ардуино. В созданную систему будет подаваться небольшое напряжение.
Объясним то, как происходит загорание огоньков на ленте. Выбирается 1 контакт, который отвечает за подачу сигнала в анод светодиода. На базу эмиттера, одновременно с предыдущим действием, подается сигнал с выходного отверстия на счетчике. Поэтому от коллектора транзистора напряжение переходит прямиком в катоды светодиодов.
На матричной поверхности аноды на соседних строчках переплетаются с катодами соседних столбцов. Поэтому пользователь может наблюдать явление, когда одновременно загорается вся бегущая строка.
Есть еще один вариант исполнения:
Схема будет выглядеть так:
Программная часть
Для первого варианта исполнения код может выглядеть так:
void setup(){ int i; for(i = 2; i < 10; i++) pinMode(i,OUTPUT); pinMode(clock,OUTPUT); pinMode(reset,OUTPUT); digitalWrite(reset,HIGH); delayMicroseconds(5); digitalWrite(reset,LOW); } void display_symbol(int loops) { for(x=0;x<numsymbols-1;x++){ for (int z=0;z<8;z++){ for(int t=0;t<loops;t++){ for(y=9;y>-1;y--){ byte temp = symbols[x][y]; byte temp_2=symbols[x+1][y]; byte val = (temp<<z)+(temp_2>>7-z); for(int i =0; i<8; i++) digitalWrite(i+2, (val>>i)&B00000001); delayMicroseconds(800); digitalWrite(clock,HIGH); delayMicroseconds(5); digitalWrite(clock,LOW); } } } } }
Программный код для осуществления проекта “бегущей строки на ардуино” во втором случае такой:
int RGB1 =12; int RGB2 =11; int RGB3 =10; int RGB4 =9; int RGB5 =8; int RGB6 =7; int RGB7 =6; int RGB8 =5; int RGB9 =4; int RGB10 =3; int key1 =A3; int key2 =A2; int key3 =A1; int key4 =A0; void setup() { Serial.begin(9600); pinMode(RGB1, OUTPUT); pinMode(RGB2, OUTPUT); pinMode(RGB3, OUTPUT); pinMode(RGB4, OUTPUT); pinMode(RGB5, OUTPUT); pinMode(RGB6, OUTPUT); pinMode(RGB7, OUTPUT); pinMode(RGB8, OUTPUT); pinMode(RGB9, OUTPUT); pinMode(RGB10, OUTPUT); pinMode(key1, INPUT_PULLUP); pinMode(key2, INPUT_PULLUP); pinMode(key3, INPUT_PULLUP); pinMode(key4, INPUT_PULLUP); } void loop() { int key1Value = analogRead(key1); int key2Value = analogRead(key2); int key3Value = analogRead(key3); int key4Value = analogRead(key4); if (key1Value <= 100) { delay(30); if (key1Value <= 100) { digitalWrite(RGB5,HIGH); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB4, HIGH); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB2,HIGH); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB1, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } } if (key2Value <= 100) { digitalWrite(RGB1,HIGH); digitalWrite(RGB6, HIGH); delay(40); digitalWrite(RGB2, HIGH); digitalWrite(RGB7,HIGH); delay(40); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(40); digitalWrite(RGB4,HIGH); digitalWrite(RGB9, HIGH); delay(40); digitalWrite(RGB5, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key3Value <= 100) { digitalWrite(RGB1,HIGH); delay(90); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(90); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(90); digitalWrite(RGB3, LOW); digitalWrite(RGB4, HIGH); delay(90); digitalWrite(RGB4, LOW); digitalWrite(RGB5,HIGH); delay(90); digitalWrite(RGB5, LOW); digitalWrite(RGB6,HIGH); delay(90); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(90); digitalWrite(RGB7, LOW); digitalWrite(RGB8,HIGH); delay(90); digitalWrite(RGB8, LOW); digitalWrite(RGB9,HIGH); delay(90); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key4Value <= 100) { digitalWrite(RGB1,HIGH); delay(50); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(50); digitalWrite(RGB10, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB1, HIGH); delay(50); digitalWrite(RGB1, LOW); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } }
Пошаговая инструкция по созданию устройства
Алгоритм конструирования Arduino бегущая строка:
- Загружаем код программы, описанной выше, в микропроцессор с помощью USB-кабеля и компьютера.
- Помещаем Ардуино Нано и светодиодную ленту на платформу управления.
- Соединяем все детали между собой.
- Включаем питание.
В итоговом видео можно понять как работает второй вариант схемы:
Управление со смартфона
Светодиодными огоньками можно управлять со смартфона. Для осуществления задуманного понадобятся Блютуз и специальный модуль – HC-06, предназначенный для Ардуино. Но это уже мы сделаем в следующих уроках. Всем хороших проектов.