Бегущий огонь на ардуино заполнение линейки

«Бегущий огонёк» средствами Arduino UNO.

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

Также нам потребуется программное обеспечение, скачанное с официального сайта разработчика — www.arduino.cc
Запускаем установщик, следуем всем инструкциям установки и у нас на десктопе появляется ярлык среды разработки программ для Arduino.
Но прежде чем писать программный код, нужно собрать схему.
Наша программа записывается в микроконтроллер на плате через USB кабель.

На плате есть 14 цифровых контактов для ввода/вывода, к которым мы можем присоединить проводами диоды.

Диоды помещаем на макетную плату. К аноду каждого из них присоединяем один конец резистора на 220 Ом. К другому концу резистора присоединяем проводок, который втыкается в один из портов ввода-вывода платы. Мы воткнули во второй.

Все катоды выводим на один провод, который подключаем к контакту платы GND — земля.

Далее запускаем среду разработки и приступаем к написанию кода программы.

По-умолчанию у нас в программе есть 2 функции:

void setup()
<
>

В ней задаются начальные параметры и настройки.

void loop()
<
>

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

Для начала напишем простую программу, мигающую одной лампочкой.

/*Программа для схемы с одним мигающим диодом*/
//целочисленная константа, которой присваивается значение 2го контакта
const int LED = 2;

void setup() <
//2 порт задаём как вывод, т.е он подаёт напряжение в схему
pinMode(LED, OUTPUT);
//диод в выключенном состоянии LOW = 0 В (вольт)
digitalWrite(LED, LOW);
>

void loop() <
// включаем диод HIGH = 5 В (вольт)
digitalWrite(LED, HIGH);
// задержка на 100 мс (миллисекунд)
delay(100);
// выключаем диод
digitalWrite(LED, LOW);
// задержка
delay(100);
>

Подключаем плату Arduino к компьютеру через USB кабель. Если это первое подключение — ждем, когда установятся драйвера.

Затем нужно указать в разделе «Инструменты» тип платы: Arduino — UNO.

А также, порт, через который будут передаваться данные.

После выбора порта жмём кнопочку со стрелкой «Загрузка» и наша программа загружается в микроконтроллер.

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

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

/*Программа для схемы с 7ю мигающии диодами. Сначала все последовательно включаются, потом последовательно выключаются*/
/*целочисленная переменная, которой присваивается начальное значение 2 контакта*/
int LED = 2;

void setup() <
/*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/
for(int i = 2; i /*2 цикла, перебирают порты от 2 до 8, сначала попеременно включают диоды, с задержкой 100 мс, затем попеременно выключают*/
for(int i = 2; i /*Программа для схемы с 7ю мигающии диодами, в которой один диод загорается, а предыдущий гаснет*/
/*целочисленная переменная, которой присваивается начальное значение 2 контакта*/
int LED = 2;

void setup() <
/*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/
for(int i = 2; i /*цикл, перебирает порты от 2 до 8*/
for(int i = 2; i //включаем очередной диод
LED = i;
digitalWrite(LED, HIGH);
/*если включаем 2 порт, то отключать нужно 8й, в ином случае предыдущий*/
if(i == 2)
LED = 8;
else
LED —;
digitalWrite(LED, LOW);
//задержка 100 мс
delay(100);
>
delay(100);
>

А можно сделать и реальную «змейку» из нескольких огоньков, например 3, добавив функций в код.

/*Программа для схемы с 7ю мигающии диодами, в которой за раз светятся только 3 диода, и этот огонёк пробегает змейкой по всем 7ми*/
/*целочисленная переменная, которой присваивается начальное значение 2 контакта*/
int LED = 2;
//длина «змейки» — 3 диода светятся за раз
int snake_length = 3;

void setup() <
/*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/
for(int i = 2; i /*перебираем в цикле порты от 2 до 8 и передаём функции snake номера диодов, которые нужно зажечь: текущий по циклу и 2 перед ним*/
for(int i = 2; i //задержка 500 мс.
delay(500);
>
>

int snake_check(int param)
<
if(param 8)
return (2 + (param — 8 — 1));
else
return param;
>

void snake(int init, int finite)
<
/*гасим предыдущий диод, если передаваемый номер меньше 2 или больше 8, его нужно изменить в функции snake_check*/
LED = snake_check(init-1);
digitalWrite(LED, LOW);

for(int i = init; i /*включаем нужные диоды, проверяя номер порта в функции snake_check*/
LED = snake_check(i);
digitalWrite(LED, HIGH);
>
>

А еще можно сделать увеличивающуюся в размере змейку.

/*Программа для схемы с 7ю мигающии диодами, в которой огонёк пробегает змейкой по всем 7ми, но длина этого огонька постепенно увеличивается*/
/*целочисленная переменная, которой присваивается начальное значение 2 контакта*/
int LED = 2;
//длина «змейки» — сколько диодов светятся за раз
int snake_length = 1;
//максимальная длина «змейки»
int max_snake_length = 6;

void setup() <
/*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/
for(int i = 2; i /*перебираем в цикле порты от 2 до 8 и передаём функции snake номера диодов, которые нужно зажечь: текущий по циклу и 2 перед ним*/
for(int i = 2; i //задержка 500 мс.
delay(500);
>
/*после того, как огонёк пробежал по всем диодам, его длина увеличивается на 1, пока не достигнет заданого максимального значения*/
snake_length++;
if(snake_length >= max_snake_length)
snake_length = 1;
>

int snake_check(int param)
<
if(param 8)
return (2 + (param — 8 — 1));
else
return param;
>

void snake(int init, int finite)
<
/*гасим предыдущий диод, если передаваемый номер меньше 2 или больше 8, его нужно изменить в функции snake_check*/
LED = snake_check(init-1);
digitalWrite(LED, LOW);

for(int i = init; i /*включаем нужные диоды, проверяя номер порта в функции snake_check*/
LED = snake_check(i);
digitalWrite(LED, HIGH);
>
>

Источник

Урок 9 — Бегущие огни на Arduino UNO

Продолжаем уроки в которых мы используем Arduino, резисторы и светодиоды. Мы уже делали Светофор, полицейский стробоскоп, отправляли сигнал sos и пр.
Сегодня мы будем делать бегущие огни. Бегущие огни уже были в другом блоке уроков на Arduino: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни
При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.

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

  • Arduino UNO или Arduino Nano
  • Плата макетная беспаечная
  • Резисторы 220 ОМ
  • Соединительные провода папа-папа
  • Светодиоды 3 или 5 мм.

Подключим наши 10 светодиоды вот по такой схеме.

В живую будет выгладить так.

Вы наверное скажите что схема не правильная и к пинам 0 и1 подключать не желательно. Вот именно не желательно, но можно если не использовать Serial port. А для облегчения кода нам будет очень удобно использовать данные пины. При загрузки кода в Ардуину светодиоды подключенные к 0 и 1 выходам будут мигать. Также при работе нашего скетча. Вместе с данными светодиодами на плате Arduino UNO буду включаться светодиода RX и TX. Но как я говорил в данном случаи ни чего старшного в этом нет.

Описывать все режимы не буду. В видео немного поясняю. Немного корява и может не совсем понятно. Но я думаю по комментариям к коду можно разобраться.

Первый пример бегущих огней на Arduino, последовательное включение одного светодиода с 1 по 10. По пинам на ардуино будет с 0 по 9. Это нужно учитывать при написании кода.

Немного изменим данный пример и сделаем 2 цикла. Получим включение всех светодиодов и выключение в обратном направлении.

Объединив код первого и второго примера получим включение одного светодиода в прямом и обратном направлении. Во втором цикли ставим j-2, потому что у нас пины начинаются с 0, а число светодиодов с 1 до 10. Также чтобы 10 светодиод не включался 2 раза вычитаем еще 1.

Сходящиеся огни. Тут все по аналогии. Добавим переменную в которой будим рассчитывать половину светодиодов. Поэтому количество светодиодов должно быть четным. Либо что-то делать с центральным светодиодом. Можно оставить его постоянно включенным или наоборот всегда включенным.

И по аналогии делаем расходящиеся огни.

Как видно без использования сдвигового регистра код получается намного проще и меньше строчек. Один минус количество ограничено. Максимум 20 светодиодов можно подключить к Arduino Uno и 22 к Arduino NANO. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Понравилась статья? Поделитесь ею с друзьями:

Источник

Arduino-lab.ru

Электронная лаборатория

Бегущий огонёк на Arduino: скетч с массивом

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

Комплектующие

Все необходимые комплектующие и даже чуть больше есть в минимальном стартовом наборе Arduino — https://bit.ly/2QgTPvF​

  1. Arduino Uno — https://bit.ly/2P3rCI5​
  2. беспаечная макетная плата — https://bit.ly/3goWOwQ​
  3. светодиоды — https://bit.ly/3swTa6t​
  4. ограничивающий резистор — 220 Ом или аналогичный — https://bit.ly/3swTpyp​
  5. провода папа-папа, мама-мама, папа-мама 10-30 см — https://bit.ly/3n3z0jl

Схема подключения

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

Скетч

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

Видео

Бегущий огонёк на Arduino: скетч с массивом : 1 комментарий

Тут такой вопрос назрел . Мы прогнали в одну сторону . for (int i=countLeds-1; i>=0; i—) — развернули в обратную сторону . А как поделить по палам ?

Источник

Бегущие под музыку огни

Задача

  • Сделать реакцию ленты на звук как в вирусном видео (см. внизу страницы)

Базовые уроки

Подключение

  • Лента подключается к внешнему питанию и пину D2
  • В данной схеме Arduino питается от внешнего источника, подключение к USB необязательно
  • Микрофон к питанию и аналоговому пину (А0)
  • Пин Gain микрофона задаёт усиление звука (значения также написаны на модуле):
    • Никуда не подключен (float) – 60dB (максимум)
    • GND – 50dB
    • VCC – 40dB

Библиотеки

Программа

Примечание: можно настроить нижний порог шумов, добавив строчку sound.setTrsh(величина) в блок setup() . По умолчанию порог задан 40, его можно увеличить, чтобы снизить чувствительность системы к шумам.

Вместо яркости-от-громкости будем варьировать все три параметра в пространстве HSV: цвет, насыщенность и яркость. Чем выше громкость – тем больше цвет (например от красного к жёлтому), чем выше громкость – тем меньше насыщенность (от цвета к белому), и наконец чем выше громкость, тем ярче. В FastLED это можно организовать так:

где START_HUE задаёт стартовый цвет (0.. 255), мы его смещаем на громкость / 5 . Насыщенность берём как 255 — громкость / 2 , и яркость по громкости как раньше. Полный код примера:

Более сложный вариант, позволяет выводить на ленту неограниченной длины. Позиции частиц хранятся в массиве, расчёт и отрисовка “хвостов” происходит при каждом выводе. Реакция только на “резкие звуки”.

Видео

Полезный пример?

Похожие примеры
53 Комментария

Гайвер мега крут.

Было бы круто в этом проекте добавить функцию изменения цвета от частоты звука, т.е. например чтобы басс более темным синим цветом воспроизводился, а вокал более нежным теплым цветом. Или еще круче, чтобы можно было самому настраивать выборку по цветам с шагом допустим в 10Гц от 5 до 100 и увеличивая шаг с ростом частоты, потому что разницу в 1000 и 1010 не услышать практически, а вот на низах эта разница ощутима)
В общем есть в какую сторону улучшить проект))

Тут все упирается в скорость обработки. Не потянет дуинка нано.

Разве что внешние фильтры по частотам сделать.

Чего это, запросто потянет

Всё отлично тянет, подключил по схеме, зашил ардуину и всё отлично работает)

Тут сложнее уже. Преобразование Фурье и т.д.

Здарова, ребята! По моему на схеме не хватает микрофонного модуля?

Выход микрофонного модуля на A0. Ну и питание соответственно

Спасибо, сейчас добавлю! Как то упустил этот момент

Мне кажется что оптимальнее было бы использовать функцию на подобии memmove для сдвига массива в пямяти, либо вообще на прямую менять указатель на первый элемент массива, хоть тут нужно подумать не будет ли проблем с дырами в памяти, поэтому лучше что-то на подобии memmove

Добавил внешнее опорное напряжение через переменный резистор, а то засвечивало ленту и скорость движения уменьшил до 1 для 60 светодиодов, нормально получилось.
А как сделать из центра в разные стороны ?

Крутая штука, моим мелких должна понравится! Только разбираться ещё, чайник я!)

Не понял, как такую длинную ленту (4-5 метров) Гайвер питает с одного конца без проблем с просадками?
В статье про адресную (https://alexgyver.ru/ws2812_guide) ленту читал, что нужно дублировать питание примерно каждый метр.
Или для качественных лент такой проблемы нет? Например если купить в Gigant4?

Alex, добрый день. повторил проект, выглядит ну очень красиво, будет очередным режимом для встроенной в стену ленты, но из-за непонимания алгоритма фильтрации шумов и громкости столкнулся с проблемой: если на протяжении нескольких секунд не издавать никаких звуков, по ленте начинает бесперывно пробегать огоньки в качестве шума, что бы они пропали приходится издать какой то громкий звук. каким образом можно установить нижний порог? повозился с библиотекой VolAnalyzer, потыкал переменные, но так ничего и не удалось

Проблема решена xD. как и предполагалось, всё легко и просто…
Нужно всего лишь поднять значение функции setTrsh() и все шумы пропадают) Спасибо за такой проект.

привет, покаж образец как ты прописал в Скетче (sound.setTrsh) у меня такая же проблема бегают огоньки))))

прописал сам уже ,спс)))

Подскажите а можно ли запитать и ленту и ардуинку одним питанием как в уроке “Игрушка для кота”?

конечно! Поправил схему

Немного поигрался с настройками в этой строчке ( CRGB color = CHSV(START_HUE + vol / -2, 255 – vol / 20, vol) с минусом прикольно и интересный эффект у меня получился а также увеличил чувствительность микрофона до 80 и так как мне нравиться цвет зеленый то нашел его в этой строчке #define START_HUE 80 (-+10)

У меня версии с микролед работают всего на нескольких светодиодах в начале, правда звук брал просто с колонки… А первые два варианта работают отлично, после вывода добавляю небольшой delay

Вот респект, все работает как часики то что надо под потолком протянул ленту
режим эквалайзера

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

использовал
MicroLED + асинхронный АЦП

для наглядности короткое видео на яндекс

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

Добрый день! При прошивки в ардуино пишет ошибку.

подскажите, как дописать код, что бы в паузе более X сек включался режим автоматического какого-то бегущего эффекта. а то без музыки грустно )

или вообще сделать беззвуковой вариант разного рода световых эффектов для улицы.

Уже было, что Гайвер крут?)))

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

Для использования поточной версии скетча: как выглядит подключение нескольких светодиодных лент, например, 3 по 5 м?

Собрал. При заливке скетча на последних версиях Arduino IDE программа ругалась на библиотеки красным цветом (матом) и не грузилась. Только на версии 1.8.5 вроде загрузилась и ругалась белым цветом. Ленту разместил на стене в виде елки. Очень интересный эффект получается- огоньки хаотично плавают в контуре елки, круто. Не знаю как здесь можно прикрепить видео. Спасибо, Александр.

может кто помочь с пошаговым обьяснением как шить ардуино под эти проэкты? А то всё купил а прошить не могу 🙁

читать первый блок инструкций к набору

Вот и у меня проблема, эти проекты не хочет шить. После проверки пишет ошибку и всё. Другие пробовал шьёт без проблем.
Кто подскажет где косяк?
С уважением Эдик.

И как скачать только одну библиотеку( бегущий огонёк под музыку)?

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: “Arduino Uno”

sketch_jan05a:13:10: fatal error: VolAnalyzer.h: No such file or directory

Nicht benutzt: C:\Users\flaum\Documents\Arduino\libraries\FastLED-master

VolAnalyzer.h: No such file or directory

Я тоже не могу программировать! всегда эта ошибка.

Разобрался, нехваткой библиотек!

Сдвиг массива стоит сделать линейным:
for (int i = LEDS_AM – 1; i >= P_SPEED; –i) <
leds[i] = leds[i – P_SPEED];
>

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

Стандартная функция memmove
memmove(&leds[P_SPEED], &leds[0], sizeof(CRGB) * (LEDS_AM – P_SPEED));
по факту работает примерно вдвое медленнее приведенного цикла.

Подключил… Закачал скетч на MicroLed…
У меня WS2815 на 12В, так, что подключал 5В на микрофон отдельно от макетной платки…
Но при подключении лента просто переливается и на микрофон не реагирует…
Но когда подключил GND от микрофона не к “-” 5В, а к GND на Arduino nano, то микрофон не реагирует, а когда рукой трогаешь провод Gain – то дорожка бежит.
Может не так подключаю, подскажите кто может…
PS: “+” 12В подключаю к VIN на Arduino nano

Алекс подскажи пжл, что б на 4 ленты одновременно работало, как надо сделать? А то 2 без проблем, подключаю ещё 2 и горят только первые пару диодов на всех лентах и на этом всё 🙁

Собрал проект. Прошилась только MicroLED. Подключил так называемые пиксельные диоды ( те же адресные только в колпачках). Из 150 в работе немного больше 100 штук и последние просто горят. Как заставить все работать?

Вряд ли ты получишь ответ… В любом случае на самый крайний случай можешь заказать себе SP107E контроллер там около 200 световых программ настраиваемых с телефона. Я сам собрал оба проекта с видео Алекса на Arduino и уже через неделю они приелись 🙁 И я заказал себе новый контроллер и ни капли не пожалел, т.к. Алекс уже собирал блутуз управляемые гирлянды не раз и писал под них разные свето-программы, но увы не в этом проекте, хотя, как по мне он самый жизнеспособный и занимает заслуженное место в видео подборке топ проектов автора.

Подскажите, пожалуйста, что надо сделать, чтобы подключить 12В ленту ? Ардуина 12В проглотит, а микрофон ?

Приветствую! Собрал из gyverkit pro по схеме, загрузил версию прошивки с FastLED, все прекрасно работало! Но после того как загрузил прошивку MicroLED + асинхронный АЦП перестало работать корректно. Теперь даже загружаю первую прошивку “с FastLED” стало работать наоборот т.е. постоянно идут полосы в цвете а при звуке(хлопке и т.д.) диоды затухают, в чем может быть проблема? Я вставил другую ардуинку из набора и прошил первой прошивкой, работала она корректно секунд 20 и после так же изменила реакцию на звуковой сигнал…

в потоковой версии,чем громче тем меньше комет,когда наваливаешь до максимум,то вообще нет. Это можно исправить?

Источник

Adblock
detector