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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2018, 19:43   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,368
Вес репутации: 9567
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
По умолчанию Левитация воздушных пузырьков в воде

Нажмите на изображение для увеличения
Название: пузыри.jpg
Просмотров: 90
Размер:	93.2 Кб
ID:	4988
Продолжаю тему про имитацию левитации.
Для тех кто не читал первую публикацию, могут пройти по ссылке
В отличии от первой публикации, в этой статье я продемонстрирую псевдолевитацию воздушных пузырьков в воде.
В начале видео ролика демонстрируется все протестированные мной варианты псевдолевитации,
а потом с 3:17 минуты начинаются краткие пояснения.
Тем кому надоест смотреть демонстрацию, могут сразу перейти к пояснительной части.

В этой демонстрации используется тот же самый стробоскоп, но немного упрощенный, так как он без электромагнита.
Вместо электромагнита в этот раз я использую импульсный, аквариумный насос. Который качает воздух.
Работает насос от сети 220В на частоте 25Гц, то есть на половине от частоты сети(50Гц). Почему 25Гц?
Потому что насос подключен через один выпрямительный диод. Таким образом диод пропускает только положительные полупериоды.
Что бы синхронизировать пузырьки со вспышками света, стробоскоп нужно настроить на любую кратную частоту 12,5-25-50-75-100 Гц.
Соответственно при увеличении частоты стробоскопа в два или и более раз, расстояние между пузырьками будет так же кратно уменьшаться.
В видеоролике Вы можете посмотреть фрагмент на <a href="https://youtu.be/qcfcHu1qQAQ?t=57">57 секунде</a>,
в котором частота увеличена по отношению к 25Гц и пузырьки держатся на очень коротком расстоянии друг от друга.



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





Используемые в схеме компоненты:
Arduino nano - 1 шт.
Энкодер - 1 шт.
Макетная плата -1 шт.
Старая LED лампа - 1 шт.
Транзистор КТ972 - 1 шт.
Насос аквариумный - 1шт.
Резистор 120 Ом - 1шт.


Пояснения по схеме:
Светодиодный элемент как я уже говорил, использовал из старой неисправной светодиодной лампы.
В которой не работал драйвер.
По напряжению падения на LED элементе выяснил, что его рабочее напряжение 48В.
Что бы уменьшить напряжение питания элемента до 24 В, я поделил элемент на две части,
разрезав одну дорожку и запараллелил эти два массива светодиодов.
Так как питание светодиодного элемента осуществляется короткими импульсами,
а напряжение питания равно напряжению падения на светодиодах, то ограничивать ток я не стал.
Потому как LED элемент все равно работает в ненасыщенном режиме.
Светодиодный элемент коммутируется ключом на транзисторе КТ972. Это составной транзистор или
как его еще называют транзистор Дарлингтона, пара Дарлингтона. Можно было применить и MOSFET, но для такого маленького тока и КТ972 слишком много.
Резистор в базе транзистора ограничивает выходной ток контроллера, для того, что бы выход контроллера не вышел из строя.
По Datasheet этот ток не должен превышать 40мА. Грубый подсчет, без учета падения напряжения на переходе транзистора будет таким: 5В/0,04А=125 Ом.
Так как в линейке сопротивлений такого номинала не бывает, то ставим 120 Ом. Если учесть падение напряжения на переходе транзистора, то ток все равно не превысит 40мА.
Энкодер работает используя всего одно прерывание контроллера INT1
При этом нет надобности бороться аппаратно с дребезгом контактов, так как код с этим справляется, без лишних задержек.
При вращении энкодера без нажатия, изменяется частота. По умолчанию частота в коде 25Гц.
При вращении энкодера с нажатием, изменяется длительность вспышки стробоскопа.
Насос как я писал выше, работает от переменного напряжения 220в на частоте 25 Гц.


Программная часть стробоскопа
Код от прошлого проекта я не стал править, оставил все как есть
"Код для ардуино"

PHP код:
// Выводы ЭНКОДЕРА
#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 для следующей проверки

Объясню как это работает
Насос с частотой 25 Гц создает давление в трубке, выпуская в импульсе порцию воздуха.
Дозированный воздух в виде пузырьков, выходит из трубки с той же частотой 25Гц и поднимается вверх.
Подстроив стробоскоп на кратную частоту, частоте 25Гц, мы увидим висящие в воде пузыри, так как частоты будут
засинхронизированным и. И пузырьки будут сменять друг друга, в неактивный момент стробоскопа.
Наш глаз этого подлога не заметит, так как он фиксирует только освещенную сцену.
В силу физических причин, глаз может видеть только отраженный свет, а то что что происходит в темноте он не видит.


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

Если у Вас остались вопросы, задавайте, я на них с удовольствием отвечу.

P.S.
Еще одно видео которое не войдет в серию моих публикаций, но все так же основано на эффекте стробоскопа.
Admin вне форума   Ответить с цитированием
Старый 21.05.2018, 21:38   #2
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 933
Вес репутации: 967
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Энкодер работает используя всего одно прерывание контроллера INT1
При этом нет надобности бороться аппаратно с дребезгом контактов, так как код с этим справляется, без лишних задержек.
То есть я правильно прочитал: конденсаторы на схеме лишние?
Tohin вне форума   Ответить с цитированием
Старый 21.05.2018, 22:05   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,368
Вес репутации: 9567
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 вне форума   Ответить с цитированием
Старый 21.05.2018, 23:58   #4
di_mok
Senior Member
 
Регистрация: 13.06.2014
Адрес: Арзамас
Сообщений: 167
Вес репутации: 0
di_mok is an unknown quantity at this point
По умолчанию

А если подсветить снизу, получится шикарный ночник
di_mok вне форума   Ответить с цитированием
Старый 22.05.2018, 00:19   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,368
Вес репутации: 9567
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 вне форума   Ответить с цитированием
Старый 01.08.2018, 20:03   #6
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 933
Вес репутации: 967
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию

А чисто гипотетически можно удлинить провода до энкодера метров на 10? Или не стоит пытаться?
Tohin вне форума   Ответить с цитированием
Старый 01.08.2018, 20:12   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,368
Вес репутации: 9567
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 вне форума   Ответить с цитированием
Старый 10.08.2018, 19:53   #8
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 933
Вес репутации: 967
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию

Что то не выходит у меня каменный цветок. По часовой работает, против часовой нет.
Долго думал.

Написал коротенькую программу и записал то что происходит.


Код:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  DDRD = 0x00; // Порт B вход на всех пинах порта D
  PORTD = 0b11111111; // включаем подтягивающие резисторы на пинах 
}

void loop() {

  Serial.println(PIND,BIN);
  // put your main code here, to run repeatedly:

}
[свернуть]


Вывод загнал в excel и построил график CLK (красный) DT (синий).
При вращении по часовой стрелки есть полка, когда CLK=0, а DT еще =1.
А вот при вращении против часовой такой полки нет, и через раз проскакивает неправильные значения, (обвел красным) когда CLK падает в ноль, DT уже может вернутся к 1, что соответствует вращению по часовой стрелке
Это у меня энкодер неправильный или руки кривые?
Миниатюры
Нажмите на изображение для увеличения
Название: энкодер.png
Просмотров: 23
Размер:	69.9 Кб
ID:	5036  
Tohin вне форума   Ответить с цитированием
Старый 10.08.2018, 20:15   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,368
Вес репутации: 9567
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 вне форума   Ответить с цитированием
Старый 10.08.2018, 22:02   #10
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 933
Вес репутации: 967
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию

Пока тестовый провод - около метра. но как это может влиять?
UPD:
Внимательно посмотрел на верхний график. Если посмотреть на сигнал от 146 до 142 в обратную сторону, тоже получается одновременное переключение.. Походу бракованные энкодеры пришли. Выход вижу один - Подключать DT на прерывание и отлавливать сигнал когда DT==1&CLK==0.

Последний раз редактировалось Tohin; 10.08.2018 в 22:18.
Tohin вне форума   Ответить с цитированием
Ответ

Метки
левитация, левитация на ардуино


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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