使用 Arduino 的磁悬浮
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
带 Arduino 的悬浮器。
您可以 3D 打印或不打印身体。
https://www.thingiverse.com/thing:1392023
- 易于打印和安装(只需胶水,无需螺丝)。
- 只需在 arduino 板上安装固件 (Levitator.ino)。
- 安装固件后不需要电脑,只需12V电源即可。
- 使用开关来调整永磁体的位置。
- 使用 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.inoArduino
带有 Arduino 的磁悬浮玩具代码。Easy(无PID)
//==========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// 程序磁悬浮仪 - 2016/02/06 |// 版权所有 2016 |//============================================================|int anaPin =1; // Arduino 模拟引脚 1;int digPin =5; // Arduino 数字引脚 5;int subPin =7; // Arduino 数字引脚 7;int addPin =8; // Arduino 数字引脚 8;//int anaVal =0; // Analogic Read(Hall Sensor) Value;boolean digVal =0; // 数字写入(电磁体)值;//int levVal =228; // 悬浮点值;int dlyVal =250; // 延迟值微秒;//----------------------------------------- ----------------|void setup(){ // 悬浮器初始化开始; Serial.begin(57600); Serial.println("JSyA 的悬浮器"); Serial.println("开始..."); // 数字引脚工作模式设置; pinMode(digPin,输出); pinMode(subPin, INPUT_PULLUP); pinMode(addPin, INPUT_PULLUP); // 悬浮器初始化 End; Serial.println("Started.");}//------------------------------------------------ --------------------|void loop() { // 霍尔传感器读取(磁场强度); anaVal =模拟读取(anaPin); // 增加悬浮点的值; if (digitalRead(addPin) ==LOW) { levVal++;值日志();延迟(250); } // 降低悬浮点的值; if (digitalRead(subPin) ==LOW) { levVal--;值日志();延迟(250); } // 检查悬浮点;如果(anaVallevVal) { digVal =HIGH; } // // 打开/关闭电磁铁; // 基于传感器值和悬浮点;数字写入(digPin,digVal); delayMicroseconds(dlyVal);}//----------------------------------------- ---------------|void value_log()// 模拟/数字/悬浮值打印;{ // 显示霍尔传感器值; Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-"); // 显示电磁铁状态 On=1/Off=0; Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-"); // 显示悬浮点值; Serial.print("levVal=["); Serial.print(levVal); Serial.println("];");}//============================================================|
Levitator_PID.inoArduino
带有 Arduino 的磁悬浮玩具代码。硬(PID 版本)
//==========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// 程序磁悬浮器PID - 2016/10/06 |// 版权所有2016 |//============================================================|int anaPin =1; // Arduino 模拟引脚 1int digPin =5; // Arduino 数字引脚 5int subPin =7; // Arduino 数字引脚 7int addPin =8; // Arduino 数字引脚 8 //int anaVal =0; // 类比值 digVal =0; // 数字值//int levVal =262; // 悬浮值int dlyVal =10; // 延迟值//float timVal =0; // 时间值//-------------------------------------------- -------------|// PID 值float setpoint =0;float测量值=0;float输出=0;float积分=0;float导数=0;float error =0;float previous_error =0;float dt =0.1;float Kp =1.0;float Ki =0.1;float Kd =0.01;//------------------------ -------------------------------|void setup(){ // 悬浮器初始化开始; Serial.begin(57600); Serial.println("JSyA 的悬浮器"); Serial.println("开始..."); // 数字引脚工作模式设置; pinMode(digPin,输出); pinMode(addPin, INPUT_PULLUP); pinMode(subPin, INPUT_PULLUP); // timVal =毫秒();设定值 =levVal; // 悬浮器初始化 End; Serial.println("Started.");}//------------------------------------------------ --------------------|void loop() // PID{ // 霍尔传感器读取(磁场强度); anaVal =模拟读取(anaPin); // PID 计算测量值 =anaVal;错误 =设定点 - 测量值;积分 =积分 + 误差 * dt;导数 =(error - previous_error) / dt;输出 =(-Kp * 误差) + (-Ki * 积分) + (-Kd * 导数); previous_error =错误; // 最终值设置 digVal +=output; // 检查悬浮点的值;如果 (digVal <0) digVal=0;如果 (digVal> 255) digVal=255; // 增加/减少电磁铁的值; // 基于传感器值和悬浮点;模拟写入(digPin,digVal); // 显示调试的日志值;// if((millis()-timVal)> 500)// {// value_log();// timVal =millis();// } // 增加悬浮点的值; if (digitalRead(addPin) ==LOW) { setpoint++;值日志();延迟(250); } if (digitalRead(subPin) ==LOW) { setpoint--;值日志();延迟(250); } // 电磁铁状态变化之间的时间; delayMicroseconds(dlyVal);}//----------------------------------------- ---------------|void value_log()// 模拟/数字/悬浮值打印;{ // 显示霍尔传感器值; Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-"); // 显示电磁铁状态 On=1/Off=0; Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-"); // 显示悬浮点值; Serial.print("setpoint=["); Serial.print(setpoint); Serial.println("];");}//============================================================|
示意图
Fritzing IDE制造工艺