Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
Компоненты и материалы
| Arduino UNO | × | 1 |
| Резистор 1 кОм | × | 1 |
| Транзистор BD241 (или любой средней мощности) | × | 1 |
| Линейный датчик Холла UGN3503 (любой 5V ратиометрический) | × | 1 |
| Соленоид (RobotGeek Medium или ~200 витков медной проволоки 30AWG) | × | 1 |
| Тороидальный магнит от старой колонки (диаметр 9-11 см+) или группа неодимовых магнитов в форме гексагона | × | 1 |
| Универсальный диод 1N4001 | × | 1 |
Инструменты
| Паяльник |
Приложения и сервисы
| Arduino IDE |
О проекте
Несколько лет назад я пытался сделать устройство для отталкивающей магнитной левитации, но все схемы были сложными, а настройка — очень сложной.
После нескольких неудачных и полууспешных попыток я купил готовый левитатор (на фото), но сделать его дома (DIY) почти невозможно.

Теперь представляю отталкивающий левитатор, который кроме Arduino содержит всего несколько компонентов и очень прост для DIY:
- Любой транзистор средней мощности: в моем случае BD241
- Универсальный диод 1N4001
- Резистор 1 кОм
- Датчик Холла UGN3503 (любой 5V ратиометрический)
- Тороидальный магнит от старой колонки (диаметр 9-11 см и более)
- Вместо большого тороидального магнита можно использовать группу маленьких неодимовых магнитов, расположенных в правильный гексагон, как в коммерческих устройствах
- Соленоид ~200 витков изолированной медной проволоки 30AWG. Я использовал соленоид из старого кассового ящика
Схема очень проста (см. ниже). Arduino питается от 5В, соленоид через транзистор — от 12-20В. Общая земля. Полярность магнитов и соленоида показана на рисунке.
Для настройки понадобится немного терпения и времени — и в этом есть удовольствие от создания устройства. Датчик Холла должен быть сверху над соленоидом. Над ним размещается магнит, который должен левитировать. В моем случае настройка заключалась в перемещении тороидального магнита вверх-вниз. Кроме аппаратной настройки, есть настройка в коде — изменение значения первой строки (set_point) в диапазоне 200-350. Комбинация этих двух настроек дает лучший результат.
Код
Arduino
int set_point = 250; // настройка порога
int sensorPin = A1;
int output_pin = 2;
int sensorValue = 0;
void setup() {
Serial.begin(9600);
pinMode(output_pin, OUTPUT);
}
void loop() {
sensorValue = analogRead(sensorPin);
// Serial.println(sensorValue);
if (sensorValue <= set_point)
digitalWrite(output_pin, LOW);
else
digitalWrite(output_pin, HIGH);
}
Схемы
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Многопозиционная система датчиков температуры для интеграции в умный дом
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
- Пожарная безопасность 3D-принтера: умная система обнаружения дыма
- Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano
- Веб-управляемый IoT-индикатор на Arduino, Yaler и IFTTT
- Высокопроизводительный регистратор данных для метеозонда на Arduino
- Arduino Flip Clock на матрице 8×8 LED — DIY проект реального времени
- CoroFence: термический детектор на GridEye + PIR с IoT