2 заметки с тегом

левитация

Имитация левитации — 2

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

В этой демонстрации используется тот же самый стробоскоп, но немного упрощенный, так как он без электромагнита. Вместо электромагнита, импульсный, аквариумный насос качает воздух. Работает насос от сети 220В на частоте 50Гц. Насос подключен через один выпрямительный диод. Таким образом диод пропускает только положительные полупериоды.
Что бы синхронизировать пузырьки со вспышками света, стробоскоп нужно настроить на любую кратную частоту 12,5-25-50-75-100 Гц. Соответственно при увеличении частоты стробоскопа в два или три раза, расстояние между пузырьками будет кратно уменьшаться. В видеоролике Вы можете посмотреть фрагмент на 57 секунде, в котором частота увеличена по отношению к 50Гц и пузырьки держатся на коротком расстоянии друг от друга.

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

Используемые в схеме компоненты
Старая LED лампа  — 1 шт.
Транзистор КТ972  — 1 шт. всмето него можно использовать MOSFET модуль
Насос аквариумный  — 1шт.

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

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

// Выводы ЭНКОДЕРА
#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 paus, time_light=2000; // время свечения светодиода в мкс
uint32_t oldcount;
boolean DT_last; // последнее состояние энкодера

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

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

void loop()
{
    paus=5000000/freq;
    digitalWrite(coil_pin, 1);
    digitalWrite(led_pin, 1);
    
    oldcount = micros();
    while( (micros() - oldcount) < time_light){}   // длительность импульса выдержки          
    digitalWrite(led_pin, 0);
    while( (micros() - oldcount) < paus){}  // положительный полупериод
    digitalWrite(coil_pin, 0);
    
    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 > 0 ) time_light -= step_timelght;    // прибавить длительность импульса выдержки/
          }
          
  DT_last = DT_now;                   // сохранить положение CLK для следующей проверки
}

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

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

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

Левитация на Ардуино

Впервые увидел этот эффект еще в детстве. Меня попросили помочь, подержать и посветить автомобильным стробоскопом на маховик двигателя автомобиля. Мотор запустили и после чего я увидел на вращающемся моховике, почти не подвижную насечку, которая стояла на одном месте, а маховик при этом вращался. После чего родилась идея сделать вентилятор и стробоскопом остановить его. Идею спустя какое то время реализовал, на лампе ИФК-120, тиристоре КУ202 с обвязкой и закинул в дальний угол, но  вот лет 6 тому назад увидел японское видео с левитацией воды. Так и родилась идея повторить этот трюк с левитацией капель. Долго не доходили до реализации руки и вот наконец то, сбылась мечта ...

Посмотрите видеоролик того, что у меня получилось:

Как это работает
В ютубе есть несколько видео, в которых пытаются рассекать воду на капли, текущую из силиконового шланга, при помощи аудио колонки или динамической головки. Но в этом способе есть несколько недостатков.
1 — громоздкость конструкции(колонка, усилитель, генератор частот, стробоскоп)
2 — низкочастотный динамик не может воспроизводить меандр, из — за своей механической конструкции и на выходе у него получается что то вроде синусоиды. В итоге вода не рассекается на капли, а извивается как змея.
3 — Генератор частот каждый раз придется подстраиваться под частоту стробоскопа. Частота будет уплывать.

В моей конструкции все просто и дешево.
Эту конструкцию может повторить каждый желающий, в домашних условиях.
Работает так:
Стробоскоп и электромагнит от автомобильного реле, работают на одной частоте
Электромагнит разбивает поток воды на капли, а стробоскоп засвечивает эти капли, в определенный момент. Так как капли падают с частотой равной стробоскопу, то получается эффект висящих в воздухе капель.

Схема
Транзисторы КТ972 у меня были под рукой, вот я их и поставил.
Вы можете поставить любые другие транзисторы рассчитанные на напряжение не менее 30В и ток не менее 2А
Резисторы в базах транзисторов ограничивают ток до 40мА, что бы не повредить выход контроллера.
Светодиодный элемент я использовал из старой неисправной светодиодной лампы.
Что бы уменьшить напряжение питания элемента до 24 В.
Я поделил элемент на две части, разрезав одну дорожку и запараллелил эти два массива светодиодов.
Так как питание светодиодного элемента осуществляется короткими импульсами, а напряжение питания
равно напряжению падения на светодиодах, то ограничивать ток я не стал.
Диод стоящий параллельно электромагниту, защищает от отрицательных выбросов электромагнитной катушки.
Можно поставить диод из той же, разобранной LED лампы.
Электромагнит сделан из автомобильного реле. Реле у меня уже было раскурочено , по этому мне
пришлось использовать его таким какое оно есть.
Если бы у меня было исправное реле , я бы сначала попробовал подключить китайскую палочку на якорь реле.
Для обеспечения зазора между постоянным магнитом и электромагнитом, можно вложить между ними кусочек поролона, или сдвинуть палочку с магнитом в бок. Как я и сделал.

Скетч для ардуино
Я использую Arduino Nano,
потому что у меня их много и они прекрасно устанавливаются на макетной плате.
Но Вы можете использовать абсолютно любой контроллер Ардуино и даже Digispark
Энкодер использует прерывание INT1. Если вращать энкодер без нажатия,
то тогда регулируется частота вспышек стробоскопа и частота электромагнита, с шагом 0,1Гц. Если вращать с нажатием,
то регулируется длительность вспышек светодиода, у фотографов это называется время выдержки. При этом частота не изменяется.
Управление светодиодным элементом, для удобства отладки я подключил на D13, но
Вы можете поменять все пины подключения, на любые другие. Только нельзя менять пин D3(INT1) энкодера.

//Скетч от Cyber-Place.ru
// Выводы ЭНКОДЕРА
#define CLK 3  // Clock Подключаем к INT1, нельзя переназначать
#define DT 4  // второй вывод энкодера
#define SW 5  // switch кнопка энкодера
#define led_pin 13       // подключен светодиод
#define coil_pin A0      // электромагнит

#define Min 1 // минимальное значение 
#define Max 20000 //максимальное значение

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

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

  attachInterrupt(1, encoderTick, CHANGE); // прерывания от Энкодера
  
  DT_last = digitalRead(CLK);         // считываем положение CLK
  Serial.begin(115200);           // для отладки
}

void loop()
{
    paus=5000000/freq;
    digitalWrite(coil_pin, 1);
    digitalWrite(led_pin, 1);
    
    oldcount = micros();
    while( (micros() - oldcount) < time_light){}   // длительность импульса выдержки          
    digitalWrite(led_pin, 0);
    while( (micros() - oldcount) < paus){}  // положительный полупериод
    digitalWrite(coil_pin, 0);
    
    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 > 0 ) time_light -= step_timelght;    // прибавить длительность импульса выдержки/
          }
          
  DT_last = DT_now;                   // сохранить положение CLK для следующей проверки
}

Настройка левитрона
Основная настройка сводится к регулировке потока воды. Нужно настроить скорость потока воды таким образом,
что бы электромагнит мог стабильно разбивать поток воды на капли.
Я думаю что это очень просто и Вы визуально сразу поймете где золотая середина.
Так же настройте частоту вспышек стробоскопа, на более комфортную для Ваших глаз. Частота вспышек влияет
на расстояние между каплями, а если капли начнут рваться без синхронизации, то перестройте поток воды.
Если хотите снять видео на камеру , то нужно подстроить стробоскоп под частоту камеры, что бы на камере не было мерцаний

Будут вопросы спрашивайте здесь не стесняйтесь.
Я с удовольствием отвечу на них