简易磁悬浮-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4116|回复: 1

简易磁悬浮

[复制链接]
发表于 2020-7-6 10:04 | 显示全部楼层 |阅读模式

     仅带有ESP32Pico M5Stack“ ATOM LITE / MATRIX”的简易磁悬浮项目,通过一种经过改造的简单5V继电器和一个霍尔传感器来实现。
_ShHV5r0NTV.jpeg
     材料准备:
  • ESP32Pico开发板,比如ATOM LITE或 ATOM MATRIX
  • 一个改造的5V继电器
  • 一个霍尔传感器比如 A1302/A1308.
  • 一个木制圆形框架
以前制作磁悬浮使用的都是模拟比较器,比如
img_6954.jpg levitation_schematic.png
现在使用M5Stack的ESP32 SoC模块代替模拟比较器。 ATOM LITE或ATOM MATRIX都非常小(24mm * 24mm * 10mm或15mm),但是功能却丝毫不逊色,特别是内置了非常快速的12Bit-ADC,使用起来很方便。

霍尔传感器A1302现在使用3V3操作,以便电平适合ESP32 ADC。虽然这有点低于datasheet里给出的电压规范,但效果非常好。
此外,采用改造的5V继电器作为电磁铁,这里详细介绍了继电器的改造。它可以直接由3V3从ESP32控制。
1865be80-49d6-457c-9c6e-232ee3bd916f.jpeg ce5d8d41-5428-400c-abde-fc85efadcd02.jpeg d0ca4775-a3fb-4d76-b1b0-2cc74995b93f.jpeg 0af40956-c2e3-4c4f-a6b0-2e8da653e366.jpeg 66cb0ecb-8ad3-4695-937f-e51f51033ec0.jpeg
轻量级的ARDUINO IDE程序确保了ESP32的ADC行为类似于LM311模拟比较器——包括磁滞,它的控制非常稳定。以下是非常简单的编程,一旦您实验性地调试出了触发器变量的正确参数,就可以很好地工作了。这个值很大程度上取决于磁铁和有效载荷重量,因为只有几毫米的范围内,电磁铁可以控制磁性物体的悬浮高度。
注意:5V电源的质量非常重要。一开始,只要我使用笔记本电脑的USB口提供5V电源,飞行高度的稳定性就有问题。这种供电太不稳定,太不干净了。只有当我把USB集线器和稳压电源连接在一起时,它才工作得很好。
levitation_digital_schematic_HqAwugfgPv (1).png
  1. /**************************************
  2. Magnetic Levitation object:
  3. Lets a LEGO man, glued together with a neobodymium magnet, float under a modified 5V relay
  4. - SoC:            ESP32, very good: M5Stack's ATOM LITE or ATOM MATRIX
  5. - Electromagnet:  Modified 5V-Relais HW-482 with 3V3/5V transistor input
  6. - Sensor:         HALL-sensor A1302 or A1308
  7. ***************************************/
  8. // int TRIGGER     = 2740; // Triggerlevel is set to a level where weight of payload is equal to the force between magnet and electromagnet  
  9. int TRIGGER     = 2740; // good for payload = 2 Neobdym-Magnets  and a LEGO-Man  
  10. int HYST        = 35;   // Hysterese for trigger level

  11. int HALL_PIN    = 33;   // analog Signal from HALL-sensor at GPIO33
  12. int HALL_VAL    = 0;    //
  13. int RELAIS_PIN  = 23;   // GPIO23 to drive the transistor input of the modified 5V-relais  that is used as electromagnet
  14. int X           = 0;    //


  15. void setup(){
  16.   Serial.begin(115200);
  17.   pinMode(RELAIS_PIN, OUTPUT);
  18.   Serial.print("Magnetic Levitation:   START " );
  19. }


  20. void loop(){
  21.   HALL_VAL =analogRead(HALL_PIN);       //read HALL-Sensor with default 0-3.9V input >> 12bit

  22.   if (HALL_VAL < (TRIGGER + X) ){
  23.     digitalWrite(RELAIS_PIN, HIGH);     // lift the payload
  24.     X = HYST;
  25.   }
  26.   else{
  27.     digitalWrite(RELAIS_PIN, LOW);      // drop the payload
  28.     X = 0 - HYST;
  29.   }
  30. // no delay is best
  31. //  delay (1);     
  32. }
复制代码



发表于 2020-7-6 10:23 | 显示全部楼层
这个非常赞,感谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:56 , Processed in 0.106804 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表