Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.01.2018, 21:43   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Стробоскоп на arduino с регулировкой частоты

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


А теперь собственно о самом стробоскопе:
Стробоскоп собран на arduino nano и из старой, неисправной led лампы.
Частота стробоскопа регулируется энкодером.
При обычном вращении вперед или назад, частота стробоскопа изменяется с шагом 1 Гц.
Если нажать и крутить энкодер, то частота изменяется с шагом 10 Гц.
Начальная частота при включении ардуино 25 Гц.
В скетче все эти параметры можно поменять, они подписаны
Стробоскоп подойдет как для дискотеки, так и для домашних экспериментов.

Схема стробоскопа:
Нажмите на изображение для увеличения
Название: энкодер.jpg
Просмотров: 996
Размер:	54.8 Кб
ID:	4761

Комплектующие:
Arduino - 1 шт.
Энкодер - 1 шт.
Старая Led лампа -1 шт.
Транзистор КТ972, эмиттер транзистора на GND ардуины. Можно использовать модуль MOSFET
Конденсаторы керамические 0,1 мкФ - 3 шт.

Скетч для ардуино:
PHP код:
// 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 setup() 
{   
  
pinMode(led_pinOUTPUT);
  
pinMode(encoder0PinAINPUT_PULLUP);
  
pinMode(encoder0PinBINPUT_PULLUP);
  
pinMode(encoder0ButtonINPUT_PULLUP);
  
attachInterrupt(0EncoderAFALLING);  // настроить прерывание interrupt 0
  
attachInterrupt(1EncoderBFALLING);  // настроить прерывание interrupt 1


void loop()

    
digitalWrite(led_pin1);
    
delay(time_light);                   
    
digitalWrite(led_pin0);
    if(
freq 1freq=1
    
delay(1000/freq-time_light);
}

void EncoderA() // обработка прерывания
{
  if(!
digitalRead(encoder0Button) && digitalRead(encoder0PinA)) { freq+=step_freq*step_freq_rough; } //грубая настройка частоты
  
else
  if(
digitalRead(encoder0PinB)) {freq+=step_freq;}  //плавная настройка частоты
}  

void EncoderB() // обработка прерывания
{
  if(!
digitalRead(encoder0Button) && digitalRead(encoder0PinA)) { freq-=step_freq*step_freq_rough; } //грубая настройка частоты
  
else
  if( 
digitalRead(encoder0PinA)) { freq-=step_freq; }   //плавная настройка частоты

Видео тестирования стробоскопа

Не забывайте подписываться на канал

Будут вопросы задавайте в этой теме, в личке спрашивать не нужно.
Admin вне форума   Ответить с цитированием
Старый 18.01.2018, 09:35   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Изменение кода
Сделал регулировку частоты плавной с шагом 0,1Гц
Так же можно регулировать длительность импулься выдержки, нужно вращать энкодер в нажатом состоянии
Предыдущий код удалять не стал, так как он более понятный для новичков и не посвященных пользователей
Энкодер использует одно прерывание

Схема стробоскопа:
Нажмите на изображение для увеличения
Название: энкодер.jpg
Просмотров: 533
Размер:	53.1 Кб
ID:	4931

Скетч для ардуино

PHP код:
//Скетч от Cyber-Place.ru

// Выводы ЭНКОДЕРА
#define CLK 3  // Clock Подключаем к INT1, нельзя переназначать
#define DT 4  // второй вывод энкодера
#define SW 5  // switch кнопка энкодера

#define Min 1 // минимальное значение 
#define Max 20000 //максимальное значение
#define led_pin 12        // подключен светодиод
#define coil_pin A0

#define step_freq 1       // шаг изменения частоты плавно 0,1гц
#define step_timelght 100 // шаг приращивания в мкс
volatile int freq 250// частота в Гц умноженная на 10, для более плавной настройки
volatile uint32_t paustime_light=2000// время свечения светодиода в мкс
uint32_t oldcount;
boolean DT_last// последнее состояние энкодера

void setup()  
{
  
pinMode(CLK,INPUT_PULLUP); // Clock Подключаем к INT1, нельзя переназначать
  
pinMode(DTINPUT_PULLUP); // второй вывод энкодера
  
pinMode(SWINPUT_PULLUP); // кнопка энкодера
  
pinMode(led_pinOUTPUT);    // управление симистором
  
pinMode(coil_pinOUTPUT);

  
attachInterrupt(1encoderTickCHANGE); // прерывания от Энкодера
  
  
DT_last digitalRead(CLK);         // считываем положение CLK
}

void loop()
{
    
paus=5000000/freq;
    
digitalWrite(coil_pin1);
    
digitalWrite(led_pin1);
    
    
oldcount micros();
    while( (
micros() - oldcount) < time_light){}   // длительность импульса выдержки          
    
digitalWrite(led_pin0);
    while( (
micros() - oldcount) < paus){}  // положительный полупериод
    
digitalWrite(coil_pin0);
    
    
oldcount micros();
    while( (
micros() - oldcount) < paus){} //отрицательный полупериод
}

//********************обработчики прерываний Энкодера*******************************
void encoderTick()     // Обратка прерываний от Энкодера
{
  
uint8_t DT_now digitalRead(CLK);       // считываем текущее положение CLK
  
  
if (DT_now != DT_last && digitalRead(SW))   // если предыдущее и текущее положение не равны, значит был поворот 
  
{                     
    if (
digitalRead(DT) != DT_now)    // если DT не равен CLK, значит вращение по часовой стрелке
    
{                             
      if( 
freq Max freq += step_freq;    // прибавить 
    
} else {                                   // если DT равен CLK, значит вращение против часовой
             
if( freq Min freq -= step_freq;  // убавить            
            
}
  } else 
          if (
DT_now != DT_last && !digitalRead(SW)) //если нажата кнопка и было вращение
          
{
           if (
digitalRead(DT) != DT_now)         // если DT не равен CLK, значит вращение по часовой стрелке
            
{                             
              if( 
time_light paus ) { time_light += step_timelght; } // убавить длительность           
            
} else  if( time_light time_light -= step_timelght;    // прибавить длительность импульса выдержки/
          
}
          
  
DT_last DT_now;                   // сохранить положение CLK для следующей проверки

Admin вне форума   Ответить с цитированием
Старый 27.01.2018, 20:00   #3
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию

Решил на входных собрать ребенку игрушку. Не понял зачем нужна переменная
void loop()
{ stat_int=0;

На нее компилятор ругается, в коде вроде не используется, удалил нафик. Вроде работает.
Энкодера у меня не нашлось - заменил на две тактовые кнопки и один выключатель, мне показалось должно работать также.
Но подобрать частоту к каплям из крана у меня не получилось. Но все равно очень прикольно - спасибо!
Tohin вне форума   Ответить с цитированием
Старый 27.01.2018, 20:08   #4
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
void loop()
{ stat_int=0;
Не нужна, удали ее. Я не помню для чего она, что то для отладки делал

Цитата:
Энкодера у меня не нашлось - заменил на две тактовые кнопки и один выключатель, мне показалось должно работать также.
Кнопками не удобно и долго регулировать, энкодер можно выковырять из старой мышки

Цитата:
Но подобрать частоту к каплям из крана у меня не получилось. Но все равно очень прикольно - спасибо!
Капли должны очень быстро капать, почти на грани срыва в поток. Можно параллельно светодиодам, подключить электромагнитный клапан или соленоид. И соленоидом дергать трубку или кран, по которой будет течь вода.
Admin вне форума   Ответить с цитированием
Старый 17.04.2018, 23:57   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Как можно прочитать надпись на вращающемся вентиляторе?
Смотрите на видео
Admin вне форума   Ответить с цитированием
Старый 07.09.2018, 14:08   #6
Maharadon
Junior Member
 
Регистрация: 07.09.2018
Сообщений: 14
Вес репутации: 0
Maharadon is an unknown quantity at this point
По умолчанию

Добрый день! Вдохновило, решил сам попробовать собрать, хоть никогда ардуино не занимался и вообще имею посредственные знания по схемоте. Пробовал собрать как на схеме - не работает, подозреваю, что неправильно втыкаю энкодер. На нем обозначения выводов CLK, DT, SW, +, GND. Можете уточнить на Вашей схеме где какой?
Maharadon вне форума   Ответить с цитированием
Старый 07.09.2018, 15:11   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

#define CLK 3 // Clock Подключаем к INT1, нельзя переназначать
#define DT 4 // второй вывод энкодера
#define SW 5 // switch кнопка энкодера

А стробоскоп моргает?
Скетч лучше использовать второй, а не из шапки
Admin вне форума   Ответить с цитированием
Старый 07.09.2018, 20:44   #8
Maharadon
Junior Member
 
Регистрация: 07.09.2018
Сообщений: 14
Вес репутации: 0
Maharadon is an unknown quantity at this point
По умолчанию

А GND и "+" с энкодера сводить на GND ардуины?

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

Последний раз редактировалось Maharadon; 07.09.2018 в 21:02.
Maharadon вне форума   Ответить с цитированием
Старый 07.09.2018, 22:58   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
А GND и "+" с энкодера сводить на GND ардуины?
Да

Цитата:
Диод не горит. После последней правки начал тлеть, когда случайно тронул ножку диода он загорелся на-полную. Потом тыкался мультиметром и спалил диод. После замены диода схема вновь безжизненна.
Мне сложно , судить не видя полной картины. Возможно что где то ошибка в подключении. При условии что код загружен в контроллер
Admin вне форума   Ответить с цитированием
Старый 08.09.2018, 12:57   #10
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1601
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

Цитата:
А GND и "+" с энкодера сводить на GND ардуины?
Если "+"(плюс) подключить к минусу(GND), а вы это похоже делали, то вы получите короткое замыкание (КЗ), с выходом из строя всех критичных к замыканию элементов этой цепи.
По крайней мере если речь идет о питании, а не о линии данных)
Вообщем рисуйте схемы или картинки, чтобы было наглядно и понятно
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 08.09.2018 в 13:01.
sunny вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 13 (пользователей: 0 , гостей: 13)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:28. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика