查看: 2109|回复: 5

[分享] blinker 控制42步进电机

[复制链接]

该用户从未签到

发表于 2020-5-19 13:36 | 显示全部楼层 |阅读模式
本帖最后由 songyx005 于 2020-5-19 13:39 编辑

刚开始学习esp8266,偶尔发现了blinker,感觉就一神器,满足了我能“看”的要求。想控制42步进,但是网上没有找到太靠谱的教程(大多是用ULN2003A控制的小步进),经过几天的踩坑,终于能够控制,当然,程序中还有很多问题,请各位大佬指出
首先说一下,我是用的步进驱动器控制的42步进,其实回过头来看控制很简单,只要发送脉冲到步进驱动器,就可以转动。
接线如图:
微信图片_20200519133328.jpg
B- B+  A-  A+ 连接步进;
脉冲+  连接esp8266  D1 引角;
脉冲-  连接esp8266 G
DC电源  连接到24v电源

生成脉冲,esp8266 自带了两个特别有用的函数
tone(pin, x);  pin为引脚   x为脉冲频率
notone(pin); 停止生成脉冲
大家有兴趣可以查一下手册

App端如何设置我就不写了,这里放一张各组件名称
微信图片_20200519133320.jpg

程序实现功能:按“加速”电机转速增加;按“减速”电机转速减小;拖动滑块“转速”可惊变电机转速;“转速”显示此时转速;

另外面包板上还安装了两个开关,分别接到D2 D3引脚各地,可以实现面包板控制转速

微信图片_20200519133332.jpg

顺便说一下,我调试是在D1上接一个LED灯,通过观察LED灯的闪烁,更容易观察脉冲。tone函数产生的是占空比为50%的方波,所以led灯只能看到闪烁,不能看到呼吸灯效果。

程序如下:

#define BLINKER_WIFI
#define DJ 5   //D1   输出脉冲
#define DJ_P 4   //D2  加速
#define DJ_M 0   //D3  减速
  
#include <Blinker.h>

int n=0;

char auth[] = "xxx";
  
char ssid[] = "xxxx";
  
char pswd[] = "xxxx";
  

// 新建组件对象
  
BlinkerButton ButtonP("btn-P");//提速

BlinkerButton ButtonM("btn-M");//减速

BlinkerButton ButtonG("btn-G");//电机停

BlinkerSlider SliderDJ("ran-dj");//滑块组件

BlinkerNumber NumberDJ("num-DJ");//显示转速组件

// 按下按键即会执行该函数
  
void buttonP_callback(const String &state) {
  
   BLINKER_LOG("get button state: ", state);
  
    n=n+1;

    NumberDJ.print(n);;
   
   Serial.print("电机转速: ");
   Serial.print(n); //这个地方显示的并不是每分钟多少转,而是一分钟发出多少个脉冲,转速多少要看步进设置,例如每个脉冲3.6度,100个脉冲才转一圈
   Serial.print(",");
   Serial.println("r/min");
   
   Blinker.vibrate();
  
}
void buttonM_callback(const String &state1) {
  
   BLINKER_LOG("get button state: ", state1);
  
   n=n-1;
   if(n<0)//转速小于0时,打印error
    {
     n=0;
     Serial.print("Error");
     }
     
   NumberDJ.print(n);

  Serial.print("电机转速: ");
  Serial.print(n);
  Serial.print(",");
  Serial.println("r/min");
  
   Blinker.vibrate();
  
}

void buttonG_callback(const String &stateG) //电机停止
{
   BLINKER_LOG("get button state: ", stateG);

   tone(DJ, 0);

   n=0;

   Serial.print("电机停止");
   
   Blinker.vibrate();
  
}

void sliderDJ_callback(int32_t value)
{
BLINKER_LOG("get slider data: ", value);
  
n=value;

NumberDJ.print(n);
  
Serial.print("电机转速:");
Serial.print(n);
Serial.println("r/min");
}
  
void setup() {
  
   // 初始化串口,并开启调试信息
  
   Serial.begin(115200);   
  
   BLINKER_DEBUG.stream(Serial);
   BLINKER_DEBUG.debugAll();
  
   // 初始化有LED的IO
  
   pinMode(DJ, OUTPUT);
   digitalWrite(DJ, 0);

   pinMode(DJ_P,INPUT_PULLUP);
   pinMode(DJ_M,INPUT_PULLUP);
  
   // 初始化blinker
  
   Blinker.begin(auth, ssid, pswd);
  
  ButtonP.attach(buttonP_callback);
  ButtonM.attach(buttonM_callback);
    ButtonG.attach(buttonG_callback);
   SliderDJ.attach(sliderDJ_callback);

   NumberDJ.print(0);//开机转速显示0

     tone(DJ, 0);//开机转速0
}
void loop() {
  
   Blinker.run();

   tone(DJ, n);
//面包板加减速控制
if(digitalRead(DJ_M)==0)//是否按下开关
  {                 
   delay(100);            //去抖
    if(digitalRead(DJ_M)==0)  //是否按下开关
    {
     while(!digitalRead(DJ_M));//抬手检测
       n--;   

          if(n<0)
    {
     Serial.println("Error");
     n=0;
    }
  else
    {
   Serial.print("电机转速: ");
   Serial.print(n);
   Serial.print(',');
   Serial.println("r/min");
      }
    }  
   }
   
if(digitalRead(DJ_P)==0)
  {
   delay(100);
   if(digitalRead(DJ_P)==0)
    {
     while(!digitalRead(DJ_P));     
    n++;
   Serial.print("电机转速: ");
   Serial.print(n);
   Serial.print(',');
   Serial.println("r/min");
    }
   }
遇到的问题:
1.    拖动滑块,滑块组件显示的转速不准确,例如拖到100,数字组件显示90,调试窗口也是90,不清楚是什么原因。有时准确,有时不准
2.    使用加减速按钮调节转速后,滑块组件显示转速不同步,这应该是滑块组件不能接收数据的原因,希望大佬能更新一下APP,使滑块组件也可以接收数据



该用户从未签到

发表于 2020-5-20 14:24 | 显示全部楼层
SliderDJ.print(X);  就是设置滑块数值的 你同步上返回指定数值就会改变滑块数值

该用户从未签到

 楼主| 发表于 2020-5-20 16:19 | 显示全部楼层
howlet 发表于 2020-5-20 14:24
SliderDJ.print(X);  就是设置滑块数值的 你同步上返回指定数值就会改变滑块数值 ...

OK,已解决

该用户从未签到

发表于 2021-4-21 09:26 | 显示全部楼层
请问8266的脉冲 够大吗 ,给驱动器够用吗?

签到天数: 8 天

[LV.3]偶尔看看II

发表于 2021-6-15 20:13 来自手机 | 显示全部楼层
可以控制步数吗?

该用户从未签到

 楼主| 发表于 2021-6-17 16:04 | 显示全部楼层
bhc1365 发表于 2021-6-15 20:13
可以控制步数吗?

可以啊,通过脉冲数控制频数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

20sffactory 三自由度3D打印机械手臂 - 高速移动
20sffactory 三自由度3D打
这款机械臂作者没有给他起名字,用作者的名字来命名. 目前为止,生态最好,做的最完
多位数码管显示项目——以TM1650为例
多位数码管显示项目——以
以下是用搭载TM1650的4位数码管,显示电位器所代表0到1023的模拟信号数值 示意图:
智能“百味”勺子开发实战营,为你的生活添滋味!
智能“百味”勺子开发实战
想不想拥有一把神奇的“百味”勺子,把索然无味的食物变出酸甜苦辣咸的丰富滋味
新手小白付费拜师求教:TM1650四位时钟数码管的具体用法
新手小白付费拜师求教:TM
从淘宝购买的TM16504位数码管的时钟模块,卖家给了程序,但是完全不会用。求一位老师
【Arduino】168种传感器模块系列实验(76)---TTL转RS-485模块
【Arduino】168种传感器模
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表