盗梦陀螺攻略3- 上拉式磁悬浮
由 动力老男孩 发表于 2010/12/27 00:13:41有了磁悬浮陀螺的念头,我没有直接开始做下推式,而是先做一个上拉式的练练手。这件事的经历说明:对一个新手来说,可以采用由浅入深,先易后难的策略;虽然总时间可能会更长一点,但是对增强信心,掌握经验很有帮助。(好吧,水木的Joker们看到这句话一定会想歪,色情猥琐男们请自觉面壁)
上拉式磁悬浮原理相当简单。先用万能的乐高颗粒搭一个架子,把绕好的线圈固定在上面。然后用钕铁硼强磁做一个浮子。小窍门来了,我们在线圈的上方放置一个大磁铁,一开始浮子会被吸在线圈下方,慢慢的向上抬大磁铁,到一定高度时,浮子吸不住了向下落。记住这个位置,把大磁铁固定在那里。这样的效果是:线圈里只要通一点电流,就可以吸住浮子,电流一断浮子就会下落。
图中的浮子下面有个白色的东西,其实那不是什么秘诀,只是我用来标示上下的记号。大磁铁下面有好几个乐高齿轮,其实那都是调节高度用的,之所以用齿轮而不是用圆片倒是有原因的,因为我觉得比较酷
电路方面,上拉式磁悬浮只需要一个传感器,但是我还是焊了双路的板子,这样和将来的下推式用同一块就可以。电路图还没时间学习怎么画,先用画笔凑合弄了个原理图,里面省略了一些细节,不过应该能看明白了。
请注意我的电路中用了两个电位器。其中电位器1是多圈电位器,作用是调节传感器输出范围。3503很灵敏,电流被放大以后,很容易就超出0到5V的测量范围,所以在需要一个精密的电位器,让输出范围尽量在5V以内。电位器2是用来调节浮子位置的,它是我们设置的“目标位置”。Arduino开发板的作用,就是调整线圈电流大小,从而控制浮子上下移动,最终让传感器的读数等于我们设定的目标值。实物的接线图请看:
代码就非常简单了,所有的代码只有下面这几行:
int readPin = 2; //用来连接输入 int i1Pin = 36; //连接电机驱动板的I1接口 int i2Pin = 37; //连接电机驱动板的I2接口 int powerPin = 8; //连接电机驱动板的EA接口 int adjustPin = 6; boolean flag = true; int power = 0; int readValue = 0; int adjustValue = 0; void GetPowerValue() { power = readValue - adjustValue; if(power < 0) power = 0; if(power > 50) power = 50; power = power * 16 / 10; } void setup() { pinMode(i1Pin, OUTPUT); //I1和I2都是数字信号 pinMode(i2Pin, OUTPUT); //通过设置I1和I2来控制电流方向 pinMode(powerPin, OUTPUT); //按占空比方式输出的模拟信号 digitalWrite(i1Pin, !flag); digitalWrite(i2Pin, flag); //Serial.begin(9600); //设置波特率 } void loop() { //读取电位器和传感器的读数 readValue = analogRead(readPin); //传感器的电压范围是220~580,所以调节电位器的范围可以稍作调整 adjustValue = analogRead(adjustPin) / 3 + 220; GetPowerValue(); //Serial.println(readValue); //Serial.println(adjustValue); //Serial.println(power); analogWrite(powerPin, power); //delay(2000); //delay(1); }
代码虽然简单,但是在制作的过程中却走了很多弯路。这段代码的重点在于:
power = power * 16 / 10;
这个相当于是调整线圈电流的放大倍数,参数1.6如果小了则吸不住浮子,大了则无法稳定。程序中的16如果换成15或者17都不行的。因为这么一个小小的问题,我走了一星期的弯路。当时怀疑原理不对,在反复检查无果之后,已经跟圈妈提出放弃这个项目。幸好这时候得到了圈圈妈“严厉”的鼓励:遇到这么点困难就打退堂鼓,以后怎么做大事!从另一个角度说,当你想尽办法几乎绝望的时候,其实已经接近成功了,因为你已经排除了大部分错误。
果然第二天就解决了问题!后来在制作下推式的时候,类似的事情又一次发生,那次主要问题在于线圈绕的不行,而重做线圈是一个非常浩大的工程,同样也是在圈妈的鼓励下,终于下决心重新做一遍。在此向顽强的圈妈表示敬意(圈妈表示鸭梨不大,反正她不出力干活^_^ )
这个实验最终的经验总结如下:
1,参数很重要!如果你的磁悬浮上下跳动的厉害,恭喜你,其实你已经接近成功了。
2,这个试验中的参数有效范围非常窄,跟程序也有关系,后面会介绍一种PID算法,可以扩大范围,更容易调节。
3,坚持,太累的时候放松一下,然后换个思路想想。
视频如下: