Магнитная левитация с Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Приложения и онлайн-сервисы
|
Об этом проекте
Левитатор с Arduino.
Вы можете распечатать тело на 3D-принтере или нет.
https://www.thingiverse.com/thing:1392023
- Легко распечатать и установить (только немного клея, без винтов).
- Просто установите прошивку (Levitator.ino) на плату Arduino.
- Не нужен компьютер, только блок питания 12 В после установки прошивки.
- Используйте переключатели, чтобы отрегулировать положение постоянного магнита.
- Используйте монитор последовательного порта Arduino, чтобы увидеть правильное значение для вас.
- Вы можете жестко запрограммировать правильное значение в своей игрушке.
Вы можете использовать макетную плату или сделать свою плату (Arduino Nano).
http://www.thingiverse.com/thing:1392530
Или просто купите один:
https://oshpark.com/shared_projects/kxH3Ak1b
Внимание:
- Поместите датчик Холла в нижнюю часть наконечника (top_sensor.stl), чтобы увидеть изображения;
- Для правильной работы датчик Холла должен находиться на расстоянии не менее 5 мм от электромагнитного поля;
- Вы можете использовать другой линейный датчик Холла . (не используйте переключатель датчика холла );
- Используйте неодимовые постоянные магниты (с обычными магнитами работать не будет);
- Тяжелые предметы более устойчивы;
См. Мои модели в Thingiverse для получения дополнительных сведений и советов.
Левитатор на 3D-принтере:
https://www.thingiverse.com/make:201394
Щиток для Arduino Nano:
https://www.thingiverse.com/make:201420
Это просто.
Код
- Levitator.ino
- Levitator_PID.ino
Levitator.ino Arduino
Код для игрушки Магнитная левитация с Arduino.Легко (без PID)
// =========================================================| // Ekobots Innovation Ltda - www.ekobots.com.br | // Хуан Сиргадо и Антико - www.jsya.com.br | // - -------------------------------------------------- ------ | // Программа Магнитный Левитатор - 06.02.2016 | // Все права защищены 2016 | // =========================================================| int anaPin =1; // Аналоговый вывод Arduino 1; int digPin =5; // Цифровой вывод Arduino 5; int subPin =7; // Цифровой вывод 7 Arduino; int addPin =8; // Цифровой вывод 8 Arduino; // int anaVal =0; // Значение аналогового считывания (датчик Холла); логическое значение digVal =0; // Значение цифровой записи (электромагнита); // int levVal =228; // Значение левитации; int dlyVal =250; // Значение задержки в микросекундах; // ----------------------------------------- ---------------- | void setup () {// Инициализация левитатора Begin; Serial.begin (57600); Serial.println («Левитатор от JSyA»); Serial.println ("Запускается ..."); // Настройка режима работы цифровых выводов; pinMode (digPin, ВЫХОД); pinMode (subPin, INPUT_PULLUP); pinMode (addPin, INPUT_PULLUP); // Инициализация левитатора End; Serial.println ("Запущено.");} // ------------------------------------- -------------------- | void loop () {// Считывание датчика Холла (интенсивность магнитного поля); anaVal =analogRead (anaPin); // Увеличиваем значение точки левитации; если (digitalRead (addPin) ==LOW) {levVal ++; значение_log (); задержка (250); } // Уменьшаем значение точки левитации; если (digitalRead (subPin) ==LOW) {levVal--; значение_log (); задержка (250); } // Проверяем точку левитации; если (anaVallevVal) {digVal =HIGH; } // // Включение / выключение электромагнита; // На основе значения датчика и точки левитации; digitalWrite (digPin, digVal); delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Аналоговые / цифровые / левитационные значения Печать; {// Показать значение датчика Холла; Serial.print ("anaVal =["); Serial.print (анавал); Serial.print ("] -"); // Показать состояние электромагнита On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Показать значение точки левитации; Serial.print ("levVal =["); Serial.print (levVal); Serial.println ("];");} // ===========================================================|
Levitator_PID.ino Arduino
Код для игрушки Магнитная левитация с Arduino.Hard (версия PID)
// =========================================================| // Ekobots Innovation Ltda - www.ekobots.com.br | // Хуан Сиргадо и Антико - www.jsya.com.br | // - -------------------------------------------------- ------ | // Программа PID магнитного левитатора - 2016/10/06 | // Все права защищены 2016 | // =========================================================| int anaPin =1; // Аналоговый вывод Arduino 1int digPin =5; // Цифровой вывод Arduino 5int subPin =7; // Цифровой вывод Arduino 7int addPin =8; // Цифровой вывод 8 Arduino // int anaVal =0; // Аналогичный Valieint digVal =0; // Цифровое значение // int levVal =262; // Левитация Valueint dlyVal =10; // Значение задержки // с плавающей запятой timVal =0; // Временная стоимость // -------------------------------------------- ------------- | // Значения ПИД-регулятора уставка с плавающей запятой =0; с плавающей запятой измеряемого_значения =0; с плавающей точкой на выходе =0; с плавающей запятой =0; с плавающей запятой =0; с плавающей запятой =0; с плавающей точкой с предыдущей_ошибкой =0; float dt =0.1; float Kp =1.0; float Ki =0.1; float Kd =0,01; // -------------------------- ------------------------------- | void setup () {// Инициализация левитатора Begin; Serial.begin (57600); Serial.println («Левитатор от JSyA»); Serial.println ("Запускается ..."); // Настройка режима работы цифровых выводов; pinMode (digPin, ВЫХОД); pinMode (addPin, INPUT_PULLUP); pinMode (subPin, INPUT_PULLUP); // timVal =millis (); уставка =levVal; // Инициализация левитатора End; Serial.println ("Запущено.");} // ------------------------------------- -------------------- | void loop () // PID {// Считывание датчика Холла (интенсивность магнитного поля); anaVal =analogRead (anaPin); // Расчеты ПИД-регулятора измеренное_значение =anaVal; ошибка =заданное значение - измеренное_значение; интеграл =интеграл + ошибка * dt; производная =(ошибка - предыдущая_ошибка) / dt; вывод =(-Kp * ошибка) + (-Ki * интеграл) + (-Kd * производная); previous_error =ошибка; // Настройка окончательного значения digVal + =output; // Проверяем значение точки левитации; если (digVal <0) digVal =0; если (digVal> 255) digVal =255; // Увеличить / Уменьшить значение для электромагнита; // На основе значения датчика и точки левитации; analogWrite (digPin, digVal); // Показывать значения журнала для отладки; // if ((millis () - timVal)> 500) // {// value_log (); // timVal =millis (); //} // Увеличиваем значение точки левитации; если (digitalRead (addPin) ==LOW) {заданное значение ++; значение_log (); задержка (250); } if (digitalRead (subPin) ==LOW) {заданное значение--; значение_log (); задержка (250); } // Время между изменениями состояния электромагнита; delayMicroseconds (dlyVal);} // ------------------------------------------ --------------- | void value_log () // Аналоговые / цифровые / левитационные значения Печать; {// Показать значение датчика Холла; Serial.print ("anaVal =["); Serial.print (анавал); Serial.print ("] -"); // Показать состояние электромагнита On =1 / Off =0; Serial.print ("digVal =["); Serial.print (digVal); Serial.print ("] -"); // Показываем значение точки левитации; Serial.print ("заданное значение =["); Serial.print (заданное значение); Serial.println ("];");} // ===========================================================|
Схема
Fritzing IDEПроизводственный процесс
- Самодельные простейшие часы Numitron IV9 с Arduino
- Мониторинг CO2 с помощью датчика K30
- Слепоглухое общение с 1Sheeld / Arduino
- Управление монетоприемником с помощью Arduino
- Arduino с Bluetooth для управления светодиодом!
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Игра с дисплеем Nextion
- Роботизированная рука, управляемая нунчук (с Arduino)
- Отталкивающая электромагнитная левитация Arduino
- Измерение солнечной радиации с помощью Arduino