0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Мигание светодиодом на Ардуино

Самый первый проект всегда лучше делать как можно более простым и понятным. Лучше всего сначала просто сообщить миру о том, что программа работает. В других языках программирования это достигается выводом текста на экран фразы «Hello, World» , которая стала по-настоящему культовой. С ее помощью новые программы приветствуют мир уже на протяжении половины столетия.

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

Встроенный светодиод в Ардуино Uno, Nano и Mega

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

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

Вам понадобится: ничего, кроме платы ардуино. Сложность: простой проект.

Что мы узнаем:

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

Вопросы, на которые вы уже должны знать ответы:

Как мигает светодиод

Алгоритм программы очень прост.

  1. Мы должны подать напряжение на светодиод (на тот пин, к которому подсоединен светодиод, в нашем случае, 13).
  2. Затем ждем некоторое время. Например, секунду.
  3. После чего убираем напряжение.
  4. И опять немного ждем, чтобы глаз мог заметить, что света нет.
  5. Начинаем все с первого пункта

На русском все выглядит очень просто. Осталось только перевести на язык, понятный Ардуино. Мы заменяем каждую строчку нашего алгоритма командой.

  1. Включить – команда digitalWrite
  2. Подождать – команда delay
  3. Выключить – команда digitalWrite
  4. Подождать – команда delay

Для того, чтобы записать все эти команды, а потом перевести их в машинопонятный язык и загрузить в микроконтроллер мы используем программу Arduio IDE. В ней мы пишем наш код (или вставляем готовый из примера), в ней же нажмем несколько кнопок для проверки, трансляции и загрузки программы в Ардуино.

Давайте соберем все, что нужно, вместе в одной инструкции.

Пошаговая инструкция

Выполняем действия по шагам – в результате обязательно получим результат.

  1. Берем плату Arduino UNO. Убеждаемся, что на ней есть встроенный светодиод.
  2. Подключаем плату Arduino к компьютеру через USB-кабель. В результате должны загореться лампочки.
  3. Открываем на компьютере программу Arduino IDE (вы уже должны знать, как это делается или прочитайте статьи на нашем сайте по ссылкам выше).
  4. Проверяем, что ардуино подключился: найдите в меню «Инструменты», подменю «Порт». Оно должно быть активным. Нажмите на этот пункт и посмотрите список портов. Один из них должен быть отмечен галочкой. Если этого не произошло, выберите порт с самым большим номером и отметьте его. Если это не помогло – смотрите раздел с описанием типичных проблем чуть ниже.

    Проверка порта Ардуино
  • Открываем меню Файл. В нем находим подменю «Примеры», и в нем подменю Basics. Находим в открывшемся списке меню строчку Blink и нажимаем на нее. Должно открыться отдельное окно Arduino с текстом программы (в самом верху будет серый текст). Открываем пример Blink в Ардуино IDE
  • Найдите в меню кнопку “загрузить скетч” (со стрелочкой) и нажмите ее. Начнется процесс проверки (компиляции) скетча и загрузки в плату.
  • После того, как скетч загружен и в статусном окне внизу появится надпись «Загрузка завершена», можно проверять результат. Посмотрите на плату – вы должны увидеть мигающий огонек. Значит, мы сделали это!
  • Проверьте, что программа работает как надо – замерьте паузы между включением и выключением.
  • Поздравляем! У вас получилось реализовать ваш первый проект на Ардуино. Если все мигает так, как надо. Теперь можем переходить к анализу программы и сбору электронной схемы с отдельным светодиодом. Если же что-то не получилось, давайте разберемся, почему.

    Если что-то пошло не так

    • У вас нет платы контролера Ардуино. Это большая проблема, т.к. без платы освоить адуино практически невозможно. Проблему можно решить, купив контроллер в одном из интернет-магазинов. Другим вариантом может стать один из сервисов, имитирующих работу ардуино. Например, Tinkercad.
    • Плата не находится. Эта проблема может возникнуть, если у вас нет USB драйвера для платы. Посмотрите эту статью с описанием того, что можно сделать. В ряде случаев также помогает отключение антивирусов. Если ничего не помогает, попробуйте поменять плату, а затем и компьютер (подключить ардуино к другому компьютеру). Гораздо меньше проблемы возникает при работе с ардуино в среде Windows.
    • Нет программы. Ситуация практически невероятная, ведь примеры всегда идут вместе с программой Arduino IDE. Вы можете скачать программу у нас на сайте – далее в статье вы найдете ссылку
    • Скетч не загружается. Вы могли выбрать не тот контроллер в списке плат. Убедитесь, что выбран Arduino/Genuino Uno или Nano, если вы работаете с платой Uno и Nano соответственно. В некоторых случаях проблема может быть вызвана использованием устаревшего чипа ATMEGA 168. В этом случае выберите тип платы Nano и в пункте меню “процессор” – версию 168.

    Частота работы микроконтроллера

    Большинство команд микроконтроллеров AVR выполняются в один такт генератора задающей частоты. В качестве которого широко используют встроенную в МК RC-цепочку или подключают к выводам XTAL1 и XTAL2 кварцевый резонатор.

    Например, если МК работает с частотой 1 Гц, то одна команда будет выполняться за одну секунду

    По умолчанию у МК ATmega8 задействован собственный внутренний генератор частоты, а точнее RC-цепочка, которая работает на частоте 1000 000 Гц = 1 МГц. Поэтому время выполнения одной команды равно:

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

    PORTD = 0b000000001; // Подаем питание на 1-й светодиод

    PORTD = 0b000000010; // Подаем питание на 2-й светодиод

    Но на самом деле второй LED загорится с разницей во времени 0,000001 секунды от первого. Наши глаза не могут заметить такой малой разницы во времени. Уже при частоте изображений более 24 Гц (t = 1/24 ≈ 0,042 с) наше зрение формирует из отдельных картинок непрерывный фильм. Поэтому в большинстве случаев мы не различаем 25-й кадр.

    Для того, чтобы оба светодиода засветились с разницей во времени 0,5 секунды необходимо между соответствующими двумя командами ( PORTD = 0b000000001; и PORTD = 0b000000010; ) поместит еще 500 000 однотактных пустых команд, т. е. заставить МК полсекунды не выполнять никаких полезных действий. Или, как говорят, нужно “убить” 500 000 тактов. Если код пишется на Ассемблере, то программисты применяют различных циклы, которые “съедают” определенное число тактов и тем самым получают различные интервалы времени.

    PORTD = 0b000000001; // Подаем питание на 1-й светодиод

    Для получения задержки 0,5 секунды сюда нужно вставить

    500 000 однотактных команд

    PORTD = 0b000000010; // Подаем питание на 2-й

    Cхема цветомузыки на Atmega8

    Рисунок печатной платы — цветомузыка на микроконтроллере Atmega8

    Фото готового устройства — цветомузыка на микроконтроллере Atmega8

    Разъемы на плате:
    J1 — При использовании источника питания с напряжением выше 5 вольт (5-30 вольт). Имеет защиту от неправильной полярности питания. Необходимо использовать только один из разъемов питания в зависимости от вашего источника питания!
    J2 — При использовании источника питания с напряжением =5 вольт (4.5-5.5v), используется к примеру для питания цветомузыки от трех батареек 1.5v. Имеет защиту от неправильной полярности питания.
    J3 — Линейный вход сигнала, источником может быть любое устройство с линейным выходом (mp3 плеер, компьютер, радио и т.п.), возможность использовать как моно так и стерео источники.
    J4 — Разъем для подключения потенциометра (номиналом 10-100 КоМ). Используется в качестве регулировки уровня входящего сигнала. При необходимости заменяется перемычкой.
    J5 — Разъемы для подключения оптосимисторов или мощных транзисторных ключей, для связи цветомузыки с более мощными лампами или светодиодами.
    Для изготовления устройства цветомузыка на микроконтроллере вы можете скачать

    Answer

    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry»s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five http://jquery2dotnet.com/ centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

    Это устройство объединяет в себе цветомузыку (ЦМУ) и светодинамическое устройство (СДУ) на 8 каналов, с множеством световых эффектов. Выходы устройство рассчитаны на подключение достаточно мощной нагрузки. А в архиве лежит вариант схемы на еще бОльшую мощность. Разделение частот по каналам ЦМУ чисто программное и очень простое. Подсчитывается количество импульсов таймера/счетчика за строго определенный промежуток времени и в зависимости от значения этого счетчика включается тот или иной светодиод. Это очень простой алгоритм, но тем не менее, он работает.

    Копки позволяют:
    Выбрать режим — ЦМУ/СДУ. В режиме СДУ даже если есть сигнал на входе работает только основная программа светодинамического устройства. В режиме ЦМУ если нет сигнала то воспроизводиться выбранный эффект СДУ, как фоновый режим.
    Выбрать эффект СДУ. Кнопка циклически переключает все возможные эффекты светодинамического устройства.
    Увеличить и уменьшить скорость. Эти кнопки управляют скоростью эффектов СДУ, на ЦМУ никакого действия не оказывают.

    В качестве цветных прожекторов используются светодиодные матрицы-светильники, допустимая нагрузка на каждый канал порядка 300мА! Схема же которая лежит в архиве позволяет подключить нагрузку, с напряжением 12 вольт и током до 3-х ампер (автомобильные лампы накаливания от поворотников или стопов на 21 Ватт) на один канал.

    Cветомузыка на контроллере atmega8, привлекла внимание своей простотой в изготовлении. При повторении схемы не было необходимости рассчитывать фильтры, настраивать их. Зависимости в громкости почти нет, и самое главное — плавное включение ламп (LED диодов), это было немаловажно, так как простое мигание быстро надоедает.

    Схема светомузыки на микроконтроллере достаточно простая, входной сигнал с обоих каналов смешивается и усиливается операционным усилителем LM358, далее он поступает на контроллер семейства AVR «Atmega8», где програмно делится на каналы.

    Как видно по схеме, светомузыка имеет 6 каналов (по два кананал на три основных (сч, вч, нч), к ним идут ключи на BC639, которые позволяют подключить на каждый канал до 20 ультраярких светодиодов.

    Печатная плата в хорошем качестве (в формате sPlan), находится в архиве. Питанием служит небольшой трансформатор на ток, который зависит от типа используемых светодиодов.

    Вполне допустимо взять отдельные мощные светодиоды или даже целые куски свтодиодных RGB лент. Тогда эффект станет ещё интереснее. Только не забываем увеличивать площадь радиаторов транзисторов выходных ключей, ведь 1 метр светодиодной ленты может потреблять ток до 3А!

    Прошивку для микроконтроллера качаем тут. А фьюз-биты при прошивке показаны на картинке:

    Устройство собранно в небольшом металлическом корпусе от спутникового тюнера. На передней панели кнопка включения сети и контрольные светодиоды, а на задней части корпуса размещены гнёзда для подключения светодиодов, регулятор чувствительности на звук и аудиовходы. Автор статьи: MAXIMUS.

    3 Параллельные процессы без оператора «delay()»

    Вариант, при котором Arduino будет выполнять задачи псевдо-параллельно, предложен разработчиками Ардуино. Суть метода в том, что при каждом повторении цикла loop() мы проверяем, настало ли время мигать светодиодом (выполнять фоновую задачу) или нет. И если настало, то инвертируем состояние светодиода. Это своеобразный вариант обхода оператора delay().

    Существенным недостатком данного метода является то, что участок кода перед блоком управления светодиодом должен выполняться быстрее, чем интервал времени мигания светодиода «ledInterval». В противном случае мигание будет происходить реже, чем нужно, и эффекта параллельного выполнения задач мы не получим. В частности, в нашем скетче длительность изменения звука сирены составляет 200+200+200+200 = 800 мсек, а интервал мигания светодиодом мы задали 200 мсек. Но светодиод будет мигать с периодом 800 мсек, что в 4 раза больше того, что мы задали.

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

    В данном случае нужно было бы для блока управления звуком сирены также проверять, пришло время или нет, а не использовать delay(). Но это бы увеличило количество кода и ухудшило читаемость программы.

    #define и регистры

    Также оператор #define хорош тем, что с помощью него можно задавать имена регистрам. Например, если мы подключаем к порту D светодиоды, то вместо PORTD мы можем записать, например VD:

    #define VD PORTD

    Давайте перепишем программу, применяю директиву #define :

    #define F_CPU 1000000UL

    #define VD PORTD

    VD = 0b000000001; // Включаем 1-й светодиод

    _delay_ms ( MIG ); // Ждем 0,5 секунды

    VD = 0b000000000; // Выключаем 1-й

    _delay_ms ( MIG ); // Ждем 0,5 секунды

    VD = 0b000000010; // Включаем 2-й

    _delay_ms ( MIG ); // Ждем 0,5 секунды

    VD = 0b000000000; // Выключаем 2-й

    _delay_ms ( MIG ); // Ждем 0,5 секунды

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

    Программа и скетч мигающего светодиода

    Давайте теперь рассмотрим программу, которую мы загрузили из примеров и проанализируем.

    Пример программы мигалки Blink

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

    Программа Blink без комментариев

    У нас осталась часть кода и сразу обратите внимание на два блока со словами setup и loop. Это две функции, которые вызываются всегда, когда запускается наш скетч. Блоки ограничены фигурными скобками – все, что внутри них, принадлежит блоку. Более подробно о них написано в статье по ссылке.

    Если вы обратите внимание на блок loop, то именно в нем и сосредоточены наши команды, управляющие светодиодом:

    Функции setup и loop в коде программы Blink

    digitalWrite – это название функции, которая отвечает за подачу напряжения на пин. Подробнее о ней можно прочитать в отдельной статье о digitalWrite.

    LED_BUILDIN – это название внутреннего светодиода. В большинстве плат за этим названием прячется цифра 13. Для плат Uno, Nano можно смело писать 13 вместо LED_BUILDIN.

    HIGH – условное название высокого уровня сигнала. Включает светодиод. Можно заменить цифрой 1.

    LOW – условное обозначение низкого уровня сигнала. Выключает светодиод. Можно заменить цифрой 0.

    delay – функция, которая останавливает выполнение скетча на определенное время. Крайне нежелательно использовать ее в реальных проектах, но в нашем простом примере она отработает замечательно. В скобках мы указываем цифру – это количество микросекунд, которые нужно ждать. 1000 – это 1 секунда. Подробнее можно прочитать в нашем материале о delay() .

    Как только программа дойдет до конца, контроллер перейдет в начало блока loop и будет выполнять все команды заново. И так раз за разом, целую вечность (пока есть свет). Наш светодиод мигает без остановки.

    Проект “Маячок” с мигающим светодиодом

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

    • Плата Arduino Uno или Nano
    • Макетная плата для монтажа без пайки
    • Резистор номиналом 220 Ом
    • Светодиод
    • Провода для соединения

    Сложность: простой проект.

    • Как подключить светодиод к ардуино.
    • Повторим процедуру загрузки скетча в микроконтроллер.

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

    Соедините все элементы согласно следующей схемы для Arduino UNO. Для Arduino Nano светодиод подключается по той же схеме – к пину 13.

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

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

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

    Cхема цветомузыки на Atmega8

    Рисунок печатной платы — цветомузыка на микроконтроллере Atmega8

    Фото готового устройства — цветомузыка на микроконтроллере Atmega8

    Разъемы на плате:
    J1 — При использовании источника питания с напряжением выше 5 вольт (5-30 вольт). Имеет защиту от неправильной полярности питания. Необходимо использовать только один из разъемов питания в зависимости от вашего источника питания!
    J2 — При использовании источника питания с напряжением =5 вольт (4.5-5.5v), используется к примеру для питания цветомузыки от трех батареек 1.5v. Имеет защиту от неправильной полярности питания.
    J3 — Линейный вход сигнала, источником может быть любое устройство с линейным выходом (mp3 плеер, компьютер, радио и т.п.), возможность использовать как моно так и стерео источники.
    J4 — Разъем для подключения потенциометра (номиналом 10-100 КоМ). Используется в качестве регулировки уровня входящего сигнала. При необходимости заменяется перемычкой.
    J5 — Разъемы для подключения оптосимисторов или мощных транзисторных ключей, для связи цветомузыки с более мощными лампами или светодиодами.
    Для изготовления устройства цветомузыка на микроконтроллере вы можете скачать

    Answer

    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry»s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five http://jquery2dotnet.com/ centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

    Это устройство объединяет в себе цветомузыку (ЦМУ) и светодинамическое устройство (СДУ) на 8 каналов, с множеством световых эффектов. Выходы устройство рассчитаны на подключение достаточно мощной нагрузки. А в архиве лежит вариант схемы на еще бОльшую мощность. Разделение частот по каналам ЦМУ чисто программное и очень простое. Подсчитывается количество импульсов таймера/счетчика за строго определенный промежуток времени и в зависимости от значения этого счетчика включается тот или иной светодиод. Это очень простой алгоритм, но тем не менее, он работает.

    Копки позволяют:
    Выбрать режим — ЦМУ/СДУ. В режиме СДУ даже если есть сигнал на входе работает только основная программа светодинамического устройства. В режиме ЦМУ если нет сигнала то воспроизводиться выбранный эффект СДУ, как фоновый режим.
    Выбрать эффект СДУ. Кнопка циклически переключает все возможные эффекты светодинамического устройства.
    Увеличить и уменьшить скорость. Эти кнопки управляют скоростью эффектов СДУ, на ЦМУ никакого действия не оказывают.

    В качестве цветных прожекторов используются светодиодные матрицы-светильники, допустимая нагрузка на каждый канал порядка 300мА! Схема же которая лежит в архиве позволяет подключить нагрузку, с напряжением 12 вольт и током до 3-х ампер (автомобильные лампы накаливания от поворотников или стопов на 21 Ватт) на один канал.

    Cветомузыка на контроллере atmega8, привлекла внимание своей простотой в изготовлении. При повторении схемы не было необходимости рассчитывать фильтры, настраивать их. Зависимости в громкости почти нет, и самое главное — плавное включение ламп (LED диодов), это было немаловажно, так как простое мигание быстро надоедает.

    Схема светомузыки на микроконтроллере достаточно простая, входной сигнал с обоих каналов смешивается и усиливается операционным усилителем LM358, далее он поступает на контроллер семейства AVR «Atmega8», где програмно делится на каналы.

    Как видно по схеме, светомузыка имеет 6 каналов (по два кананал на три основных (сч, вч, нч), к ним идут ключи на BC639, которые позволяют подключить на каждый канал до 20 ультраярких светодиодов.

    Печатная плата в хорошем качестве (в формате sPlan), находится в архиве. Питанием служит небольшой трансформатор на ток, который зависит от типа используемых светодиодов.

    Вполне допустимо взять отдельные мощные светодиоды или даже целые куски свтодиодных RGB лент. Тогда эффект станет ещё интереснее. Только не забываем увеличивать площадь радиаторов транзисторов выходных ключей, ведь 1 метр светодиодной ленты может потреблять ток до 3А!

    Прошивку для микроконтроллера качаем тут. А фьюз-биты при прошивке показаны на картинке:

    Устройство собранно в небольшом металлическом корпусе от спутникового тюнера. На передней панели кнопка включения сети и контрольные светодиоды, а на задней части корпуса размещены гнёзда для подключения светодиодов, регулятор чувствительности на звук и аудиовходы. Автор статьи: MAXIMUS.

    4 Использование библиотеки ArduinoThreadдля создания параллельных потоков

    Чтобы решить поставленную задачу, воспользуемся замечательной библиотекой ArduinoThread, которая позволяет с лёгкостью создавать псевдо-параллельные процессы. Она работает похожим образом, но позволяет не писать код по проверке времени – нужно выполнять задачу в этом цикле или не нужно. Благодаря этому сокращается объём кода и улучшается читаемость скетча. Давайте проверим библиотеку в действии.

    Библиотека ArduinoThread

    Первым делом скачаем с официального сайта архив библиотеки и разархивируем его в директорию libraries/ среды разработки Arduino IDE. Затем переименуем папку ArduinoThread-master в ArduinoThread.

    Схема подключений останется прежней. Изменится лишь код программы.

    В программе мы создаём два потока – ledThread и soundThread, каждый выполняет свою операцию: один мигает светодиодом, второй управляет звуком сирены. В каждой итерации цикла для каждого потока проверяем, пришло ли время его выполнения или нет. Если пришло – он запускается на исполнение с помощью метода run(). Главное – не использовать оператор delay(). В коде даны более подробные пояснения.

    Параллельное выполнение потоков на Arduino

    Загрузим код в память Ардуино, запустим. Теперь всё работает в точности так, как надо!

    Читать еще:  Скачать китайские драйвера для xiaomi mi4 c. Восстановление настроек подключения
    Ссылка на основную публикацию
    Статьи c упоминанием слов:
    Adblock
    detector