Собрал левитрон на катушках индуктивности и датчике холла. Обеспечил возможность медленного вращения и подсветки без батарей и проводов. Интересно?
Нетрудно заставить левитировать объект в воздухе с помощью небольшой катушки, датчика холла и Arduino с очень простой программой. Куда сложнее заставить ее устойчиво держать равновесие. В большинстве случаев появляются колебания которые очень скоро усиливаются и гравитация побеждает.
Катушка индуктивности во время работы создает достаточно сильные помехи и дает ошибочные наводки на датчик холла. Что бы отфильтровать такие помехи необходимо в код добавлять дополнительные методы фильтрации. Но Arduino не распологает достаточными мощностями, что бы обеспечить фильтрацию в полном объеме и по тому приходится добавлять механический демпфер.
Для борки установки нам потребуется:
- arduino
- неодимовые магниты
- проволока для катушки 0.4мм - 20 метров
- болт с гайкой и шайбами (сердечник катушки)
- датчик холла
- светодиоды
- силовой транзистор Toshiba 2SC1815 или какой-нибудь хороший мосфет
- резисторы 1 к
- конденсатор 0.1 мКф
- блок питания 5-12 вольт
- два металлических кронштейна
- пластиковый полупрозрачный шар
- небольшой куллер для придания вращения нашему шару
Распиновка для подключения датчика холла и силового транзистора к arduino:
В первую очередь нам понадобится намотать 20 метров проволоки на наш блот. Тем самым получим соленоид, который будет удерживать наш шар в воздухе.
После намотки к торцу соленоида нужно прикрепить датчик холла.
Простейший код для управления магнитом:
void setup () { pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop (){ if ( analogRead(0) > 200 ) { //Adjust the threshold value to levitate. digitalWrite( 10, HIGH ); digitalWrite( 11, LOW ); } else { digitalWrite( 10, LOW ); digitalWrite( 11, HIGH ); }
При изготовлении соленоида заметил, что болт с шестигранной головкой в качестве сердечника катушки не создавал однородного магнитного поля вне катушки. Поэтому я скруглил грани болта напильником. Сила удержания заметно выросла.

На этом этапе катушка для левитации устанавливается в жесткую раму. Было бы лучше использовать в раме не магнитные материалы, чтобы избежать проблем. Следует отметить, что материалы из нержавеющей стали, которые я использую, менее магнитны чем железо.
Когда катушка была установлена в раме, левитирующий шар под катушкой начал колебаться в воздухе и падал на пол или приклеивался к катушке. Когда катушка удерживалась в руках то рука сглаживала вибрации и левитация была стабильнее.
Сначала я попробовал добавить программный фильтр, но оказалось это сложнее, чем я думал.
int x, y; int recX1, recX2; const int cp = 192; //Adjust the value of cp, kA or kB to levitate. const int kA = 87; const int kB = 55; void setup () { TCCR1B &= B11111000; TCCR1B |= B00000001; pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop (){ recX2 = recX1; recX1 = x; x = analogRead(0); y = min( max( (x-cp)*kA + (2*x-recX1-recX2)*kB, -255), 255 ); if ( y > 0 ) { analogWrite( 9, y ); PORTB |= _BV(2); PORTB &= ~_BV(3); } else { analogWrite( 9, -y ); PORTB |= _BV(3); PORTB &= ~_BV(2); } }
Для придания вращения в начале хотел сделать вторую катушку, но все таки решил сделать все проще - поставил куллер, который потоком воздуха обдувал сферу и заставлял ее медленно вращаться.
Теперь остается решить последнюю задачу - заставить сферу светиться. Т.к. мы уже имеем генератор переменного магнитного поля от нашего соленоида, то мы можем его индуцировать в электрический ток внутри сферы. Намотку второй катушки производил опытным путем. Катушка закреплена термоклеем возле подвесного магнита.


В более поздних версиях добавил отдельную катушку и генератор колебаний что бы добиться более яркого свечения диодов в сфере.
