机器谱

如何使用探索者其他扩展板

作者:机器谱

图文展示3264(1)

图文展示3264(1)

副标题

Birdmen
舵机扩展板
步进扩展板

1. 简介

      探索者Birdmen手柄扩展板可以堆叠连接到任何兼容Arduino标准接口的控制板或扩展板上,供用户快速制作游戏手柄、无线遥控器、机器人控制器等设备。Birdmen与Bigfish配合使用还能快速实现示教编程,帮助没有任何编程基础的用户快速制作简易的智能机器人。









2. 特点

  · 完全兼容Arduino 接口

  · 摇杆X\Y轴输出为两个电位器,可以通过AD转换读出扭动角度

  · 两路独立按键,数字输出,方便使用

  · 板上标注有各个模块的端口配置,方便调试

  · 预留了其他没有占用的端口,方便后期扩展

  · 通过该扩展板可以制作一个遥控手柄,结合无线模块可实现无线控制

  · 结合Arduino DUE还可以模拟电脑鼠标等

  · 带示教编程固件


3. 参数

  · 两个PS2游戏摇杆(A0/A1、A2/A3)

  · 两个独立按键(D2、D3)

  · 兼容BIGFISH扩展板的扩展接口

  · 1个IIC接口、1个TTL串口

  · 8个LED指示灯(D4~D11)


实物图片与接口

5. 熟悉birdmen上各个交互器件的基础编程

器材:Birdmen手柄扩展板、Basra控制板、miniUSB数据线。

硬件连接:将Birdmen扩展板堆叠连接到Basra控制板上,将Basra控制板通过miniUSB数据线连接到电脑上。

①读取Pad0纵向摇杆(A0引脚)数值,并在Serial Monitor中显示出来。图形化程序如下:









②读取Button0按键的值(D2引脚),并在Serial Monitor中显示出来。代码如下:










③点亮连接到D4针脚的Led灯









④按下Button0时,才点亮D4针脚的Led灯

void setup()

{

  Serial.begin(9600);

}


void loop()

{

  Serial.print(analogRead(A0));

  Serial.println();

}

void setup()

{

  pinMode( 2, INPUT);

  Serial.begin(9600);

}


void loop()

{

  Serial.print(digitalRead(2));

  Serial.println();

}

void setup()

{

  pinMode( 4 , OUTPUT);

}


void loop()

{

  digitalWrite( 4 , LOW );

}

void setup()

{

  pinMode( 2, INPUT);

  pinMode( 4 , OUTPUT);

}


void loop()

{

  if (!( digitalRead(2) ))

  {

    digitalWrite( 4 , LOW );

  }

  else

  {

    digitalWrite( 4 , HIGH );

  }

}

#include <Wire.h>

#include <pasta.h>

#include <Arduino.h>

#include <Servo.h>

#include <EEPROM.h>

#include <SignalFilter.h>

#include "LedControl.h"

#include <MsTimer2.h>


int mychannel=0;


int ledPort[2] = {7,8}; //定义灯的引脚

int sensorPort[2] = {A0,A4};

Button button[2];

Joypad joypad[2];

Servo myServo;

Bmotor myMotor[2];

LedControl lc=LedControl(12,11,13,1); //config 8*8 led


bool isAutomode;

bool isRecording;

bool isPlaying;

bool isTrigger[2];


int valueServo;

int valueMotor[2];


#define DELTATIME 10

#define ACTTIMESCALE 20

#define RECORDLED 10

#define PLAYLED 10

#define MAXLENGTH 150

#define ADD_CHANNEL 1001


int time;

int currentLength;

int actLength;

int valueAct[MAXLENGTH][3];


void setup()

{

Wire.begin();

Serial.begin(9600);

MsTimer2::set(DELTATIME, Timer);


isAutomode = true;

isRecording = false;

isPlaying = false;


button[0].initial(2);

button[1].initial(3);

joypad[0].initial(A0,A1);

joypad[0].setDiscreteness(100); //直流电机仅3种状态

joypad[1].initial(A2,A3);

joypad[1].setDiscreteness(10); //舵机分20级

for(int i=0;i<2;i++){

pinMode(ledPort[i], OUTPUT);

digitalWrite(ledPort[i], HIGH);

pinMode(sensorPort[i], INPUT_PULLUP);

}


LedInit();

myServo.attach(4);

myMotor[0].initial(9,10);

myMotor[1].initial(5,6);

}


void loop()

{

for(int i=0;i<2;i++){

button[i].polling();

if(button[i].isUp)

startControlMode(i);

}


  if(isAutomode){

  for(int i=0;i<2;i++){

  isTrigger[i] = !digitalRead(sensorPort[i]);

  LedDot(0, i, isTrigger[i]);

  if(isTrigger[i]){

  if(isPlaying){

  if(i != mychannel){

  mychannel = i;

  stopPlaying();

  startPlaying();

  }

  }

  else{

  mychannel = i;

  startPlaying();

  }

  }

  }

  }

  else{

freeControl();

if(isRecording)

recording();

  }


if(isPlaying)

playing();

}


void Timer(){

time++;

}


void LedInit()

{

lc.shutdown(0,false); //start the 8*8 led

lc.setIntensity(0,8);

LedClear();

}


void LedClear()

{

lc.clearDisplay(0);

}


void LedDot(int x, int y, boolean s)

{

if(x<0)x=0;

if(x>7)x=7;

if(y<0)y=0;

if(y>7)y=7;

lc.setLed(0,x,y,s);

}


void recordDetect(){

if(isPlaying){

stopPlaying();

}

else{

isRecording = !isRecording;

if(isRecording){

startRecording();

}

else{

stopRecording();

}

}

}


void startRecording(){

time = 0;

currentLength = 0;

MsTimer2::start();

}


void stopRecording(){

MsTimer2::stop();

isRecording = false;

showChannel(mychannel,true);

actLength = currentLength;

saveData();

}


void startPlaying(){

isPlaying = true;

time = 0;

currentLength = 0;

loadData();

MsTimer2::start();

}


void stopPlaying(){

MsTimer2::stop();

isPlaying = false;

}


void recording(){

static bool isFlash;

if(time % RECORDLED == 0)

isFlash = !isFlash;

showChannel(mychannel,isFlash);


if((time / ACTTIMESCALE) > currentLength){

valueAct[currentLength][0] = valueMotor[0];

valueAct[currentLength][1] = valueMotor[1];

valueAct[currentLength][2] = valueServo;

currentLength++;

if(currentLength >= MAXLENGTH)

stopRecording();

}

}


void playing(){

static bool isFlash;

if(time % PLAYLED == 0)

isFlash = !isFlash;

showChannel(mychannel,isFlash);

if((time / ACTTIMESCALE) > currentLength){

myMotor[0].run(valueAct[currentLength][0]);

myMotor[1].run(valueAct[currentLength][1]);

myServo.write(valueAct[currentLength][2]);

currentLength++;

if(currentLength >= actLength)

stopPlaying();

}

}


void freeControl(){

for(int i=0;i<2;i++)

joypad[i].polling();  


valueServo = (int)map(joypad[1].x,-100,100,10,160);

valueMotor[0] = (int)map(joypad[0].x,-100,100,-1,1);

valueMotor[1] = (int)map(joypad[0].y,-100,100,-1,1);


if(joypad[1].isChangeX)

myServo.write(valueServo);


if(joypad[0].isChangeX)

myMotor[0].run(valueMotor[0]);


if(joypad[0].isChangeY)

myMotor[1].run(valueMotor[1]);


if(joypad[1].y == -100)

isTrigger[0] = true;

else

isTrigger[0] = false;


if(joypad[1].y == 100)

isTrigger[1] = true;

else

isTrigger[1] = false;


for(int i=0; i<2; i++){

   if(isTrigger[i] && !isRecording){

if(isPlaying){

if(i != mychannel){

mychannel = i;

stopPlaying();

startPlaying();

}

}

else{

mychannel = i;

startPlaying();

}

}

}

}


void showChannel(int channel, bool s){

if(channel == 0){

digitalWrite(ledPort[0], HIGH);

digitalWrite(ledPort[1], !s);

}

if(channel == 1){

digitalWrite(ledPort[1], HIGH);

digitalWrite(ledPort[0], !s);

}

}


void saveData(){

EEPROM.write(ADD_CHANNEL + mychannel, actLength);

for(int i=0; i<actLength; i++)

for(int j=0; j<3; j++)

EEPROM.write(i * 3 + j + mychannel * MAXLENGTH * 3, valueAct[i][j] + 1);

}


void loadData(){

actLength = EEPROM.read(ADD_CHANNEL + mychannel);

for(int i=0; i<actLength; i++)

for(int j=0; j<3; j++)

valueAct[i][j] = EEPROM.read(i * 3 + j + mychannel * MAXLENGTH * 3) - 1;

}


void startControlMode(int channel){

if(isAutomode){

mychannel = channel;

showChannel(channel,true);

isAutomode = false;

stopPlaying();

}

else{

if(mychannel == channel){

recordDetect();

}

else{

mychannel = channel;

isRecording = false;

isPlaying = false;

showChannel(channel,true);

}

}

}

6. 实现示教编程

器材:Birdmen手柄扩展板、Bigfish扩展板、Basra控制板、连接线、miniUSB数据线、锂电池、舵机1、直流电机2个、触碰传感器2个。

硬件连接:将Bigfish扩展板堆叠连接到Basra控制板上,将Birdmen手柄扩展板堆叠连接到Bigfish扩展板上。











其他硬件连接及Birdmen按键功能如下图所示:

下载固件Teaching.ino到Basra主控板,源代码如下:

操作过程:

1、将Birdmen手柄扩展板、Bigfish扩展板和Basra控制板堆叠连接好;

2、将舵机和电机连好,先不要连接传感器;

3、打开电源开关;

4、此时处于“自主模式”,操作电机0/1和舵机0的摇杆,没有反应;

5、按一下录制0/1按键,Led0/1灯会亮起,表示进入“示教模式”;

6、在示教模式下,操作电机0/1和舵机0的摇杆,电机和舵机会相应转动;

7、如果第5步按下的是录制0按键,那么再按一下录制0按键,Led0会开始闪动,表示进入录制状态;如果第5步按下的是录制1按键,那么再按        一下录制0按键,Led1会熄灭,Led0会亮起,此时又按一下录制0按键,Led0会开始闪动,表示进入录制状态;

8、在录制状态下,操作电机或舵机,操作过程会被记录下来;

9、完成录制操作后,按一下录制0按键,结束录制。如果录制时间超过30秒,则会自动结束录制;

10、将播放摇杆拨动到播放0的位置,将开始自动执行刚才录制的动作;

11、关闭主控板电源,拔下Birdmen扩展板,将传感器0安装到Bigfish扩展板的相应端口上。重新打开电源,此时处于自主模式,传感器0若触发,将自动播放前面录制0的动作。

7. 无线遥控器

利用Birdmen和NRF模块可以制作无线遥控手柄,详情请见:通识-【U011】如何使用探索者通信模块-NRF模块

8. 原理图

9. 资料清单

序号

内容
1

Birdmen示教编程固件


Birdmen
文件下载
【整体打包】-【U012】如何使用探索者的其他扩展板-Birdmen-资料附件.zip
2.96KB下载6次下载
上一页 1 下一页

1. 简介

      Arduino是开源的控制板,非常适合爱好电子制作的朋友制作互动作品,但对于一些不熟悉电子技术的爱好者,要在Arduino控制板上添加电路是一个比较麻烦是事,所以我们设计了一个专用于简单机器人的扩展板,能将更多的舵机轻松地和Arduino控制板连接。

      SH-SR舵机扩展板共有28个舵机接口和2个直流电机接口。此扩展板采取TLC5940串行转并行芯片,可以把5个IO,转化为16个PWM接口。并且此芯片可以采取级联的形式,进一步扩展IO数量。对于IO资源有限的CPU进行扩展很有帮助。

2. 特点

  · 兼容Arduino控制板标准接口

  · 全部铜制插针,用料考究,电器性能稳定

  · 优秀PCB设计,美观大方

  · 多种特殊接口设计,兼容部分探索者电子模块,使用方便

  · 所有接口采用清晰丝印标注引脚设计,尽可能的避免电子模块间连线造成的误操作

  · 板载舵机接口、直流电机驱动芯片、可直接驱动舵机、直流电机等机器人常规执行部件,无需外围电路

  · 采用两种供电方式,DC插头或者接线端子

  · 采用分别供电方式,使电路电压更加稳定

3. 参数

  · 板载两片直流电机驱动芯片L9170,支持3v~15vvin电压,可驱动两个直流电机。

  · 采用两个TLC5940芯片,可以同时驱动28路 舵机以及2路直流电机

  · 预留TXRX5VGND四个引脚方便扩展

  · IRHEXFET功率场效应管irf3205采用先进的工艺技术制造,具有极低的导通阻抗。irf3205这种特性,加上快速的转换速率,和以坚固耐用著称的HEXFET设计,使得irf3205成为极其高效可靠、应用范围超广的器件。IRF3205MOS场效应管,它在逆变器里的作用是当做开关管的。逆变器是一种将直流电(DC)转化为交流电(AC)的装置。它由逆变桥、控制逻辑和滤波电路组成。

  · 电机部分采用48550 PNP型三极管起到电流放大作用


4. 注意事项

(1)SH-SR舵机扩展板需要与Basra/Arduino堆叠使用,并且要分别供电,当有一个断电后,扩展板板都会失去作用。

(2)SH-SR舵机扩展板供电需要8V以下电源,并且电流不得超过6A。否则三极管极易烧毁。

(3)此扩展板占用了Basra/Arduino UNO的3、9、10、11、12共5个接口。

5. 实物图片与接口

6. 与控制板堆叠连接

7. 控制直流电机。

器材:Basra/Arduino UNO控制板、SH-SR扩展板、直流电机、舵机、4芯输入排线、miniUSB下载线、锂电池等。

先将函数库Tlc5940复制到Arduino软件目录下libraries文件夹内。

编写并上传以下代码,这个例程的内容是控制连接在28、29端口的直流电机实现一个正反转的效果,这个原理和控制电机调速完全一样。

#include "Tlc5940.h"

void setup()

{

  Tlc.init(0);       //引脚初始化

}

void loop()

{

 

    Tlc.set(28, 4000);   //设置PWM输出,范围 0 ~ 4095

    Tlc.set(29, 0);     

    Tlc.update();      //设置引脚PWM后使用update()更新设置

    delay(2000);

    Tlc.set(28, 0);

    Tlc.set(29, 4000);

Tlc.update();

delay(2000);


}

#include "Tlc5940.h" //库头文件,该文档同目录下文件,使用时放置在Arduino软件目录下libraries文件夹内

#include "tlc_servos.h"//库头文件,该文档同目录下文件,使用时放置在Arduino软件目录下libraries文件夹内

void setup()

{

  Tlc.init(0);      //引脚初始化

  tlc_initServos();   //设置PWM频率为50HZ

}


void loop()

{


    tlc_setServo(0, 45);   //舵机角度设置(0~27的端口号,转动角度)

    Tlc.update();       //PWM或者舵机角度设置后使用update()更新设置

    delay(500);

    tlc_setServo(0, 90);

    Tlc.update();

    delay(500);

}

8. 控制舵机

      将一个舵机连接到SH-SR扩展板的0号舵机接口上,注意舵机连接线的黑线与GND端口相连。

编写并上传以下代码。

9. 资料清单

序号

内容
1

Tlc5940函数库

2舵机控制上位机软件(C#)


舵机扩展版
文件下载
【整体打包】-【U012】如何使用探索者的其他扩展板-舵机扩展板-资料附件.zip
67.12MB下载4次下载
上一页 1 下一页

1. 简介

探索者SH-ST步进电机扩展板采用A4988步进电机驱动芯片,该扩展板可用作雕刻机,3D打印机等设备的步进电机驱动扩展板。SH-ST一共有4路步进电机驱动模块插槽,可驱动4路步进电机,而每一路步进电机都只需要2个IO口,也就是说,6个IO口就可以很好的管理3个步进电机,使用起来非常方便,告别传统步进电机的繁琐操作。

Arduino UNO主控板(探索者Basra主控板)与模块IO口对应关系介绍,步进电机的基本控制需要的引脚,其它引脚是在驱动雕刻机或3D打印机的时候才用到的,这里不做详解,IO对应如下:

Arduino UNO/Basra接口

SH-ST扩展板接口

D8

EN(步进电机驱动使能端,低电平有效)

D13A.DIR(A的方向控制)
D7Z.DIR(Z轴的方向控制)
D6Y.DIR(Y轴的方向控制)
D5X.DIR(X轴的方向控制)
D12A.STEP(A的步进控制)
D4Z.STEP(Z轴的步进控制)
D3Y.STEP(Y轴的步进控制)
D2X.STEP(X轴的步进控制)


M0

M1M2

微步解析

LLL全步进
HLL1/2步进
LHL1/4步进
HHL1/8步进
HHH1/16步进


2. 特点

  · 完全兼容Arduino控制板标准接口

  · 全部铜制插针,用料考究,电器性能稳定

  · 优秀PCB设计,美观大方

  · 多种特殊接口设计,兼容部分探索者电子模块,使用方便

  · 多种供电模式:主控板供电或者扩展板供电(DC插头供电),方便使用

  · 所有接口采用清晰丝印标注引脚设计,尽可能的避免电子模块间连线造成的误操作

  · 可同时驱动四路步进电机(亦可通过TX,RX串口级联其他扩展板)驱动更多步进电机

  · 电源开关设置,可以直接控制通断电(从扩展板供电)

3. 参数

  · 12的输入电压,扩展板和控制板共用一个电源即可

  · 预留TX、RX、5V、GND、3.3V、SCL、SDA、RST等引脚方便扩展

  · 有五种细分模式分别是:全步进、1/2步进、1/4步进、1/8步进、1/16步进

  · A4988模块上可调电位器可以调节最大电流输出,从而获得更高的步进率

  · 模块上自动电流衰减模式检测\选择

  · 接地短路保护和加载短路保护

4. 细分设置

      4.1关于三个模式选择端 M0,M1,M2我们全部接地也就是全步进模式(转一圈要200个步进值或者一步进1.8°),如果要求精度更高,我们可以通过选择其他的模式,比如我们选择1/4步进模式,那么我们电机转一圈就要送800个微步才能完成。

      4.2模式选择与M0, M1 ,M2之间的关系:(对应细分跳线帽对应位置如图5.1所示,L表示去掉跳线帽,H表示插上跳线帽)

5. 实物图片与接口

SH-ST扩展板实物图

步进电机驱动芯片A4988模块引脚图

(图中最下面十字螺丝类似的是电位器,使用时需保证电位器十字尽量如图所示不偏移)

扩展板去掉芯片之后的示意图

(每个细分部分由三个跳线帽组成)

扩展板与basra堆叠示意图

(芯片接插时要注意电位器的方向!!!电位器朝向与DC电源接口一致。)

6. 控制4路步进电机

器材:SH-ST步进电机扩展板×1,Basra控制板×1,11.1V动力电池×1,电源报警器×1,步进电机×4,步进电机连接线×4,USB数据线×1;

电路连接:将步进电机扩展堆叠到basra主控板上,注意步进电机个芯片贴好散热片,将11.1V动力电池通过电源导线接到SH-ST扩展板DC电源头位置,注意SH-ST电源开关关闭。将4个步进电机插接到SH-ST扩展板上(步进电机线为排线,插反不会烧毁,只会反转,这点和直流电机类似)。

      分别编写并烧录以下两段程序,一个使用了函数库,一个未使用函数库,效果都是实现4个步进电机的方向控制和转动圈数控制。

未使用函数库的写法,代码如下(manto_test.ino):

//下面是简单的步进电机控制程序,

#define EN        8       //步进电机使能端,低电平有效

#define X_DIR     5       //X轴 步进电机方向控制

#define Y_DIR     6       //y轴 步进电机方向控制

#define Z_DIR     7       //z轴 步进电机方向控制

#define A_DIR     13      //a轴 步进电机方向控制

#define X_STP     2       //x轴 步进控制

#define Y_STP     3       //y轴 步进控制

#define Z_STP     4       //z轴 步进控制

#define A_STP     12      //a轴 步进控制

/*

//函数:step    功能:控制步进电机方向,步数。

//参数:dir 方向控制, dirPin对应步进电机的DIR引脚,stepperPin 对应步进电机的step引脚, steps 步进的步数

//无返回值

*/

void step(boolean dir, byte dirPin, byte stepperPin, int steps)

{

  digitalWrite(dirPin, dir);

  delay(50);

  for (int i = 0; i < steps; i++) {

    digitalWrite(stepperPin, HIGH);

    delayMicroseconds(800);   //调试步进电机速度函数

    digitalWrite(stepperPin, LOW);

    delayMicroseconds(800);   //调试步进电机速度函数

  }

}

void setup(){//将步进电机用到的IO管脚设置成输出

  pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);

  pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);

  pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);

  pinMode(A_DIR, OUTPUT); pinMode(A_STP, OUTPUT);

  pinMode(EN, OUTPUT);

  digitalWrite(EN, LOW);

}

void loop(){

  step(false, X_DIR, X_STP, 200); //X轴电机 反转1圈,200步为一圈

  step(false, Y_DIR, Y_STP, 200); //y轴电机 反转1圈,200步为一圈

  step(false, Z_DIR, Z_STP, 200); //z轴电机 反转1圈,200步为一圈

  step(false, A_DIR, A_STP, 200); //a轴电机 反转1圈,200步为一圈

  delay(1000);

  step(true, X_DIR, X_STP, 200); //X轴电机 正转1圈,200步为一圈

  step(true, Y_DIR, Y_STP, 200); //y轴电机 正转1圈,200步为一圈

  step(true, Z_DIR, Z_STP, 200); //z轴电机 正转1圈,200步为一圈

  step(false, A_DIR, A_STP, 200); //a轴电机 反转1圈,200步为一圈

  delay(1000);

}

/* 多步进电机控制例程

* 程序使用 Arduino1.8.2 编写,编译错误请使用较新版本

* 步进电机方向引脚:

* dir: x: 5, y: 6, z: 7, a: 13

* 步进电机步进引脚:

* stp: x: 2, y: 3, z: 4, a: 12

* 步进电机使能引脚(低电平有效):

* en: 8

* 步进电机细分设置:0, 2, 4, 8, 16

* 各细分对应步进电机每周步数:

* 0 --> 200

* 2 --> 400

* 4 --> 800

* 8 --> 1600

* 16 --> 3200

*/


#include <AccelStepper.h>

#include <MultiStepper.h>

//注意AccelStepper和MultiStepper的库文件需要安装,放到arduino软件目录下libraries文件夹内

#define EN 8     


//步进电机速度,值越大速度越快

#define SPEED_X 1000

#define SPEED_Y 1000

#define SPEED_Z 1000

#define SPEED_A 1000


//步进电机转动步数,每周步数根据细分调整,现在设置的是X全步进(无细分),Y轴8细分,Z轴8细分,A轴16细分

#define STEPS_X 200  

#define STEPS_Y 1600

#define STEPS_Z 1600

#define STEPS_A 3200


void stepperSet();    //步进电机速度设置函数

void stepperMove();   //步进电机步进函数


AccelStepper stepper_x(1, 2, 5);    // X

AccelStepper stepper_y(1, 3, 6);    // Y

AccelStepper stepper_z(1, 4, 7);    // Z

AccelStepper stepper_a(1, 12, 13);   // A


MultiStepper steppers;


void setup() {

  Serial.begin(9600);

  pinMode(EN, OUTPUT);

  digitalWrite(EN, LOW);


  stepperSet(SPEED_X, SPEED_Y, SPEED_Z, SPEED_A);

  delay(1000);

}


void loop() {

  stepperMove(-STEPS_X, -STEPS_Y, -STEPS_Z, -STEPS_A);         

  delay(200);

  stepperMove(STEPS_X, STEPS_Y, STEPS_Z, STEPS_A);           

  delay(200);

}


void stepperSet(long v_x, long v_y, long v_z, long v_a){

  stepper_x.setMaxSpeed(v_x);         

  stepper_x.setAcceleration(400.0);  

  stepper_y.setMaxSpeed(v_y);

  stepper_y.setAcceleration(400.0);

  stepper_z.setMaxSpeed(v_z);

  stepper_z.setAcceleration(400.0);

  stepper_a.setMaxSpeed(v_a);

  stepper_a.setAcceleration(400.0);


  steppers.addStepper(stepper_x);

  steppers.addStepper(stepper_y);

  steppers.addStepper(stepper_z);

  steppers.addStepper(stepper_a);

}


void stepperMove(long _x, long _y, long _z, long _a){

    long positions[4];

    positions[0] = _x;

    positions[1] = _y;

    positions[2] = _z;

    positions[3] = _a;


    steppers.moveTo(positions);

    steppers.runSpeedToPosition();

   

    stepper_x.setCurrentPosition(0);

    stepper_y.setCurrentPosition(0);

    stepper_z.setCurrentPosition(0);

    stepper_a.setCurrentPosition(0);

}

使用AccelStepper函数库的写法,代码如下(MultipleStepper_test.ino):

7. 资料清单

序号

内容
1

AccelStepper函数库

2SH-ST步进扩展板PCB电路图
3步进电机控制例程(不使用函数库)
4步进电机控制例程(使用函数库)


步进扩展版
文件下载
【整体打包】-【U012】如何使用探索者的其他扩展板-步进扩展板-资料附件.zip
911.41KB下载2次下载
上一页 1 下一页
© 2022 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用