Стробоскоп на ардуино для авто
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Стробоскоп на основе Arduino своими руками
Стробоскоп – это инструмент для определения скорости циклического движения (такого как вращение или вибрация), при котором движение кажется замедленным или остановленным: например, вращающийся диск с отверстиями по краю, через которые просматривается объект, или устройство, которое использует импульсную лампу для периодического освещения движущегося объекта.
Стробоскоп можно сделать своими руками с помощью подручных средств, компонентов из местного магазина электроники и Arduino, о чем и будет рассказано в данном проекте.
Представленный стробоскоп считается серьезным инструментом, потому что он не предназначен для развлечения или тусовок в ночных клубах. Скорее, это точный и универсальный инструмент, который можно использовать для измерения скорости вращения двигателя или для анализа периодических движений, таких как движение вибрирующей струны. При желании его можно подключить к электронной вспышке, чтобы разбирать и фотографировать быстрые движения. Более того, его можно синхронизировать по внешнему сигналу, чтобы преобразовать его в индикатор времени, который можно использовать для установки времени зажигания двигателя старого автомобиля.
Он разработан на базе Arduino Nano. Вспышки производятся обычным фонариком с 9 светодиодами, батарея которого 4,5 В заменена двумя проводами, подключенными к цепи стробоскопа. Период и продолжительность вспышки можно установить с помощью четырех кнопок. Их значения отображаются на стандартном жидкокристаллическом дисплее размером 16×2 символа. Они варьируются от 0,1 мс до 999,9 мс с разрешением 0,1 мс.
Кнопки увеличивают или уменьшают период или продолжительность мигания со скоростью, увеличивающейся со временем, в течение которого была нажата кнопка. Эта скорость подчиняется закону, который можно легко изменить в коде. ЖК-дисплей, используемый для отображения периода и продолжительности, совместим с библиотекой liquidCrystal и подключается так же, как в примерах из этой библиотеки, за исключением подсветки, которая регулируется потенциометром.
Стробоскоп может управлять дополнительной электронной вспышкой, кратковременно закорачивая центральный контакт с землей в каждый период времени. Эту вспышку можно использовать как альтернативу, так и одновременно со светодиодным фонариком. Синхронизация стробоскопа достигается за счет сокращения цифрового входа на землю. Когда этот вход заземлен, излучение вспышки прекращается. Когда он снова размыкается, вспышка срабатывает ровно на один период позже. Внимание: при установке времени зажигания двигателя не подавайте напряжение от системы зажигания на вход синхронизации, это может привести к повреждению Arduino.
Светодиодный фонарик управляется цифровым выходом D13 Nano. Он не подключен напрямую к этому выходу, потому что ему нужен ток 180 мА при напряжении 4,5 В, а каждый выход Arduino ограничен 40 мА. Фонарик питается от батареи 9 В через N-канальный полевой МОП-транзистор Q2 и резистор R2 на 47 Ом. Этот резистор ограничивает ток через фонарик примерно до 100 мА, что достаточно для хорошего освещения. Резистор должен рассеивать мощность не менее 47 x 0,1² = 0,47 Вт. Резистор мощностью 1 Вт – хороший выбор.
Полные схемы соединений приведены далее.
Код программы Arduino выглядит следующим образом.
Для урока нам понадобится:
Скетч для управления полицейским стробоскопом во такой. Менее 30 строчек кода.
Переменная status — отвечает за работу левого и правого светодиода. Если статус true (истина). Программа управляет левым светодиодом. Иначе false (ложно) — программа управляет правым светодиодом.
Переменная open — аналогично переменой статус. Если true- светодиод светиться, иначе false — светодиод выключен.
Массив interval- содержит 6 значений. Нечетные значения это время свечения светодиода. Четные время сколько светодиод не светиться между интервалами свечения.
В основно цикле loop() у нас выполняется цикл for() 6 раз, равно столько сколько у нас элементов в массиве interval.
В данной строчке нас интересует вырождение в круглых скобках.
Данное вырождение сокращенная форма условия. По другому данную строку можно написать:
for (int x=0; x
Если мы делаем проход по циклю меряем статус на противоположный тем самым передаем слова другому светодиоду.
Переменную open меняем на противоположное значения при каждом выполнении цикла. Для смены свечения светодиода: вкл → выкл →вкл → выкл →вкл → выкл. Так как у нас 6 интервалов времени в массиве interval.
После того как цикл выполнился 6 раз. Передается слова другому светодиоду и все повторяется снова.
Следующий урок: Светофор на Arduino своими руками. Пишем скетч используя функции
Если у вас чего то нет для выполнения данного урока, Вы можете посмотреть в каталоге. Там собранные комплектующими от проверенных продавцов по самым низким ценам.
Понравилась статья? Поделитесь ею с друзьями:
Стробоскоп на ардуино для авто
Стробоскоп из светодиодной лампы, был сделан для того, что бы показать ребенку как работает камера, телевизор и пр.
В прошлом видео я показывал ему как сделать левитацию воды, при помощи стробоскопа
А теперь собственно о самом стробоскопе:
Стробоскоп собран на arduino nano и из старой, неисправной led лампы.
Частота стробоскопа регулируется энкодером.
При обычном вращении вперед или назад, частота стробоскопа изменяется с шагом 1 Гц.
Если нажать и крутить энкодер, то частота изменяется с шагом 10 Гц.
Начальная частота при включении ардуино 25 Гц.
В скетче все эти параметры можно поменять, они подписаны
Стробоскоп подойдет как для дискотеки, так и для домашних экспериментов.
// https://duino.ru
#define encoder0PinA 2 // подключен пин А энкодера
#define encoder0PinB 3 // подключен пин В энкодера
#define encoder0Button 4 // подключена кнопка энкодера
#define led_pin 12 // подключен светодиод
#define step_freq 1 // шаг изменения частоты плавно в Гц
#define step_freq_rough 10 // шаг изменения частоты грубо в Гц
#define time_light 2 // время экспозиции или время свечения светодиода в мс
volatile int freq = 25 ; // частота в Гц
void EncoderA () // обработка прерывания
<
if(! digitalRead ( encoder0Button ) && digitalRead ( encoder0PinA )) < freq += step_freq * step_freq_rough ; >//грубая настройка частоты
else
if( digitalRead ( encoder0PinB )) < freq += step_freq ;>//плавная настройка частоты
>
Видео тестирования стробоскопа
Не забывайте подписываться на канал
Будут вопросы задавайте в этой теме, в личке спрашивать не нужно.
МПСЗ за 2$ (зажигание на Arduino)
Рекомендую сразу же читать вот эту запись, которая включает все мои шаги по разработке МПСЗ на Arduino, в том числе и данную запись.
На рынке существует множество как готовых, так и DIY микропроцессорных систем
зажигания, с красочными и удобными ПО для настройки — был бы доволен заполучить
подобную, но при уточнении ценового диапазона как-то начинает давить жаба.
Существуют также Hand made системы, которые используют микропроцессоры
типа PIC. Цена уже поменьше, но понадобится еще приобрести программатор
и учесть множество нюансов- вообщем такой вариант тоже не нравился.
Месяц назад познакомился с платформой Arduino- штука весьма занимательная,
позволяет воплотить в жизнь множество технических идей. Главными плюсами
этой платформы есть простота программирования, модульная конструкция ( все
продается отдельными модулями- достаточно соединить нужные модули кабелями),
ну и в случае с китайскими клонами (с которыми и имею дело) — смешная цена.
Вот так выглядит Arduino Nano — модуль, который включает микропроцессор ATmega328P
со всей необходимой обвязкой и микросхему Serial-USB, которая избавляет от
необходимости использования отдельных программаторов. Еще присутствует стабилизатор
питания. Цена- немногим менее 2$.
После баловства со светодиодами, сервоприводами и т.п. решил приступить к более
практичным решениям — МПСЗ и «мозгам» для бункерного дозатора зерна (но это уже
совсем другая история 🙂
Зажигание на Arduino получилoсь вполне работоспособным — на тестовой прошивке (зависимость УОЗ
от оборотов ) завелась без проблем и поехала. Стробоскоп адекватно показывает
движение метки при изменении оборотов (центробежный регулятор при этом заблокирован).
Осталось лишь все аккуратно оформить (для теста все висело на соплях), изготовить
датчик давления в коллекторе (покупать готовый ДАД все та же жаба), сделать
температурную коррекцию ну и откатать оптимальный график УОЗ для своего двигателя.
Для оперативной коррекции прошивки наличие ноута необязательно — это можно делать
даже при помощи телефона на Android.
Есть, конечно, и минусы — отсутствие привычной для онлайн-прошивки проги, где наглядно
видно карту УОЗ. Для любой коррекции необходимо вручную править код прошивки.
Здесь диапазон оборотов делится на нужное количество отрезков, с произвольным шагом-
хоть до 10 об/мин., и для каждого отрезка УОЗ задается формулой. При изменении формулы
для одного отрезка также необходимо корректировать формулы для соседних отрезков чтобы
не было разрывов графика.
График родного трамблера, к примеру, задается 4 отрезками — с 4 линейными функциями.
Можно тот же график задать 2 отрезками используя функцию параболы.
Вообщем простор для творчества есть.
Насчет надежности- пока не знаю, но делаю с учетом возможности быстро переключиться
на родные механизмы управления УОЗ.
Ну и на конец видео, где все это подключено к обычному кулеру для демонстрации изменения
УОЗ в зависимости от оборотов.
Arduino.ru
Стробоскоп
Я начинающий в этом деле. С паяльником на ты, а вот с программированием как то.
Есть задумка на основе АРДУИНО создать стробоскоп. Обязательное условие блютз модуль- управление со смартфона. С этим все понятно. Перемигивание светодиодов ( два светодиода ) на основе скетча Blink. Требуется изменение частоты перемигивания после некоторого события ( получения сигнала с портрет блютуз). Казалось бы все просто, Но как заставить
крутиться бесконечно до наступления события, переключающего на другую частоту перемигивания
Пробовал while()- не удаётся выйти из цыкла!
Помогите, за ранее спасибо.
Оно и так будет крутиться бесконечно в loop(). Чтобы менялась частота мигания, в delay() пишем не цифру в миллисекундах, а название переменной в которой будет храниться это значение. Переменную надо объявить заранее. Потом, по какому-либо событию меняем значение переменной, это значение автоматически попадет в delay()
Спасибо! вчером попробую!
Странно, не помогло.
Просто светятся оба светодиода!
Код немного изменился, но это ни чего не дало!
Я не планируют использовать Serial порт. С какой целью есть в том необходимость? Если не затруднительно, пожалуйста!
Спасибо за совет о вставке кода!
Я не планируют использовать Serial порт.
В этом есть некое противоречие с тем, что он уже используется в скетче :
Я имею введу отображение обратных данных с ардуино- то есть односторонняя связь.
Или это необходимо,и я просто не совсем что то понимаю?
Для данного конкретного скетча необходим Serial.begin в setup().
Ещё один теоретический вопросов.
Переменная i принимает какое либо значение в соответствии с полученной командой. Вопрос, значение i изменится только при получении команды, или изменится сразу после прекращения подачи команды?
Если собираетесь сами возиться со скетчем стробоскопа, то без минимального объёма теории будет тяжело, а отвечать здесь на простейшие вопросы вряд ли кто возьмётся.
Zawertim, у вас сама идеология не хорошая. Не нужно тут не tone(), ни delay(). Всё делается на таймере1.
Выход будет на 9 ноге ардуино.
dimax как напишет так жутко. какие-то регистры. зато коротко и красиво. хотя и на delay не длиньше было бы
Не мужики, чем дальше в лес тем страшнее!
После такого чувствую себя идиотом
Нельзя ли как-то прокомментировать последний скетч?
Был уверен мне здесь помогут
Araris, да я ж не в качестве учебного пособия.. Просто как готовое решение, что б человек так не мучался :))
Дело в том, что несовсем понимю предложенный вами валиант, сказывается недостаток опыта. Спасибо огромное за готовое решение, но хотелось бы понимать, что происходит.
Zawertim, если вкратце: в микроконтроллере есть аппаратные таймеры. Их нужно настраивать определённым образом, чтобы они работали в определённом режиме и тикали так, как Вам надо. Настраиваются они через регистры, как и любая переферия микроконтроллера. В эти регистры нужно записывать определенные значения. Узнать про регистры и их значения можно в даташите на конкретный микроконтроллер. На распространённых Arduino UNO, Nano, Pro Mini стоит микроконтроллер фирмы Atmel семейства AVR, а конкретно ATmega328P). То есть, это уже несколько выходит за рамки Arduino, которая расчитана в основном на новичков. Тут нужно углубляться в изучение «железной части» на более низком уровне.