Arduino下面的电机速度设定最近在整理小学信息技术教材的套件,其中有一课用到了电机,于是采用了电机驱动板,但是L293D驱动板用起来比较复杂,mblock又没有相应的 扩展,只好自己动手丰衣足食.
虽然官方扩展开发指导说扩展的开发没有想象中的难,但是想说爱真的不容易,简单的功能很容易实现但是复杂的功能需要经过反复调试.
用上述办法控制任意一个电机转动是没有问题的,另外我注意到L293D的1,3号电机可以正转反转,而2,4号电机只能正转,不知道是我程序的问题,还是接线的问题,还是其他原因.
深入认识mblock
Scratch模式
最开始的时候,mblock往往单纯被当做是Scratch软件的替代品,此为第一境界;或者单纯作为Arduino IDE的图形化编程替代品,后来才知道Arduino功能很强大,我去年10月份一直想找一款类似于Scratch 1.4下S4A的软件,一直没有找到,后来接触到了ScratchPi(树上科技),以及诺丁科技都在开发类似的产品,直到前阵子我才意识到,原来mblock支持刷入固件实时交互,***舞台上的角色可以实时说出传感器的读数.
Scratch模式 Scratch模式和Arduino模式Arduino模式
Arduino模式这种模式跟传统的Arduino IDE的使用方法类似,不过使用Scratch图形化编程方式编程.
L293D电机驱动板
介绍
扩展开发
通过阅读扩展开发指导,我照葫芦画瓢做出了L293D驱动扩展模块.并且为了跟mBot的电机类似,我在c代码里面做了一定出力,根据用户设定的速度正负,自动正转或者反转.
["w",
"设置电机 %d.motors 速度为 %d.motorspeed",
"runMotor",
"1",
"255",
{"encode":"{d0}{d1}",
"setup":" int motorspeed = {1} ;\n if( motorspeed >= 0){\n motor.setSpeed(motorspeed);\n
motor.run(FORWARD);\n }\n if (motorspeed <0 ){\n motor.setSpeed(motorspeed);\n motor.run(BACKWARD);\n
}\n ",
"inc":"#include <AFMotor.h>\n",
"def":"AF_DCMotor motor({0});\n",
"work":"",
"loop":""}],
说明
encode,代表是参数,与你在代码块外观设定的要一致.
setup对应了Arduino c代码中的setup中的内容,inc代表了要引入的库
def是在setup之前定义的代码
work是不断执行的代码
我觉得Arduino离线模式的代码扩展比较容易,就是通过这个json串来定义生成的c代码的对应关系,或者定义生成c代码的规则,比较容易;但是同时如果你规则定义的不够合理,那么你的程序也就存在很大的问题
存在问题
虽然这个扩展能够驱动电机,但是当我需要同时让多个电机转动的时候就无能为力了.
控制1个电机然而我需要控制两个电机的时候就存在问题:
控制多个电机存在问题可以看到当我们拖入两个控制电机的代码块的时候,
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <AFMotor.h>
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
AF_DCMotor motor(1);
AF_DCMotor motor(2);
# 这里声明了两个电机
void setup(){
# 但是setup函数中只控制了一个
int motorspeed = 255 ;
if( motorspeed >= 0){
motor.setSpeed(motorspeed);
motor.run(FORWARD);
}
if (motorspeed <0 ){
motor.setSpeed(motorspeed);
motor.run(BACKWARD);
}
}
void loop(){
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}
void _loop(){
}
依次执行代码
如何依次让电机转动,写驱动看似容易,但是实际上很容易犯错误.
改进
理论上,c能够控制的,通过扩展的方式mblock也可以,但是要注意扩展的书写方式,不然人容易出错.
而且Scratch模式下的扩展开发则更为复杂,因为涉及到固件的通讯协议.
继续完善.
网友评论