Содержание статьи
Среди врагов человечества отдельное место занимает гравитация, и немало людей сложило головы, сражаясь с ней. Пришла пора присоединиться к этой борьбе, а поможет нам в этом славном деле эффект электромагнитной левитации.
Это полезнейшее явление. Благодаря ему по мегаполисам торопливо шуршат поезда на магнитной подушке, а в особо важных механизмах вращаются неподвластные трению магнитные подшипники.
В этой статье я расскажу, как собрать настольный гаджет электромагнитной левитации. К сожалению, летать тебе он не позволит, но заставит парить в воздухе небольшой хорошо магнитящийся предмет — например, крохотный глобус, или кубик, к которому можно клеить липкие заметки, чтобы они маячили у тебя перед носом.
Как это работает?
Если кратко — у тебя есть электромагнит, который притягивает железный предмет (например, гайку) и должен бы притянуть до конца, но как только гайка приближается к нему слишком близко, магнит отключается, и гайка начинает падать. Как только она опустится ниже определенного уровня — магнит снова включается и вновь тянет гайку вверх. Если положение отслеживать точно, а с магнитом управляться быстро, то можно попасть в равновесное состояние, и колебания гайки будут незаметны. Добиться этого эффекта можно разными способами, поэтому рассмотрим все популярные возможности. Но в любом случае в установке будет пять элементов:
- электромагнит — главный положительный герой, борющийся с гравитацией;
- источник питания, так как кушать хочется всем;
- драйвер постоянного тока (будет брать сигнал с управляющей схемы и включать-выключать магнит, который должен быть довольно мощным и напрямую включаться любыми логическими микросхемами не сможет);
- обратная связь, чтобы знать, где сейчас наша гайка, и случайно не перетянуть ее в ту или другую сторону;
- система управления, которая будет собирать информацию с датчиков и решать, когда и как включать электромагнит.
Теперь обо всем по порядку.
Магнит
Магнит можно получить тремя путями: сделать самому, купить готовый и достать из какого-нибудь реле или соленоида. Готовые магниты встречаются в продаже нечасто, но если нашел их в изобилии, то бери с небольшим круглым сердечником, рассчитанный на 12 В — с таким будет удобнее всего управляться. Внутреннее сопротивление должно быть не меньше 20 Ом, иначе получится лишь эффективно нагревать пространство. Это же касается и катушек реле. Если будешь использовать катушку от соленоида, то вместо подвижного внутреннего сердечника нужно будет подобрать плотно сидящий болт.
Но если поиски по магазинам и чердакам к успеху не привели, то можешь сделать магнит сам. Для этого понадобится сердечник, он должен удовлетворять противоречивым условиям: быть одновременно массивным, но не слишком большого диаметра, чтобы создаваемое поле было лучше сосредоточено. Идеально подойдет шпилька диаметром 8-10 мм и длиной около 60 мм, можно использовать и болт такой же длины.
Для обмотки нужен лакированный провод сечением не меньше 0,03 мм2 (или диаметром — 0,2 мм), его несложно найти в магазинах, но можно и добыть, разобрав трансформатор какогонибудь мелкого блока питания — вторичная обмотка скорее всего именно таким проводом и намотана. Лучше брать низкокачественные блоки питания — плохо собранные пластинчатые сердечники их трансформаторов будет легко расковырять. Теперь этот провод нужно намотать на болт. Мощность магнита измеряется в ампер-витках и зависит от произведения протекающего тока на число витков, поэтому мотать придется много, минимум 500 оборотов — так что подумай, как этот процесс можно упростить.
Я зажал болт-сердечник в патрон шуруповерта, а катушку, с которой провод сматывал, одел на ручку штатива от фотоаппарата. Дрель (а тем более блендер или миксер) использовать не советую — у них высокие обороты, и если провод в какой-то момент зацепится, то все может разлететься! Старайся укладывать витки плотно один к другому, слой за слоем, поскольку зазоры сильно снижают эффективность. После того как ты решишь, что намотал достаточно, зачисти концы проводов (лак на концах удобно сжечь зажигалкой) и померь сопротивление мультиметром, оптимум — 20-30 Ом. Подключи магнит к блоку питания и проверь, не слишком ли он греется и хорошо ли притягивает.
Источник питания
Тебе также понадобится хороший источник питания на 12 В: магнит может потреблять приличный ток, так что маленькой батарейкой здесь не отделаться. Если есть возможность — воспользуйся ATX блоком питания компьютера. Конечно, использовать тот, что стоит в компьютере, не стоит — по закону Мерфи в самый важный момент что-нибудь закоротит и блок может помереть (хотя у них есть защита от замыканий), и компьютеру может тоже не поздоровиться. Чтобы включить ATX блок питания без компа, в широком 20-пиновом разъеме соедини зеленый провод с любым черным, а питание бери с разъема жесткого диска или видеокарты, желтый провод — это +12 В , а черный — земля. Если такого блока нет, подойдет и менее мощный источник от чего-нибудь бытового — зарядника дрели, ноутбука и так далее. Можно взять и свинцовый 12-вольтовый аккумулятор от ИБП. Теперь посмотрим, как магнитом можно управлять.
Драйвер
Магнит, в зависимости от того, насколько удачным он получился, может потреблять добрую дюжину ватт мощности — соответственно, и ток будет около 1 А. Чтобы управляться с такой нагрузкой, нужен мощный транзистор. Можно использовать биполярный npn-транзистор, но для его полного открытия требуется большой ток - микроконтроллеру и не потянуть. Лучше использовать полевой транзистор (он же МОП или MOSFET) N-типа, затвор которого управляется не током, а напряжением. Какой-то заметный ток требуется только для переключения состояний, поэтому такой транзистор можно смело вешать на ножку микроконтроллера через небольшое токоограничительное сопротивление (порядка 100 Ом). Единственный момент — далеко не все МОП-транзисторы способны открыться от 5 В, которые выдает контроллер, поэтому стоит поискать тот, который сможет.
Я использовал IRL530N — это настоящий великан, способен выдерживать ток до 17 А при напряжении до 100 В. Если такого найти не удалось, то можно использовать любой другой (скажем, IR F630M), но ему для полноценного открытия на затвор нужно подать 12 В. Для этого в схему следует добавить еще небольшой транзистор, который будет служить ключом на более высокое напряжение. В моем случае это 2N3904, но можно использовать практически любой npn-транзистор.
Еще один важный момент в управлении магнитом связан с его значительной индуктивностью: пока ток включен, энергия запасается в электромагнитном поле, но если цепь разомкнуть, то ей необходимо куда-то деться, и это выльется в значительный скачок напряжения на выводах обмотки. Такого удара ни один транзистор не переживет, поэтому между выводами катушки необходимо поставить диод (у меня 1n4007) — так, чтобы во время нормальной работы он стоял против тока, а в момент размыкания цепи, когда ток начинает бежать в обратную сторону, замыкал бы катушку саму на себя. Сила, чтобы управиться с магнитом, теперь есть, и осталось понять, когда же приходит время его включать.
Обратная связь
Самый простой вариант для отслеживания положения левитирующего предмета — использовать оптическую пару инфракрасный светодиод и фототранзистор, выстроенные в одну линию. Когда гайка (или болт) находится ниже прямой, то ИК-излучение распространяется свободно до датчика, но как только объект подлетает ближе, луч прерывается, и значение на выходе датчика падает — пора выключать магнит. Схема проста, но на практике имеет большой минус — мы можем знать, выше или ниже контрольной точки находится наша гайка, но не ее точное положение в каждый момент времени. Это не страшно, но может вызвать проблемы, если мы захотим плавно регулировать высоту. Кроме того, пролетающая мимо датчиков муха может все сломать.
Более удачный вариант (тоже оптический) — поставить инфракрасный или лазерный дальномер под магнит (хотя можно и сверху) и измерять расстояние. Но в этом случае придется модифицировать болт — приклеивать пластинку с большей поверхностью, иначе датчик его просто не увидит. Особенно можно поэстетствовать, установив не оптический, а ультразвуковой дальномер, хотя в заданных интервалах (несколько сантиметров) точность большинства из них будет невелика. Да и от мух эти варианты никак не спасают. Но недорогое и сердитое решение все-таки есть!
В природе существует замечательный эффект: если по проводящей металлической пластине пропущен ток, а поперек пластины приложено магнитное поле, то перемещающиеся по пластине заряды будут отклоняться силой Лоренца и создавать по краям пластины разность потенциалов, то есть напряжение, которое будет зависеть от величины магнитного поля. На этом эффекте работают датчики Холла. Применить их к определению положения довольно просто — прикрепи к болту магнит и все. Напряжение на выходе датчика будет зависеть от силы поля, которое зависит от расстояния до болта с магнитиком. И самое главное — летающие насекомые никак не повлияют!
В продаже существует множество датчиков, в том числе те, которые измеряют поле в нескольких плоскостях. Тебе же нужен простой аналоговый датчик, иногда в описаниях их называют линейными, с чувствительностью 400-1000 Гаусс. Я использовал SS59E, но идеальным вариантом его не назовешь — он имеет корпус SOT223 (для поверхностного монтажа), и чтобы использовать его «на весу», пришлось подпаивать довольно хлипкие проводочки. Удобнее выбрать датчик в корпусе to92 (например SS19, SS49 или SS495A). Также понадобится хороший магнит, лучше редкоземельный. Можно его достать из мотора привода CD/DVD, взять из детского магнитного конструктора Bornimago или заказать у китайцев на http://s.dealextreme.com/search/magnets, там хороший выбор и цены приемлемые.
На первый взгляд — это все. Подвешиваешь датчик под электромагнит и радуешься жизни. Но есть важный момент: датчик будет измерять как поле магнитика на болте, так и поле электромагнита, а поскольку магнит будет то включаться, то выключаться, то и значения будут скакать. Вариантов решения два. Первый достаточно элегантен — использовать пару датчиков Холла. Один оставить так же, внизу магнита, а второй — повесить с противоположной стороны магнита. Если обмотка сделана симметрично, то поле с обеих сторон электромагнита по модулю будет одинаковым, но сверху присутствия болта с магнитиком чувствоваться не будет, и в качестве управляющего сигнала можно использовать разницу показаний датчиков.
Второй вариант требует применения более сложной математики, но позволяет использовать один датчик Холла. Для учета поля нужно смоделировать поведение магнита и высчитывать поправку на значения датчика Холла в зависимости от состояния электромагнита. Можно, конечно, постараться подобрать оптимальные параметры и без особых расчетов, но это долго и утомительно, поэтому проще остановиться на первом варианте.
Система управления
Как правило, управление подобными устройствами делают полностью аналоговое, на паре операционных усилителей, но можно сделать управление и на микроконтроллере. Так что если у тебя в хозяйстве есть плата Arduino, то здесь она пригодится. Я использовал свою видавшую многое Arduino Diecimila, но подойдет и любая другая пятивольтовая версия –Duemilanove, Uno и различные клоны.
Собираем!
Ключевые моменты создания гаджета мы уже рассмотрели, теперь поподробнее остановимся на том, как все это собрать, запустить и отладить. Схему можно собрать на макетной плате, но можешь попробовать обойтись без нее — элементов немного, и они вполне могут повисеть в воздухе. Для подобных «воздушных» схем удобно иметь десяток разноцветных проводов, у которых с обоих концов припаяны небольшие крокодильчики. Диод D1 можешь напаять непосредственно на выходы катушки магнита L1, а диод D2 — между стоком и истоком MOП-транзистора Q1.
Сам транзистор можно прикрепить к радиатору не столько в целях охлаждения (при этих токах он сильно греться не будет), сколько в качестве подставки. Если у тебя полевик из серии IRL, то транзистор Q1 и сопротивление R3 из схемы можешь выкинуть и закинуть сопротивление R2 на ножку D10 Arduino (или любую другую ножку с ШИМ-выходом). У полевиков в корпусах TO220 (а тебе удобней работать именно с такими) ножки нумеруются слева направо следующим образом: 1 (затвор), который нужно подключить к управляющему выходу; 2 (сток) — к минусу нагрузки, 3 (исток) — вывести на землю.
Второй выход нагрузки нужно подключить к питанию +12 Вольт. Плату Arduino также нужно от чего-нибудь запитать, лучше подсоединить ее к тому же 12-вольтовому источнику, что и магнит, но для этого тебе понадобится подходящий штекер c диаметром внутреннего штырька 2,1 мм, и внешним диаметром 5,5 мм. Можно взять питание и через USB от компьютера, но тогда не забудь соединить землю на плате с землей питания магнита. С другой стороны платы к аналоговым входам нужно подключить датчики. Выходы датчиков Холла IC1 и IC2 к пинам A0 и А1, VCC — к выходу +5 В, и GND — к земле. Датчик IC1 нужно укрепить под магнитом, а IC2 — над ним (поскольку направления полей будут противоположные, то и датчики нужно сориентировать по-разному). Скотч — самое надежное средство для крепления. Также для подстройки параметров будет полезен переменный резистор на 10 кОм (хотя величина не принципиальна). На нем должно быть 3 выхода: крайние подключи к земле и +5 В, а средний — к аналоговому входу A2.
Из железной работы осталось только к чему-нибудь подвесить магнит. К чему именно — решай исходя из подручных материалов. Это может быть, например, зажим «третьей руки», штатив или, как в моем случае, деревянный ящичек из ИКЕА. Главное — убедиться в том, что он не болтается, и можно приступать к программной начинке. Для этого гаджета потребуется создать два скетча для Arduino. При помощи первого ты измеришь параметры системы и получишь пару волшебных чисел, которые пригодятся во второй, рабочей прошивке.
Поскольку магнит может создавать не совсем симметричное поле, и датчики могут располагаться не идеально ровно, то модули значений на них могут отличаться. Поэтому нужно замерить разницу в показаниях, чтобы рассчитать поправку.
Скетч 1
const int in1 = A0; // аналоговый вход датчика Холла 1
const int in2 = A1; // аналоговый вход датчика Холла 2
const int out1 = 10; // аналоговый выход (ШИМ) на магнит.
int s1 = 0; // значение датчика Холла 1
int s2 = 0; // значение датчика Холла 2
int o1; // Выход
void setup()
{
// будем следить за состоянием в консоли
//Serial.begin(9600);
}
void loop()
{
// запускаем программу по кругу
// читаем аналоговые входы
analogWrite(out1, 255 ); // записываем в выход нужное
// состоние магнита
delay(15); // ждем, пока магнит включится
s1 = analogRead(in1); // читаем первый датчик Холла
s2 = analogRead(in2); // читаем второй датчик Холла
o1 = s2 -s1; // считаем разницу входов
Serial.print("magnet on: s1 = "); // аккуратно все выводим
// в консоль
Serial.print( s1 );
Serial.print(" s2 = ");
Serial.print( s2 );
Serial.print(" delta = ");
Serial.print( o1 );
analogWrite(out1, 25 ); // записываем в выход нужное
// состояние магнита, 10% мощности
delay(15); // ждем, пока магнит выключится
s1 = analogRead(in1); // читаем первый датчик Холла
s2 = analogRead(in2); // читаем второй датчик Холла
o1 = s2 -s1; // считаем разницу входов
Serial.print("magnet off: s1 = "); // аккуратно все выводим
// в консоль
Serial.print( s1 );
Serial.print(" s2 = ");
Serial.print( s2 );
Serial.print(" delta = ");
Serial.println( o1 ); // переходим в конце на новую строку
delay(1000); // через секунду — все заново
}
Сложность управления заключается еще и в том, что для устаканивания при изменении состояния на выходе контроллера должно пройти порядка пяти миллисекунд (за счет большой индуктивности магнита).
Чтобы сократить это время, можно управлять магнитом плавно и не включать-выключать его полностью, а лишь чутка изменять мощность. На Arduino это можно сделать при помощи ШИМ-выхода. ШИМ (PWM, широтно-импульсная модуляция) — это способ плавно менять напряжение на выходе, используя лишь цифровые состояния.
То есть часть времени выход включен, а часть — выключен, но из-за инертности работает такая схема, будто выход включен постоянно, но с половинной мощностью. После запуска первой прошивки у тебя должно остаться два числа — разница при 10% и при 100% мощности.
Во второй, рабочий скетч ты эти значения подставишь сам. Рабочий код довольно прост: читаем значения с датчиков, вносим поправки, по значению положения переменного резистора регулируем желаемый уровень мощности (а значит, и высоту) и устанавливаем соответствующий уровень на выход. Поскольку мы не оценивали, в каком диапазоне будут значения, возвращаемые датчиком при различных положениях переменного резистора, то рабочий диапазон высот будет, очевидно, уже. Но решить проблему просто — покрути ручку, и найди, где работает!
Скетч 2
const int in1 = A0; //аналоговый вход датчика Холла 1
const int in2 = A1; //аналоговый вход датчика Холла 2
const int in3 = A2; //аналоговый вход переменного резистора
const int d10 = <вставь из предыдущего кода>;
//выход при 10% мощности
const int d100 = <вставь из предыдущего кода>;
//выход при 100% мощности
const int out1 = 10; //аналоговый выход (ШИМ) на магнит.
int s1 = 0; // значение датчика Холла
int s2 = 0; // значение датчика Холла
int s3 = 0; // значение переменного резистора
int o1 = 255; // состояние выхода, по умолчанию
// полностью включен
int d = 0; // поправка
int v; // итоговое значение с датчиков
void setup() {}
void loop()
{
s1 = analogRead(in1); // читаем значение датчика Холла
s2 = analogRead(in2); // читаем текущее значение
// потенциометра
d = map (o1, 25, 255, d10, d100); // считаем поправку
v = abs (s1- s2) +d ; // разница с поправкой
o1 = map (v, 0, 1024, 25, 255); // рассчитываем выход, магнит
// никогда полностью не выключен
analogWrite(out1, o1); // записываем в выход нужное
// состояние магнита.
delayMicroseconds(100); // ждем некоторое время, пока АЦП
// вновь будет готов считывать данные
После того как соберешь и включишь, попробуй поиграть с разными грузиками и магнитами, чтобы найти те, при которых работа наиболее стабильна.
Если не получается — не сдавайся, попробуй поменять что-нибудь в прошивке, разбери и собери все еще раз, должно получиться!
Ведь конечная цель — полет даже более завораживающий, чем у птиц в небе, а к этому человечество стремилось не одну сотню лет. Так что постарайся! Но если и после всех стараний результат нулевой, то можешь заказать на сайте zeltom.com/emls.aspx готовый комплект для сборки. Удачи!