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

Некоторое время назад я прочитал статью об интересных устройствах – левитронах, которые бывают как чисто механическими, так и с электронным управлением.

Естественно, захотел собрать себе такую игрушку, но, поискав в интернете, к своему удивлению обнаружил(по крайней мере на тот момент), что большинство схем были исключительно аналоговыми. Так как в аналоговой технике я понимаю мало, решил «изобрести» левитрон заново. Для экспериментов под рукой оказался Arduino Uno. Заказал в Китае линейный датчик Холла (что такое эффект Холла), а именно UGN3503UA, насобирал некоторое количество старых трансформаторов для намотки пробных катушек и приступил к экспериментам.

Вот что из этого получилось:





Как это работает. В нижней части катушки по центру установлен датчик Холла, измеряющий расстояние до неодимового магнита, который приклеен к «левитирующей» пробке. Датчик имеет три вывода — питание 5В и аналоговый выход, который подключен к АЦП Arduino.



Управляющая соленоидом схема собрана на полевом транзисторе.





Соленоид подключен к выводам J1, контакт 1 разъема J2 к ШИМ Arduino. Подключение датчика Холла к входу АЦП на схеме нет, но сложностей тут никаких быть не должно.

Количество витков катушки сказать не могу, так как в ходе экспериментов изготовил 3 или 4 катушки, мотал по принципу «сколько провода еще осталось на трансформаторе». Остальные параметры: сопротивление катушки около 12Ом, диаметр 30 мм, высота 10 мм, толщина провода 0,3 мм, катушка без сердечника.

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

Прошивка
#define sensorPin A0
#define pwmPin 6

int sensorValue = 0;
int levitPoint = 370;
int deltaLevit = 5;

int maxL, minL;

byte induction = 128;

void setup() 
{
  pinMode(pwmPin, OUTPUT);
  maxL = levitPoint - deltaLevit;
  minL = levitPoint + deltaLevit;
}

int sensorRead(int sensorPin)
{
  int s = 0;
  for(byte i =0; i < 5; i++) {s += analogRead(sensorPin);}
  return s/5;
}

void loop() 
{ 
  sensorValue = sensorRead(sensorPin);

  if (sensorValue < 490)
  {
    if (sensorValue < maxL) induction = 0;
    if (sensorValue > minL) induction = 250;
    if (sensorValue >= maxL and sensorValue <= minL) induction = ((sensorValue - maxL)*25);
  } else induction = 0;
 
  analogWrite(pwmPin, induction);
}


Питается схема от 12В, датчик запитан от встроенного стабилизатора Arduino. Потребление в максимальном режиме около одного ампера, в режиме висения 0.3-0.4 А.

Устройство заработало, но дольше одной минуты пока работать опасно, транзистор сильно нагревается, греется также и катушка, вплоть до расплавления клея (все собрано на термоклее).

Планирую в дальнейшем переделать соленоид и перевести схему на питание от 5 вольт, поставить более мощный транзистор, с радиатором. Ну и заменить Arduino на ATiny. Не помешает также поставить на входные цепи конденсатор большой емкости, или даже батарею конденсаторов для защиты блока питания (первый блок питания на 1,5А, сгорел через 10 секунд работы от скачков нагрузки).

На этом, пожалуй, закончу, спасибо за внимание.

Комментарии (31)


  1. WaveCut
    13.04.2015 22:07
    -36

    буханка-троллейбус.jpg


    1. Nidaylokn
      13.04.2015 22:11
      +2

      При чём тут это?


    1. barabanus
      14.04.2015 09:56
      -6

      При регистрации на хабре не зря напоминают, что карму можно потерять очень быстро!


      1. Antigluk
        14.04.2015 11:02
        -6

        не обсуждай то что нельзя обсуждать


  1. ploop
    13.04.2015 22:07
    +2

    транзистор сильно нагревается, греется также и катушка, вплоть до расплавления клея (все собрано на термоклее).

    Снижайте частоту ШИМа, у него затворная ёмкость 1800 пФ. Или надо будет ставить драйвер.
    Транзистор сам по себе черта лысого потянет.


    1. jar_ohty
      14.04.2015 00:58
      +3

      У атмеги выводы тоже черта лысого тянут, 40 мА перезарядят затвор с такой емкостью меньше чем за пару микросекунд. При частоте 500 Гц (частота ШИМ по умолчанию) это вполне достаточная скорость и проблем быть не должно. А вот сопли от затвора до ноги контроллера, висящие на проводках в воздухе, способны в этот затвор назвенеть порядочно. Может в этом дело.


      1. ploop
        14.04.2015 08:00

        500 Гц — нормально ещё, дело похоже в кондёре.


      1. raid
        14.04.2015 09:07
        +1

        А ничего, что полевой транзистор греется именно при переключении? Никто не говорит, что Ардуино не успевает перезаряжать ёмкость затвора, но при перезарядке идёт ток. Закон Джоуля-Ленца помните?


        1. jar_ohty
          14.04.2015 10:50
          +1

          Если он не греется при 100 кГц, переключаясь за 20-30 нс, то с чего ему греться при 500 Гц, переключаясь за 2 мкс? Энергию, выделившуюся в канале за время переключения, можно считать пропорциональной времени переключения, а чтобы получить выделяющуюся мощность, надо энергию в импульсе помножить на частоту этих импульсов.


  1. Garrett
    13.04.2015 22:16
    +1

    Мне кажется, или minL и maxL местами заменить надо везде? А то как-то с <,> не сходится


  1. VT100
    13.04.2015 22:57
    +2

    Устройство заработало, но дольше одной минуты пока работать опасно, транзистор сильно нагревается, греется также и катушка, вплоть до расплавления клея (все собрано на термоклее).

    Для начала — либо убрать С1 (вероятно — потребуется поднять частоту опроса датчика), либо переделать схему управления катушкой.


    1. ploop
      13.04.2015 23:37
      +4

      Кстати верно, не заметил C1 — он что там делает? Полевик его тупо шунтирует, и всю энергию гасит на себе и этом несчастном кондёре.


      1. valeraba
        14.04.2015 08:14
        +1

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


        1. ringman Автор
          14.04.2015 22:22

          Поставил конденсатор на 120 нФ. Появились нарастающие колебания, и как следствие «выпадание», через несколько секунд, пробки из магнитной «ямы».
          Но транзистор не греется.
          Значит теперь два варианта — или гасить эти колебания программным способом, или добавлять инерционность в схему аналоговым методом(но как это грамотно реализовать)?


          1. ploop
            14.04.2015 22:54
            +1

            Значит теперь два варианта — или гасить эти колебания программным способом, или добавлять инерционность в схему аналоговым методом(но как это грамотно реализовать)?

            А вот теперь вы упёрлись в некоторые сложности.
            1) Инерционность аналоговой системы только изменит период колебаний, но не исключит их. При том она перестанет реагировать на толчки. Можно попробовать поставить конденсатор на выход датчика (вход АЦП), если повезёт — заработает.
            2) Гасить программно — значит делать полноценный ПИД-регулятор. Это тоже не так просто, хотя интересно.
            3) Увести колебания в более высокую частоту. Возможно поковырять вашу простенькую программу в этом направлении.

            Короче, рассчитать всё сложно, в такой системе проще методом тыка добиться работы.


          1. valeraba
            15.04.2015 06:46

            Проще паренной репы… нужно добавить инерционность системы программным способом. До этого эту роль играл большой кондёр. То есть выходной сигнал корректируйте маленькими шагами постепенно выходя на требуемый уровень. Чем ближе к цели, тем шаг меньше. Обычный ПИ-регулятор.


            1. ploop
              15.04.2015 07:40

              Ну это просто сделать: у него там усреднение в цикле в sensorRead(), добавить шагов и всё.


      1. valeraba
        14.04.2015 08:16

        … только несчастный в этом случае не кондёр, а полевик :)
        оттого то он и греется


      1. valeraba
        14.04.2015 08:25

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



  1. Alexeyslav
    14.04.2015 09:32

    Да, надо срочно причащаться к аналоговой схемотехнике. Она же базовая и для цифровой…


    1. ploop
      14.04.2015 09:47
      +1

      Кстати, аналоговые схемы позволяют использовать 6 и более датчиков, при относительной простоте конструкции (N однотипных схем с ОУ и ключами). Разрулить такое в цифре проблематично.
      При этом получается очень устойчивое парение просто над плоскостью с катушками. Такая штука, встроенная, например, в столешницу, приводит гостей в восторг.


  1. Meklon
    14.04.2015 11:10

    Очень круто. А в чем такие схемы красивые получаются?


    1. mikkal
      14.04.2015 14:22

      EAGLE Cad, или я что-то путаю?


      1. ringman Автор
        14.04.2015 22:18

        Proteus


    1. Alexeyslav
      14.04.2015 14:27

      Схема вроде бы одна, и та нарисована в протеусе.


    1. ploop
      14.04.2015 14:28
      +1

      Да и не красивая она. Красивые рисуются в Splan'е с гостовскими библиотеками.


      1. Meklon
        14.04.2015 15:47

        Вопрос вкуса)


  1. Londoner
    14.04.2015 21:57

    Не проще ли такой контроль параметра реализовать аппаратно-аналогово?


  1. silentz
    16.04.2015 16:48

    У меня у однокурсника был диплом на тему левитронов. Только там он работал через звуковую карту и обработка давалась компьютеру (LabView). Положение определялось с помощью ИК-датчика. В общем еще тот монстр получился. Так и не смог он его заставить левитировать, потому что скорости обработки не хватало и еще один нюанс: по условиям задачи, выставленным научруком необходимо было датчик ставить не вертикально, а горизонтально. Это связывало руки, т.к. нельзя было определить точное положение по высоте объекта — он либо есть (перекрывает луч ИК), либо его нет — на ИК-приемник попадает максимум света. Научрук долго пытал прибор и нас в надежде, что положение по высоте можно определять по освещенности ИК-приемника. Вот такие пироги. Однокурсник в итоге защищался с неработающим проектом. Я считаю ему повезло, что ему поставили 4. Хотя в магистратуре «удовлитворительно» не ставят.


    1. Alexeyslav
      17.04.2015 09:09

      А почему нельзя?