分类目录归档:机器人小组

Scratch编程超霸机器人(高品质乐高兼容)

 

全网最低价 点击或使用微信扫描上述二维码即可购买

Scratch编程超霸机器人 https://weidian.com/item.html?itemID=4270851520

孩子说他最大的梦想,就是收集到所有的汽车模型!每次说完,两只大眼睛闪亮亮的看着我,我就知道又要为孩子的梦想充值了。

当妈的谁会心疼给孩子花钱?我担心的是玩了这么多玩具,思维和大脑一点没有长进。

同龄人的孩子都在报班学编程,提前培养逻辑思维和学前意识,不惜一年投入好几万。

虽然价格看着肉疼,但我也不希望孩子落下太远,苦口婆心的劝他:妈妈给你报个班学学编程吧。

孩子一听就拒绝,说代码没意思,全是看不懂的符号,还不如拼玩具......

我觉得他对编程的误解很大,但是又没有特别好的方式引导他。

寓教于乐其实是最好的思维培养方式,如果真有这样的玩具能让孩子边玩边学,不用犹豫,我肯定给孩子买回家!

  · 拼插能力媲美乐高,可搭建几十种造型

  · 能学习编程,培养孩子的逻辑思维

  · 可玩性高,操控感强,不会太傻瓜

  · 性价比高,价格不贵

淘来淘去,这款好帅 · 超霸机器人,完美符合了我给孩子选玩具的所有期待。孩子看到的第一眼,兴奋的蹦蹦跳跳,说这个玩具太!酷!了!

它能够搭建21种造型,上百种玩法,可以反复拼插,少买了几十套乐高。

手机操控制动,瞬间化身遥控车。

携带传感功能,编程后有避障、光感等海量玩法。

使用Scratch语言,在家就能学编程,省下万元报班费。

我相信,很多爸妈会选择这款超霸机器人,作为孩子人生中学习编程不可或缺的玩具。

21种拼搭造型,上百种编程玩法

超霸机器人炫酷技能秀

431个积木模块,21种拼搭造型,孩子一入手肯定兴奋无比,马上就要拼起来!

 

 

从开源硬件到开源机器人应该怎样上手-教程一

如果说Helllo World是所有编程者牙牙学语的第一课,那么Blink(闪烁)和GoGo(跑起来)应该就是硬件编程和机器人编程的第一课,这就是产品名字的来历。本套入门教程共十篇,基于专为STEM教育(科学、技术、工程、数学)而设计的Blinkgogo车型机器人进行讲解。Blinkgogo mixly 米思奇Arduino 蓝牙小车  ←点击了解Blinkgogo

 

产品拆箱后,我们接下来需要将U盘里的东西拷贝到电脑上,然后打开Mixly或者Arduino进行编程。Mixly(米思齐)是一款基于Arduino的图形化编程软件。用户可以通过拼接积木块的方式来编写程序。按照产品附带的上手手册一即可使用范例程序,并下载完成后,你就可以开始尝试深入了解以便编写自己的程序了。

首先,我们需要先让小车动起来

如果我们想让电机前进,我们该怎么操作呢?

我们先从硬件线路看起,从Blink的底盘部可以看到:

从背面看,motor A为右侧电机,motor B为左侧电机

右侧电机由端口5、10控制

左侧电机由端口6、11控制

端口5、6与电机正向相连接

端口10、11与电机负向相连接

当端口5、6的电压高于端口10、11时,形成上图所示方向电流,左、右电机正转,Blinkgogo前进。反之,左、右电机倒转,Blinkgogo后。,电压相同时,无电流形成,左、右电机停转,Blinkgogo停止

 

那现在,假设我们想让Blink

全速向前前进2秒

再向后后退2秒

最后停止

在编程界面中,我们需要调用

"输入/输出"模块中的"数字输出"模块

和“控制”模块中的"延迟"模块来实现电机的运转

 

向前前进:

使用"数字输出"模块

设置端口5为高电平,端口10为低电平(右电机正转)

使用"数字输出"模块

设置端口6为高电平,端口11为低电平(左电机正转)

使用"延迟"模块

延迟2000毫秒(即持续2秒钟)

向后后退:

使用"数字输出"模块

设置端口5为低电平,端口10为高电平(右电机倒转)

使用"数字输出"模块

设置端口6为低电平,端口11为高电平(左电机倒转)

使用"延迟"模块

延迟2000毫秒(即持续2秒钟)

 

 

停止:

使用"数字输出"模块

设置端口5、6、10、11全为低电平(A、B电机停止)

现在进阶一下

如果我们想让Blink以特定速度前行或后退

我们该怎么做?

即,更改一下之前的任务:

现在我们想让Blink

以60%的速度向前前进2秒

再以60%的速度向后后退2秒

最后停止

 

我们需要调用"输入/输出"模块中的

"模拟输出"模块

来实现电机的调速

设置电机两极中一侧为低电平

一侧为特定的电压值

便可以实现给电机设定速度

电压值的数值设置通过“模拟输出”实现

模拟输出的数值范围为0~255

模拟输出赋值为255即为全速

我们需要60%的速度

则需要将另一端口赋值为60%*255=153。

 

向前前进:

使用"数字输出"模块,设置端口10为低电平

使用"模拟输出"模块,设置端口5为153

(右电机以60%速度正转)

使用"数字输出"模块,设置端口11为低电平

使用"模拟输出"模块,设置端口6为153

(左电机以60%速度正转)

使用"延迟"模块,延迟2000毫秒

(即持续2秒钟)

 

向后后退:

使用"数字输出"模块,设置端口5为低电平

使用"模拟输出"模块,设置端口10为153

(右电机以60%速度倒转)

使用"数字输出"模块,设置端口6为低电平

使用"模拟输出"模块,设置端口11为153

(左电机以60%速度倒转)

使用"延迟"模块,延迟2000毫秒

(即持续2秒钟)

停止:

使用"数字输出"模块

设置端口5、6、10、11全为低电平(A、B电机停止)

最后,我们来讲一下转向

Blink不像我们日常开的汽车有方向盘

可以通过调整转向盘转向

在Blink中,需要用左右电机的速度差来转向

如果右电机速度大于左电机速度,Blink会向左转

左电机速度大于右电机速度,Blink向右转

转弯半径的大小也由速度差的大小决定

要注意,如一侧电机设置为后退

在计算速度差的时候,速度值以负数计算哦

关于Blink转向的探究

就留给大家课后去探索

我们将在下一节,演示不同情景的转向。

附:Arduino源代码

void setup()
{
/*
​
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
​
*/
  pinMode(5, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(11, OUTPUT);
}
​
void loop()
{
  //前进
  //5→10
  digitalWrite(5,HIGH);
  digitalWrite(10,LOW);
   //6→11
  digitalWrite(6,HIGH);
  digitalWrite(11,LOW);
  delay(2000);
​
 //后退
  //10→5
  digitalWrite(5,LOW);
  digitalWrite(10,HIGH);
  //11→6
  digitalWrite(6,LOW);
  digitalWrite(11,HIGH);
  delay(2000);
​
  //停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  delay(2000);
​
  //前进
  //5→10
  digitalWrite(10,LOW);
  analogWrite(5,153);
     //6→11
  digitalWrite(11,LOW);
  analogWrite(6,153);
  delay(2000);
​
 //后退
  //10→5
  digitalWrite(5,LOW);
  analogWrite(10,153);
  //11→6
  digitalWrite(6,LOW);
  analogWrite(11,153);
  delay(2000);
​
  //停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  delay(2000);
 
}

 

Blinkgogo机器人套件初上手代码调试

教程一:简单介绍和电机驱动

//电机驱动01
 
/*
 
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
 
*/
void setup()
{
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
}
 
void loop()
{
  // 左前进
  // 6↑ → 11↓
  digitalWrite(6,HIGH);
  digitalWrite(11,LOW);
  //延时1秒
  delay(1000);
  // 左后退
  // 11↑ → 6↓
  digitalWrite(6,LOW);
  digitalWrite(11,HIGH);
  //延时1秒
  delay(1000);
  // 左停止
  // 6↓ = 11↓
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  delay(1000);
 
  //右前进
  // 5↑ → 10↓
  digitalWrite(5,HIGH);
  digitalWrite(10,LOW);
  //延时1秒
  delay(1000);
  //右后退
  // 10↑ → 5↓
  digitalWrite(5,LOW);
  digitalWrite(10,HIGH);
  //延时1秒
  delay(1000);
  //右停止
  // 5↓ = 10↓
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  //延时1秒
  delay(1000);
}
//电机驱动02
 
/*
 
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
 
*/
void setup()
{
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
}
 
void loop()
{
  //左前进 6↑ → 11↓
  digitalWrite(6,HIGH);
  digitalWrite(11,LOW);
  //右前进 5↑ → 10↓
  digitalWrite(5,HIGH);
  digitalWrite(10,LOW);
  delay(1000);
 
  //左停止
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  //右停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  delay(1000);
 
  //左后退 11↑ → 6↓
  digitalWrite(6,LOW);
  digitalWrite(11,HIGH);
  //右后退 10↑ → 5↓
  digitalWrite(5,LOW);
  digitalWrite(10,HIGH);
  delay(1000);
 
  //左停止
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  //右停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  delay(1000);
 
  //左转(左后退,右前进)
  digitalWrite(6,LOW);
  digitalWrite(11,HIGH);
  digitalWrite(5,HIGH);
  digitalWrite(10,LOW);
  delay(1000);
 
  //左停止
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  //右停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  delay(1000);
 
  //右转(左前进,右后退)
  digitalWrite(6,HIGH);
  digitalWrite(11,LOW);
  digitalWrite(5,LOW);
  digitalWrite(10,HIGH);
  delay(1000);
 
  //左停止
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  //右停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
  delay(1000);
}
//电机驱动03
 
int speed = 100;
 
void setup()
{
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
 
  Serial.begin(9600);
}
 
void loop()
{
  Serial.println("Forward");
  //左前进 6↑ → 11↓
  analogWrite(6,speed);
  digitalWrite(11,LOW);
  //右前进 5↑ → 10↓
  analogWrite(5,speed);
  digitalWrite(10,LOW);
  delay(1000);
 
  blinkgogoStop();
 
  Serial.println("Backward");
  //左后退 11↑ → 6↓
  digitalWrite(6,LOW);
  analogWrite(11,speed);
  //右后退 10↑ → 5↓
  digitalWrite(5,LOW);
  analogWrite(10,speed);
  delay(1000);
 
  blinkgogoStop();
 
  //左转(左后退,右前进)
  digitalWrite(6,LOW);
  analogWrite(11,speed);
  analogWrite(5,speed);
  digitalWrite(10,LOW);
  delay(1000);
 
  blinkgogoStop();
 
  //右转(左前进,右后退)
  analogWrite(6,speed);
  digitalWrite(11,LOW);
  digitalWrite(5,LOW);
  analogWrite(10,speed);
  delay(1000);
 
  blinkgogoStop();
  delay(1000);
}
 
 
void blinkgogoStop()
{
  //左停止
  digitalWrite(6,LOW);
  digitalWrite(11,LOW);
  //右停止
  digitalWrite(5,LOW);
  digitalWrite(10,LOW);
}

 

 

教程二:runBlinkgogo封装和走回形

 

//runBlinkgogo封装 测试
 
long speed;
 
/*
 
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
 
*/
 
void runBlinkgogo(long leftSpeed, long rightSpeed)
{
  if (leftSpeed >= 0)
  {
    //6→11
    analogWrite(6,leftSpeed);
    digitalWrite(11,LOW);
  }
  else
  {
    //11→6
    analogWrite(11,0-leftSpeed);
    digitalWrite(6,LOW);
 
  }
  if (rightSpeed >= 0)
  {
    //5→10
    analogWrite(5,rightSpeed);
    digitalWrite(10,LOW);
  }
  else
  {
    //10→5
    analogWrite(10,0-rightSpeed);
    digitalWrite(5,LOW);
  }
}
 
void setup()
{
  speed = 200;
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
}
 
void loop()
{
  //前进
  runBlinkgogo(speed, speed);
  delay(1000);
  //后退
  runBlinkgogo(0 - speed, 0 - speed);
  delay(1000);
  //左转
  runBlinkgogo(0 - speed, speed);
  delay(1000);
  //右转
  runBlinkgogo(speed, 0 - speed);
  delay(1000);
  //停止
  runBlinkgogo(0, 0);
  delay(1000);
}
//
 
long speed;
 
/*
 
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
 
*/
 
void runBlinkgogo(long leftSpeed, long rightSpeed)
{
  if (leftSpeed >= 0)
  {
    //6→11
    analogWrite(6,leftSpeed);
    digitalWrite(11,LOW);
  }
  else
  {
    //11→6
    analogWrite(11,0-leftSpeed);
    digitalWrite(6,LOW);
 
  }
  if (rightSpeed >= 0)
  {
    //5→10
    analogWrite(5,rightSpeed);
    digitalWrite(10,LOW);
  }
  else
  {
    //10→5
    analogWrite(10,0-rightSpeed);
    digitalWrite(5,LOW);
  }
}
 
void setup()
{
  speed = 200;
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
}
 
void loop()
{
  //前进
  runBlinkgogo(speed, speed);
  delay(1000);
 
  //停止
  runBlinkgogo(0, 0);
  delay(300);
 
  //右转
  runBlinkgogo(40, 0 - 40);
  delay(500);
 
  //停止
  runBlinkgogo(0, 0);
  delay(300);
}
//
 
long leftSpeed;
long rightSpeed;
 
/*
 
  11      10
   |       |
  |M|     |M|
   |       |
   6       5
 
*/
 
void runBlinkgogo(long leftSpeed, long rightSpeed)
{
  if (leftSpeed >= 0)
  {
    //6→11
    analogWrite(6, leftSpeed);
    digitalWrite(11, LOW);
  }
  else
  {
    //11→6
    analogWrite(11, 0 - leftSpeed);
    digitalWrite(6, LOW);
 
  }
  if (rightSpeed >= 0)
  {
    //5→10
    analogWrite(5, rightSpeed);
    digitalWrite(10, LOW);
  }
  else
  {
    //10→5
    analogWrite(10, 0 - rightSpeed);
    digitalWrite(5, LOW);
  }
}
 
void setup()
{
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}
 
void loop()
{
  // 顺时针转圈
  runBlinkgogo(255, 80);
  delay(8000);
  // 逆时针转圈
  runBlinkgogo(80, 255);
  delay(8000);
 
  // 操场式转圈
  runBlinkgogo(255, 100);
  delay(3600);
  runBlinkgogo(255, 255);
  delay(1000);
 
  // 8字型回环
  runBlinkgogo(255, 80);
  delay(4000);
  runBlinkgogo(255, 255);
  delay(1000);
 
  runBlinkgogo(80, 255);
  delay(4000);
  runBlinkgogo(255, 255);
  delay(1000);
 
 
  //蛇形前进(曲率变化)
  for (int speedOffset = -100; speedOffset < 100; speedOffset += 5)
  {
    leftSpeed = 125 + speedOffset;
    rightSpeed = 125 - speedOffset;
    Serial.print(leftSpeed);
    Serial.print("\t");
    Serial.println(rightSpeed);
    runBlinkgogo(leftSpeed, rightSpeed);
    delay(25);
  }
  delay(500); 
  for (int speedOffset = 100; speedOffset > -100; speedOffset -= 5)
  {
    leftSpeed = 125 + speedOffset;
    rightSpeed = 125 - speedOffset;
    Serial.print(leftSpeed);
    Serial.print("\t");
    Serial.println(rightSpeed);
    runBlinkgogo(leftSpeed, rightSpeed);
    delay(25);
  }
  delay(500);
}

教程三:探测黑线传感器使用和blink测试

 

//chapter 03 line_follow01
 
long runSpeed;        //电机基本速度
long sensorValueAll;  //存储左右巡线传感器L2、L3的检测值
byte lastDirection;   //存储上一次转向
 
void setup()
{
  runSpeed = 80;        //电机基本速度
  sensorValueAll = 0;   //存储左右巡线传感器L2、L3的检测值
  lastDirection = 0;    //存储上一次转向
  pinMode(2, INPUT);    //左巡线传感器L2
  pinMode(3, INPUT);    //右巡线传感器L3
  pinMode(11, OUTPUT);  //左马达 Motor B2
  pinMode(6, OUTPUT);   //左马达 Motor B1
  pinMode(10, OUTPUT);  //右马达 Motor A2
  pinMode(5, OUTPUT);   //右马达 Motor A1
}
 
void loop()
{
  //将L2与L3生成一个两位十进制数,存于sensorValueAll用于后续判断偏离方向分类
  sensorValueAll = 10 * digitalRead(2) + digitalRead(3);
  //用switch语句来选择分支机构,共4种情况
  switch (sensorValueAll)
  {
    case 0: //00,左右巡线传感器L2、L3都检测到黑线
      runBlinkgogo(runSpeed, runSpeed); //继续左右同速直线前行
      break;
    case 1: //01,左巡线传感器L2检测到黑线,右巡线传感器L3检测到离开黑线
      runBlinkgogo(runSpeed, 100);  //Motor B &lt; Motor A,左转 lastDirection = 0; //存储本次转向,零为右转 break; case 10: //10,左巡线传感器L2检测到离开黑线,右巡线传感器L3检测到黑线 runBlinkgogo(100, runSpeed); //Motor B &gt; Motor A,右转
      lastDirection = 1;  //存储本次转向,零为左转
      break;
    case 11:  //11,左右巡线传感器L2、L3都检测到离开黑线
      if (lastDirection)  //依照上次转向,单轮速度为零,加大转向速度
      {
        runBlinkgogo(runSpeed, 0);  //依照上次转向,右电机不动,左电机前进,右轮为中心右转
      }
      else
      {
        runBlinkgogo(0, runSpeed);  //依照上次转向,左电机不动,右电机前进,左轮为中心左转
      }
      break;
    default:  //其它情况
      runBlinkgogo(0, 0); //停机
      break;
  }
}
 
//传入左右电机运动参数,参数有效范围-256至于+255,
//但近0附近数值因摩擦阻力等存在死区,约-40至+40,导致电机无法转动
void runBlinkgogo(long leftSpeed, long rightSpeed)
{
  if (leftSpeed &gt;= 0)
  {
    //6→11
    analogWrite(6, leftSpeed);
    digitalWrite(11, LOW);
  }
  else
  {
    //11→6
    analogWrite(11, 0 - leftSpeed);
    digitalWrite(6, LOW);
 
  }
  if (rightSpeed &gt;= 0)
  {
    //5→10
    analogWrite(5, rightSpeed);
    digitalWrite(10, LOW);
  }
  else
  {
    //10→5
    analogWrite(10, 0 - rightSpeed);
    digitalWrite(5, LOW);
  }
}
//chapter 03 line_follow02
 
long speedBase = 100;   //电机基本速度
long speedOffset = 40;  //电机偏置速度
long speedLeft = 100;   //左电机速度参数传入值
long speedRight = 100;  //右电机速度参数传入值
boolean lastDirectionLeft = true; //上一次偏转方向是否为的右布尔值
 
 
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
}
 
void loop()
{
  //根据左右巡线传感器L2、L3是否压线亮灯
  detectBlink();
  if(onLine(2)&amp;&amp;onLine(3))  //左右巡线传感器L2、L3都检测到黑线
  {
    runBlinkgogo(speedBase,speedBase);  //继续左右同速直线前行
  }
  if(!onLine(2)&amp;&amp;!onLine(3)) //左右巡线传感器L2、L3都检测到离开黑线 
  {
    if (lastDirectionLeft)
      runBlinkgogo(0, speedRight+speedOffset); //Motor B &lt; Motor A,左转 else runBlinkgogo(speedLeft+speedOffset, 0); //Motor B &gt; Motor A,右转
  }
  if(onLine(2)&amp;&amp;!onLine(3)) //左巡线传感器L2检测到黑线,右巡线传感器L3检测到离开黑线
  {
    runBlinkgogo(speedLeft-speedOffset, speedRight+speedOffset);
    lastDirectionLeft = true; //存储本次转向,零为右转
  }
  if(!onLine(2)&amp;&amp;onLine(3)) //左巡线传感器L2检测到离开黑线,右巡线传感器L3检测到黑线
  {
    runBlinkgogo(speedLeft+speedOffset, speedRight-speedOffset);
    lastDirectionLeft = false;  //存储本次转向,零为左转
  }
}
 
//检测Ln是否压黑线
boolean onLine(int Ln)
{
  return !digitalRead(Ln);
}
 
//检测到左右巡线传感器L2、L3都压黑线则关LED灯
//其中一个离开则亮全车LED灯提醒
void detectBlink()
{
  if(onLine(2) &amp;&amp; onLine(3))
    digitalWrite(13,LOW);
  else
    digitalWrite(13,HIGH);
}
 
//传入左右电机运动参数,参数有效范围-256至于+255,
//但近0附近数值因摩擦阻力等存在死区,约-40至+40,导致电机无法转动
void runBlinkgogo(long leftSpeed, long rightSpeed)
{
  if (leftSpeed &gt;= 0)
  {
    //6→11
    analogWrite(6,leftSpeed);
    digitalWrite(11,LOW);
  }
  else
  {
    //11→6
    analogWrite(11,0-leftSpeed);
    digitalWrite(6,LOW);
 
  }
  if (rightSpeed &gt;= 0)
  {
    //5→10
    analogWrite(5,rightSpeed);
    digitalWrite(10,LOW);
  }
  else
  {
    //10→5
    analogWrite(10,0-rightSpeed);
    digitalWrite(5,LOW);
  }
}
//chapter 03 line_follow03
 
#define L1 4  //左上角巡线传感器L1
#define L2 2  //左巡线传感器L2
#define L3 3  //右巡线传感器L3
#define L4 7  //右上角巡线传感器L4
 
long noLineTimes = 0;     //存储所有巡线传感器没检测到黑线的次数
long speedBase = 100;     //电机基本速度
long speedLeft;           //左电机速度参数传入值
long speedRight;          //右电机速度参数传入值
long speedOffset = 40;    //电机偏置速度
boolean lastDirectionLeft;//上一次偏转方向是否为右的布尔值
 
void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);    //全车LED
  pinMode(L1, INPUT);     //左上角巡线传感器L1
  pinMode(L2, INPUT);     //左巡线传感器L2
  pinMode(L3, INPUT);     //右巡线传感器L3
  pinMode(L4, INPUT);     //右上角巡线传感器L4
  speedLeft = speedBase;  //左电机速度参数传入值
  speedRight = speedBase; //右电机速度参数传入值
}
 
void loop()
{
  detectBlink();  //根据左右巡线传感器L2、L3是否压线亮灯
  //全部巡线传感器检测或检测不到黑线
  if ((onLine(L1) &amp;&amp; onLine(L2) &amp;&amp; onLine(L3) &amp;&amp; onLine(L4)) == true || (onLine(L1) || onLine(L2) || onLine(L3) || onLine(L4)) == false)
  {
    noLineTimes ++; //存储所有巡线传感器没检测到黑线的次数加一
    Serial.print("noLineTimes++");
    Serial.println(noLineTimes);
  }
  else
  {
    //L1压黑线
    if (onLine(L1))//L1 is connect to PIN D4
    {
      //只有L1压黑线
      if (!onLine(L2) &amp;&amp; !onLine(L3) &amp;&amp; !onLine(L4))
      {
        speedLeft = -speedOffset;
        speedRight = speedOffset;
        lastDirectionLeft = true;
      }
    }
    //L4黑线
    else if (onLine(L4))//L4 is connect to PIN D7
    {
      //只有L4压黑线
      if (!onLine(L1) &amp;&amp; !onLine(L2) &amp;&amp; !onLine(L3))
      {
        speedLeft = speedOffset;
        speedRight = -speedOffset;
        lastDirectionLeft = false;
      }
    }
    else
    {
      //左右巡线传感器L2、L3都检测到黑线
      if (onLine(L2) &amp;&amp; onLine(L3))
      {
        speedLeft = speedBase;
        speedRight = speedBase;
      }
      //L2压黑线、L3不压黑线
      if (onLine(L2) &amp;&amp; !onLine(L3))
      {
        speedLeft = speedBase;
        speedRight = speedBase + speedOffset;
        lastDirectionLeft = true;
      }
      //L2不压黑线、L3压黑线
      if (!onLine(L2) &amp;&amp; onLine(L3))
      {
        speedLeft = speedBase + speedOffset;
        speedRight = speedBase;
        lastDirectionLeft = false;
      }
      //L2与L3都不压黑线
      if (!onLine(L2) &amp;&amp; !onLine(L3))
      {
        //上一次转向为左
        if (lastDirectionLeft)
        {
          speedLeft = 0;
          speedRight = speedBase + speedOffset;
        }
        //上一次转向为右
        else
        {
          speedLeft = speedBase + speedOffset;
          speedRight = 0;
        }
      }
    }
    noLineTimes = 0;
  }
  //存储所有巡线传感器没检测到黑线的次数,是否传入电机参数运行
  if (noLineTimes &lt; 50) { runBlinkgogo(speedLeft, speedRight); } else { runBlinkgogo(0, 0); } } //检测Ln是否压黑线 boolean onLine(int Ln) { return !digitalRead(Ln); } void detectBlink() { if (onLine(2) &amp;&amp; onLine(3)) digitalWrite(13, LOW); else digitalWrite(13, HIGH); } //传入左右电机运动参数,参数有效范围-256至于+255, //但近0附近数值因摩擦阻力等存在死区,约-40至+40,导致电机无法转动 void runBlinkgogo(long leftSpeed, long rightSpeed) { if (leftSpeed &gt;= 0)
  {
    //6→11
    analogWrite(6, leftSpeed);
    digitalWrite(11, LOW);
  }
  else
  {
    //11→6
    analogWrite(11, 0 - leftSpeed);
    digitalWrite(6, LOW);
 
  }
  if (rightSpeed &gt;= 0)
  {
    //5→10
    analogWrite(5, rightSpeed);
    digitalWrite(10, LOW);
  }
  else
  {
    //10→5
    analogWrite(10, 0 - rightSpeed);
    digitalWrite(5, LOW);
  }
}

 

教程四:简单巡线和速度尝试

 

 

教程五:playMusic和速度参数调试lineFollower

 

 

教程六:寻光测试 lightFollower

 

 

教程七:走迷宫 goMaze

 

 

教程八:红外遥控控制原理和尝试测试

 

 

教程九:较大规模的程序功能划分与红外控制

 

 

教程十:集成手机应用程序的控制小车appControlBlinkgogo

 

 

KiCad视频基础教程

1.Kicad视频基础教程第一部分:印制电路板是如何制造的

在本系列的第一部分中,Shawn讨论了如何制造PCB以及利用KiCad作为设计工具的好处。 KiCad是一个免费的开源平台,非常适合学习如何制作自己的PCB,同时还具有足够强大的功能来完成更复杂的设计工作。

 

2.Kicad视频基础教程第二部分:创建原理图符号

在第二部分中,Shawn提供了在KiCad中创建自定义原理图符号的详细演示。使用555定时器的数据表作为参考,创建Pins,分配Pin标签,并根据他的项目将它们布局。并非每个部件都需要自定义符号创建,并且通过使用Digi-Key的符号和封装库,您可以更快地创建原理图并布局电路板。

 

3.Kicad视频基础教程第三部分:创建原理图

KiCad简介”的第三部分让在Schematic Capture中展示完整的555电路。大多数基本元件都可以在默认的KiCad库中找到。当你遇到一个需要的元件未包含在默认库中时,Digi-Key符号和封装库将为您提供帮助。为此,Shawn展示了下载和安装Digi-Key定制库的方法。

 

4.Kicad视频基础教程第四部分:创建脚本

在KiCad简介的第四部分,Shawn向我们展示了如何创建自己的自定义脚本。 Shawn还提供了有关查找示例脚本的提示。创建脚本与创建符号密切相关

 

5.Kicad视频基础教程第五部分:关联封装并生成网表

KiCad简介的第5部分让Shawn解释了如何将自定义封装与附带的原理图符号相关联。要做到这一点,他必须生成一个网表;告诉KiCad哪个组件终端连接到哪个其他组件终端的文件。

 

6.Kicad视频基础教程第六部分:放置零件并定义轮廓

在Digi-Key的第6部分KiCad系列简介中,Shawn带着pcbnew引导我们完成了电路板布局阶段。 Shawn将向我们展示如何导入网表,排列零件,绘制电路板轮廓以及建立跟踪连接。

 

7.Kicad视频基础教程第七部分:电路板布局图

KiCad系列简介的第7部分在元件之间绘制了Shawn绘图,以显示电路板布局图在电路板上留下器件连接的位置。Shawn带领我们绘制并提供了一些很好的提示和技巧。

 

8.Kicad视频基础教程第八部分:生成Gerbers文件和订单板

在KiCad系列简介的第8部分中,Shawn讨论了Gerber文件。虽然一些电路板公司接受用于PCB制造的KiCad文件,但了解Gerber文件格式非常重要,因为这是一种更通用的PCB制造格式。 KiCad有一个用于检查Gerber文件的工具,称为GerbView。


9.Kicad视频基础教程第九部分:生成BOM表和订单器件

KiCad简介的第9部分Shawn解释了如何创建物料清单(BOM),然后从Digi-Key Electronics订购零件。

 

10.Kicad视频基础教程第十部分:焊接元件到PCB

KiCad简介的最后一部分是Shawn(PCB和Digi-Key的元件在手)焊接和测试他的PCB,以确保它按预期运行。

魔方破解机器人教程

拿到套件后,第一件事情就是清点一下零件数量是否有缺,部分消耗品或配件(如USB连接线、白乳胶、镊子)外观可能因不同批次有所差异,并不影响使用,部分易得选配件(如电池)可能不会附赠。

序号 名称 数量 功能 备注
1 木板A 1 搭建魔方破解机器人主体,支撑固定其他零件
2 木板B 1 搭建魔方破解机器人主体,支撑固定其他零件
3 木板C 1 搭建魔方破解机器人主体,支撑固定其他零件
4 木板D 1 搭建魔方破解机器人主体,支撑固定其他零件
5 木板E 1 搭建魔方破解机器人主体,支撑固定其他零件
6 扩展板 1 引出主控板连线,便于与舵机直接连接
7 主控板 1 接收电脑动作信号并转换为舵机运动指令
8 塑料舵机 1 用于带动旋转魔方基底的运动 与舵盘连接处白色
9 金属舵机 1 用于保持、释放和翻转魔方 与舵盘连接处黄色
10 电池盒 1 用于存放3节五号电池并给舵机供电 仅凭USB数据线来自电脑主板的供电无法使两个舵机正常运转,使用过程中
11 螺丝螺母收纳纸盒 1 收纳用于固定舵机和主控板与木板支架的螺丝和螺母
12 高质量魔方 1 高质量魔方 低质量魔方不能容忍旋转角度误差,旋转不到位,翻动到另一个面旋转时会卡住
13 USB数据线 1 用于给主控板烧录程序以及与电脑通信接受
14 五号电池 3 用于给舵机供电 不用依靠电脑供电,舵机会因供电不足而卡顿
15 十字螺丝刀 1 用于安装螺丝螺母和电池盒与拓展板之间的供电线连接
16 镊子 1 用于不便于手伸入的位置夹持和安装螺母,尤其是带尼龙圈的紧固螺母
17 白乳胶 1 没有热熔胶时使用用于木板间连接,但固化需要数小时之久,且不可加热拆卸,容易损坏木板 推荐使用热熔胶

 

结构拼装

魔方托盘

魔方卡手

主体安装

主体安装完成后,即可参考以下照片完成安装,有旋转部位的螺丝需要使用尼龙防松螺母,保证运转过程中不会因震动而松脱。

逐步安装过程拍照:

 

舵机接线参考

G V S

端口号

5

6

电池盒接线参考

VCC

电池盒红线

GND

电池盒黑线

打开设备管理器

在“我的电脑”或者计算机,右键它弹出菜单表,点击“管理”;(仅限于win7系统的用户)

在计算机管理页面左侧列表,可以找到“设备管理器”双击它,中间会显示硬件和设备是否正常的信息。有黄色感叹号就代表者有问题。

如果您的电脑买安装此驱动,需要参考以下网址,安装CH340驱动后,电脑即可与Arduino通讯

win7 http://www.arduined.eu/files/CH341SER.zip

win8 http://www.arduined.eu/files/windows8/CH341SER.zip

Mac http://kig.re/downloads/CH341SER_MAC.ZIP

Mac https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver

点击[INSTALL],就可以完成驱动程序安裝。

确保驱动程序已经安装后,即可烧录Arduino程序

打开上述文件夹后

打开

程序运行

点击Upload

成功安装后,运行上位机

下列界面显示表示已经成功和Arduino通信

填上魔方颜色后,点击SOLVE,获得解答步骤后,点击SEND,即可

主控板烧录程序成功后,开机时魔方的基座旋转舵盘会归位,翻转手臂会自动翻转魔方一次。可视此过程为开机自检。如果此过程不正常,则需要重新剥离舵盘和舵机,以调整初始位置。

基座塑料舵机初始位:与翻转手轴线平行

翻转卡手舵机初始位:应远离魔方,卡在图中红色圈相应位置

 

如魔方运转过程中卡顿,请检查电池盒开关是否打开,电池盒与扩展板接线是否牢靠?

 

提示:上位机程序看上去魔方的正面是以翻动魔方手臂的方向看去为前方,即下图所示

程序调试部分支持信息提示:

 

先简单介绍一下舵机的基本知识。舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。能够利用简单的输入信号比较精确的转动给定角度的电机系统。

舵机除电源外,只要一根信号线即可;使用PPM(脉冲比例调制)信号控制;所谓“PPM”,是一个周期约20ms,其间有个宽度在2ms 左右的脉冲控制信号。一般是以1.5ms 为基准,此时舵机居中,小于1.5ms 舵机左转,大于1.5ms,舵机右转;至于角度和脉冲宽度关系各个产品不同,例如:0.5ms 对应左转90 度,2.5ms 对应右转90 度。

 

由于使用不同的舵机采用的具体脉冲不同,即便是同一型号的舵机也因为死区不一致性,初始位置安装误差等,导致原始程序在部分用户安装的魔方破解机器人上不能正常工作。现根据我们所选用的舵机(塑料舵机:Futaba S3003、金属舵机:TowerPro MG995)上图图示情况进行简单的说明。

1ms(毫秒)=1000us(微秒),所以对应的情况是

500us =  0°

1000us = 45°

1500us = 90°

2000us = 135°

2500us = 180°

变化区间2000us内涵盖角度0-180°,由此可见脉宽每增加或减少约11us,舵机摆动角度相应改变1°。

想要了解更多知识,请参考http://www.i-element.org/servo/

 

现在我们来分析上下位机中对应的需要调整的程序参数。在控制板烧录完程序以后,每次上电启动,魔方破解机器人都会进行一次魔方翻转运动,由此时,你可以观察魔方是否被正确顺滑翻转。你也可以在上位机传送命令F(Flip)翻转,让机器人执行此指令,如下图所示

此外,上位机发送的全部指令一共就三种F(Flip)、H(Hold)、T(Turn)指令默认用空格隔开,对于一段魔方解答的结果就是由这三种指令的结果组成。(为了让部分有兴趣了解其算法的朋友能深入学习,后续我们将继续补充教程,针对此结果产生的算法进行讨论)目前我们仅讨论舵机参数需要调整以确保上诉3个动作能够完整的运行。

手臂舵机(armservo)总的来说有三个位置,对应3种指令

F(flip)翻转指令必须要保证手臂和魔方高度匹配,在中间黑色示意的导向区必须保证翻转动作后能自由落下到卡位,所以两块三角形导向板之间的连接螺丝必须保持适当的松紧度。

H(hold)把持指令执行时,手臂运动到此位置时,必须保证魔方的上两层被抓手握住,在魔方基底旋转时,魔方能被正确旋拧90度。

T(turn)旋转指令执行时,手臂必须退到导向板卡槽处附近,并向上倾斜约45度,手臂在此位置时,魔方基底旋转不会被手臂任何部位所阻碍。

接下来,我们看一下,在程序中,以上三个位置对应的参数

显然,

OFF对应T指令时的位置

HOLD对应H指令时的位置

PUSH对应F指令时的位置

你可以通过上述舵机的基本知识得到相应的关系去调整此3个参数,并重新烧录程序到Arduino控制板,获得手臂位置的微调。

需要注意的是,当上位机正在运行并与控制板通信时,烧录新程序将失败,因为两个程序竞争,只有能一个程序获得通过串口与控制板通信的权利。

也部分读者可能会问,为什么不是if-else语句中if下的3个参数,那是因为我们舵机可以正反安装,当反向安装时,上面的3个参数对应的位置才有效,否则默认执行else语句下的三个参数。

基底舵机(baseservo)总的来说有四个位置,分别在指令H和T中起作用

仔细观察的读者可能已经发现,放置魔方的基底托盘并不是刚好能放下魔方,而是比魔方略大,大概宽出3-4mm。这是多方面的原因导致的,但最直接的原因就是因为翻转魔方时需要空间,同时需要兼容导向板等可能产生的误差,这个道理同样适用于卡爪上,手臂最前端的卡爪也不能是恰恰好能卡住魔方而不多留一点剩余的空间。

这种容乃误差的做法,同样会给魔方扭转过程带入其它的新问题,如卡爪和底座都有空间,那么当卡爪把持魔方,底座完全旋转90°时,问题就出现了。由于空隙的存在,魔方往往不能恰好转到90°的位置。当一个位置扭不到准确的90°时,翻转或者旋转90°再扭时,魔方将会卡壳,甚至是损坏。由于我们选配了可以容错的高质量魔方(超过20元一个,而不是那种几块钱的魔方),这个问题其实已经可以容纳非常宽松的偏差,扭不到位的魔方在侧面再拧时会自动修复不到位的一面,目测10°以内不会有问题。即便如此,我们还是希望利用程序中的修正参数,把这个问题说清楚。

 

在魔方基底旋转的过程中,有原位和90°旋转位两个基本位置。几乎是同理加上了后缀词(over)。也就是说,当魔方基底选择时,先转到over位,然后再回到基本位,利用过转的这个超调量,克服每次动作时卡爪和基底的空隙带来的魔方90°旋转不到位。

基于上述的理论,你就会知道,当每次执行H(hold)指令后,如果魔方扭不到90°的正确位置,那么你就应该要尝试调整上面的4个参数咯。

学习,理解,锻炼,在充分思考后动手,我相信这次DIY的成功一定会磨炼出你的耐心和细心,创客精神与你我一同砥砺前行吧!

接线端子和各类连接器的基础知识

引言

接线端子用于将分开的电路连接到一起。通常这些连接器用于常需要切换和断开的场合,如连接电源,连接外围电路,或者需要更换的扩展部分。

该教程涵盖内容

在本教程中,我们将介绍下面主题

  • 关于接线端子的常见术语
  • 将接线端子进行区别分类
  • 介绍上述分类之间的区别
  • 介绍如何使用极性防反的接线端子
  • 介绍如何使用极性防反的接线端子

建议先阅读

在您开始阅读本文之前,请确保您已经知道或者学习了以下教程中所罗列的内容:

接线端子术语

在我们开始讨论一些常用的连接器之前,让我们来探讨用于描述接线端子的术语。

公母端子Gender - 接线端子的公母性说明了它是用来插入还是被插入的。(哈哈,如果你还是单纯的孩子,更详细的解释估计你得去问问你父母)遗憾的是,有些被称为公头的端子,实际上是按照母头的端子来使用的。在接下来的示例中,我们将将说明这些缘由。

Male and female 2.0mm PH series JST connectors

左边公右边母的 2.0mm PH系列的JSP接线端子

极性-大多数接线端子有约定的极性方向。这种特性使得接线端子可以防止接反。

North America wall plug

有极性的美规墙上插头。 通过为插头叶片两种不同的宽度,插头只能单向进入插座

触点-触点是接线端子真正起作用的功能部分。 它们是彼此接触的金属部件,形成电气导通的连接。 这里也往往是导致连接不良的地方:触点可能变脏或氧化、或者金属弹片的弹性随时间蠕化变小而将导致触点松脱或连接不可靠。

ADH8066 mating connector

该连接器上的触点清晰可见。

间距 - 许多连接器由重复排列的一组触点组成。 连接器的间距是从一个触点的中心到下一个触点的中心的距离。这一点很重要,因为有许多接线端子外观和触点看起来非常相似,但间距可能不同,所以往往一个型号系列的端子仅仅因为这个参数不同而不同,因此在不知道此参数情况下,很容易在购买了不能配对连接端子。 

 

.1" pin header connector examples

标准Arduino上标题的引脚间距为0.1英寸。

插拔次数 - 接线端子的使用寿命都是有限的,每次接上和断开接线端子都会导致部分磨损。 数据表通常以插拔次数这一指标来表示其使用寿命,使用不同技术的接线端子插拔次数差别很大。 USB连接器可能具有数千或数万次插拔的寿命,而设计用于消费电子产品内部的板对板连接器可能会被限制为数十次插拔的寿命。 选择适合应用场景寿命的接线端子非常重要。

Connector for GS406 GPS module

GS406 GPS模块的匹配连接器。 该连接器的数据表显示该零件的插拔次数是50次。

安装方法 - 这个可能会让人有些困惑。 术语“安装”指以下几种情况:连接器如何在使用中安装(安装在面板上,自由悬挂着,电路板安装),连接器相对于其附件的角度(直角或直角),它如何机械连接(焊片焊接,表面贴片焊接,通孔焊接)。 我们将用示例对接线端子中的安装方法进一步讨论。Comparison of different mounting methods for barrel-type connectors

比较三种相同管连接器的不同安装方法:(从左到右)电路板板安装,内联电缆安装和板面安装。

抗弯折延伸部分(用于减缓应变) - 当连接器安装在电路板或电缆上时,线材拐弯处的连接往往有点脆弱。 通常提供某种类型的抗弯折延伸部分用于减缓应变,以将作用于该连接器的任何应变传递到更多更合理的结构上。 后面还有这类型的例子。

1/8" Headphone jack showing strain relief

这个1/8英寸耳机插孔带有一个应力消除”靴子“,滑过电缆以防止电缆上的力量直接传输到电气接头。

USB连接器

USB连接器有两种类型:主机和从机。 在USB标准中,两者有所不同,电缆和设备上的连接器反映了这一点。 但是,所有USB连接器都有一些共同之处

  • 极化 - USB连接器只能按正确一面插入。 从不对的方向无法插入,强行插入连接器不会工作,并可能导致其损坏。
  • 四个触点 - 所有USB连接器至少有四个触点(尽管有些可能有五个,而USB 3.0连接器有更多)。
  • 这些用于电源,接地和两条数据线(D +和D-)。 USB连接器是设计用于传输5V,高达500mA电流的连接器。
  • 屏蔽 - USB连接器是自带屏蔽的,外部包围了不属于电路的金属外壳。 这对于在具有大量电流“噪音”的环境中保持信号完好无损很重要。
  • 强大的电源连接 - 电源引脚在数据线之前先完成连接这点非常重要,以避免试图通过数据线供电。 所有USB连接器的设计都考虑到了这一点。
  • 减缓应变 - 所有USB电缆都在连接器上进行塑料包覆成型,以防止电缆上出现可能损坏电气连接的应变。

Labeled image of USB extension cable

USB延长线,标有USB连接器的一些常见功能。

USB-A接口

USB-A母头是标准的“主机”连接器类型。 这可以在计算机,集线器或任何打算将外围设备上找到。 也可以在另一端找到带有A型连接器和A型连接器的延长电缆。

USB-A ports on a laptop computer.

笔记本电脑侧面的女性USB-A端口。 蓝色连接器符合USB 3.0标准。

USB-A公头是标准的连接外围扩展设备的连接器。 大多数USB电缆的一端将以USB-A公头连接器终结,而许多设备(例如键盘和鼠标)将具有内置电缆端接有USB-A公头连接器。 也可以找到可安装在板上的USB-A公头连接器,适用于U盘等设备。

USB-A male connector examples

两种类型的USB-A公头接口,SparkFun Cerberus电缆和AVR Stick开发板。

USB-B接口

USB-B母头是外围设备的标准。 它体积稍大,但坚固耐用,所以在不限制尺寸的应用场景中,它是为USB连接提供可移动连接器的首选方法。 它通常是通孔板安装的连接器,以获得最大的可靠性,但也有板面安装的方式。

USB-B connector on an Arduino Uno

由于其低成本和耐用性,包括Uno在内的Arduino主板早已使用了USB-B母头连接器。

USB-B公头多数位于电缆的末端。 USB-B电缆无处不在,价格低廉,这也有助于USB-B连接的普及。

Male USB-B connector

SparkFun Cerberus电缆末端的USB-B公头连接器

USB-mini接口

USB-Mini连接是第一个用于较小设备的USB接口尺寸标准的尝试。 通常在较小的外围设备(MP3播放器,旧手机,小型外置硬盘驱动器)上可以找到USB-Mini母头,通常是表面贴装连接器,具有较大的尺寸稳定性。 USB-Mini逐渐被逐渐淘汰,转而使用USB-Micro连接器。

USB-Mini female connector

Protosnap Pro Mini上的USB-Mini母头接口。

USB-Mini公头是另一种仅有线缆的连接器。 与USB-B一样,它非常常见,几乎可以在任何地方以便宜的价格找到此连接线。

USB-Mini male connector

SparkFun Cerberus电缆末端的USB-Mini公头接口。

USB微型连接器

USB-Micro是USB连接器系列的新增产品。与USB-Mini一样,主要关注是缩小尺寸的问题,但USB-Micro为低速信号增加了第五个引脚,使其可用于USB-OTG(On-the-go)应用,其设备视情况而定,作为主机或外设运行。

USB-Micro母接口可以在许多新型外设上找到,例如数码相机和MP3播放器。 USB-micro作为所有新手机和平板电脑的标准充电接口,意味着充电器和数据线越来越普遍,而USB-Micro已经取代USB-Mini作为小尺寸USB连接器的选择。

USB-Micro female connector

LilyPad Arduino USB板上的USB-Micro母接口。

USB-Micro公头也是一个只有线缆的连接器。 通常有两种类型的带USB-Micro公端的电缆:一种用于连接具有USB-Micro端口的设备作为USB主设备的外设,另一种用于将USB-Micro母端口连接至USB-A母端口 ,用于支持USB-OTG的设备。

USB-Micro male connector

SparkFun Cerberus电缆上的USB-Micro公头连接器。

USB-A female to USB-Micro adapter

适配器尾纤,用于使用仅具有带标准USB外设的USB-Micro端口的USB-OTG设备。 请注意,并非所有支持USB-OTG的设备都可以使用此尾纤。

译者注:现在随着USB3.0普及和无容错设计思路的要求,更多的手机和外置设备从USB-Micro接口转向使用USB-type C接口,包括最新的苹果Macbook。但苹果手机和平板目前仍在使用苹果独家专利的lighting连接线。

维基百科上,关于各类型USB接口样式的示意图

维基百科上,关于各类型USB-Type-C接口的样式示意图

最新使用了USB-Type-C接口的苹果笔记本电脑Macbook

音频连接器

另一个熟悉的连接器是那些用于视听应用的组合--RCA俗称梅花头、莲花头和唱机。 虽然这些不能真正被认为是同一个家族,由于其结构、连接方式和原理雷同,我们将它们归为一类在此介绍。

“电话”类型连接器

您可能会立即将此连接器的1/8“版本识别为耳机末端的插头,这些连接器实际上有三种常见尺寸:6.3英寸(6.35毫米),1/8英寸(3.5英寸 毫米)和2.5毫米¼英寸尺寸连接器在专业音频和音乐界有很多用途 - 大多数电吉他和放大器上都有1/4英寸尖端套(TS)插孔,1/8英寸tip-ring- sleeve(TRS)结构的输出信号的连接器作为MP3播放器或电脑上的耳机或音响非常普遍。 一些手机将提供一个2.5毫米tip-ring-ring-sleeve(TRRS)插孔,用于连接耳机,该耳机还包括用于免提通话的麦克风。

这些连接器和电缆的普遍可用性使其成为通用连接应用的良好选择 - 例如,早在USB之前,德州仪器的图形计算器就使用2.5mm TRS连接器作为串行编程连接器。 应该记住的是,tip-sleeve(端头 - 套筒)连接器类型不可用于传输电源; 在插入过程中,尖端和套筒可能会短时间短接在一起,这可能会损坏电源。 屏蔽不足使得它们不适用于高速数据,但低速串行数据可以使用这些连接器。

1/8" TRS phone plug

耳机型TRS电话插头,1/8“。通常,尖端tip和环ring将承载立体声音频信号,而套sleeve将接地。

1/8" TS phone plug

1/8英寸手机插头,请注意此连接器上没有环ring触点。

1/8" board mount headphone jack

1/8“板载耳机插孔,带有相应引脚连接的插针标记。当未插入插孔时,内部开关将尖端和环形引脚连接到相邻的未标记引脚,从而允许插入检测。

RCA连接器

RCA俗称梅花头、莲花头,是数十年来首选的家用立体声连接器,于1940年由RCA引入家用留声机中。 它在视听领域正逐渐被HDMI等连接所取代,但无处不在的连接器和电缆使其成为家用系统的理想选择。 它已经服役了很长的时间。

母端RCA连接器通常可在设备上找到,但可以找到带有母插孔的分机电缆或转接电缆。 大多数RCA连接器都连接到四种信号类型之一:分量视频(PAL或NTSC,取决于设备的销售地),复合视频,立体声音频或S / PDIF音频。Female RCA plug, for video signals.

RCA母头连接器,用于视频信号。 通常,NTSC或PAL视频信号连接器将呈黄色。

RCA公头连接器通常在早起的影碟机和电视连接的电缆上找得到。Male RCA plugs

RCA公头。 红色和白色通常用于音频应用,红色表示右声道的音频。

电源连接器

虽然许多连接器除数据外还承载电源,但某些连接器专门用于为设备提供电源连接。 这些因应用和尺寸而异,但我们只关注一些最常见的部分。

DC直流电源插头插座

DC直流电源插头插座通常用于低成本消费类电子产品,可通过大型AC电源适配器插入墙上电源。 壁式适配器广泛适用于各种额定功率和电压,使DC直流电源插头插座成为将电源连接到小型项目的常用手段。

DC直流电源插座或插孔可以以多种类型购买:PCB安装(表面贴片焊接或通孔焊接),电缆安装或板面安装。 这些连接器中的一些将具有额外的接触点,以允许应用程序检测电源是否插入到筒状插孔中,从而允许设备在外部电源上运行时绕过电池并节省电池寿命。

Female barrel connector

DC直流电源插座。 当没有插入插头时,“插入检测”引脚将短接到“套筒”引脚。

虽然有多种方法将插头连接到电线的末端,但是通常只能在电线端子中找到公插筒连接器或“插头”。 也有可能获得预先连接到电缆的插头。

Male barrel plug

独立的DC直流电源插头,用于连接任何电源。 请注意,套筒连接设计为压接在导线上以额外消除应力。

桶式连接器仅提供两个连接,通常称为“销”或“尖端”和“套筒”。 订货时,筒体连接有三个不同的特点 - 内径(插座内插针的直径),外径(插头外侧套筒的直径)和极性(套筒电压是否为 高于或低于尖端电压)。

套筒直径通常是5.5mm或3.5mm。

销直径取决于套筒直径; 一个5.5毫米的套筒将有一个2.5毫米或2.1毫米的引脚。 不幸的是,这意味着为2.5mm引脚设计的插头将安装在2.1mm插孔中,但连接最多只能是间歇性的。 3.5毫米套筒插头通常与1.3毫米插针插孔配合。

极性是最后要考虑的方面; 通常,套管将被视为0V,并且尖端将相对于套管成为正电压。 许多设备将有一个小图标表明设备所期望的极性; 应注意遵守这一点,因为不正确的电源极性可能会损坏设备。

两个套管尺寸的长度通常为9.5毫米,但是更长和更短的套管确实存在。大部分产品均使用正极性5.5毫米套筒和2.1毫米引脚; 我们建议尽可能坚持标准,因为它更容易维修和更换。Barrel connector polarity label

AC适配器与套筒的公共极性图。 正极性(尖端正极,套管0V)是最常见的。 图表由维基百科用户提供。

“Molex”端子

大多数计算机硬盘驱动器,光盘驱动器和其他内部外围设备通过通常称为“Molex”端子供电。 为了更加准确,它是一个Molex系列8981连接器 - Molex实际上是最初在1950年代设计这种连接器的公司的名称。

Molex连接器设计用于承载大量电流:每个引脚最多11A。 对于可能需要大功率的项目(例如CNC机器或3D打印机),为项目提供动力的常用方法是使用台式PC电源并通过Molex连接器连接各种系统电路。

Molex端子就是术语公母头中有点反常的例子。 母头端子通常位于电缆的末端,并且在包围公头端子内的插针的塑料外壳内滑动。 通常情况下,连接器只能压入,非常非常紧 - 为保证连接牢固可靠,它们通常只能连接和断开数十次,因此对连断频繁的系统来说,这不是一个好的选择。

Male Molex connector

Molex端子。 连接器的引脚的公母是指整个连接器而非金属部分。

Female Molex connector

在项目电源上的公Molex端子。

IEC连接器

与Molex连接器一样,这是一种通用组件名称与单个特定项目同义的情况。 IEC连接器通常是指台式PC电源上常见的电源插口。 严格来说,这是IEC 60320-1 C13(母)和C14(公)连接器。

IEC 60320-1 C14 male connector

C14公头IEC电源插座,位于DC项目电源上。 请注意,与Molex连接器一样,连接器的公母由盖内的引脚定义。

C13 female IEC power connector

C13母IEC电源连接器,使用相当标准的交流电源电缆。 这一端的电缆可以在世界各地找到,通常在另一端使用主要的本地交流电连接器。

IEC连接器几乎专门用于交流电源输入。 在项目中使用它的好处在于,IEC对市电电缆非常普遍,并且可用于大多数国际地区的本地化市电插头!

JST连接器

我们的Arduino项目中,经常提到“2.0mm JST连接器”。 这是特定产品的又一次推广--JST是一家生产高品质连接器的日本公司,2.0mm JST连接器是PH系列双位置极性连接器。

很多单节锂聚合物离子电池均标配这种JST连接器,并且许多电路板都包含此连接器(或其引脚的焊盘孔)作为电源输入。 它具有结构紧凑,耐用并且防反的优点。 另一个可能是优点或缺点的特性,取决于你如何看待它,是因为JST连接器在插入后很难断开连接(虽然小心应用斜口钳可以帮助!)。 虽然这使得在使用过程中不可能出现故障,但这也意味着断开电池充电容易损坏电池连接器。

2-Pin JST male connector on a LilyPad Arduino USB board

LilyPad Arduino USB板上的2引脚JST公头连接器。 再次,与Molex一样,胶壳内的引脚决定了连接器的公母。

Male and female 2-pin JST connectors

公母型2针JST连接器。Male and female 2-pin JST connectors.

PH系列连接器有两个以上的接线位。 但是,我们最常用的应用是用于2位电池连接。

排母连接器

排母连接器包含几种不同的连接方式。 一般来说,一面是焊接到PCB上的一系列引脚,它们可以与PCB表面成直角(通常称为“直线”)或平行于电路板表面(易混淆地称为“右边” - “角”)。 这种连接器以各种间距(如2.54mm和2mm)出现,并且可以具有任意数量的单独的排针。

Right angle female header pin connector

FTDI基础板上的直角母头引脚连接。

最常见的针脚头是0.1英寸单排或双排连接器,它们有排针或排母,并且是用于连接Arduino板和屏蔽板的连接器。其他的间距并不少见,例如XBee无线模块使用 相同连接器的2.0mm间距的系列。

.1" pin header connector examples

在Arduino Uno电路板上的0.1英寸排母连接

这部分的常见变种是圆孔排针的版本。 虽然正常版本是由冲压和折叠金属板制成的,但是圆孔排针是通过将金属加工成所需的形状而形成的。 其结果是一个更坚固的连接,具有更好的接头和更长的使用寿命,但其成本也更高。

Female machine pin headers

圆孔排针,请注意,这些连接器被设计成可以分割成较小的部分,而标准的0.1英寸母头连接器不是。还需要注意的是,并非所有非机器针头连接器都将与机器针脚配合使用。

连接到这些引脚接头的电缆通常为以下两种类型之一:带有压接连接器的单根电线或带绝缘位移连接器的带状电缆。 这些可以简单地夹在排缆杜邦线的末端,从而形成与带状电缆中每个导体的连接。 通常情况下,杜邦线只能作为母头使用,并期望公头排针与之配对。

Crimp connected header cable

六位杜邦线排缆。 每条导线都被单独剥去,连接器压接在上面,然后将连接器插入塑料胶壳中。

2x5 insulation displacement connectors on a ribbon cable

带状电缆上的2x5绝缘位移连接器(IDC)。 这种电缆可以快速组装,因为它不需要剥离单个连接器。 它的两端还有偏移头,以防止插入配对板侧连接器时接反。

临时连接器

螺丝接线端子

在某些情况下,可能需要将裸露的导线连接到电路。 螺丝端子为此提供了一个好的解决方案。 它们也适用于连接应该能够支持多种不同连接设备的情况。

螺丝端子的缺点是它们可以很容易地解开,在电路中留下一根裸露的导线。 一小撮热胶可以解决这个问题,而不会以后太难去除。

螺丝端子通常设计用于窄范围规格的电线,电线太小与太大都不行。 常见有两种类型的螺钉接线端子0.1英寸和3.5mm版本。大多数螺钉端子都是高度模块化的,只需将两个或多个较小的部分连接在一起即可轻松地以相同的间距进行扩展。

3.5mm screw terminals- > 3.5毫米间距的螺钉端子,显示要连接的导线的插入点,固定导线的螺钉以及单个单元侧面的模块化连接器,可以将多个部件组合在一起。

香蕉连接器

大多数电源测试设备(万用表,电源)都有一个非常简单的连接器,称为“香蕉插座”。 这些配对“香蕉插头”,卷曲,弹簧金属插头,意味着做一个单一的电源连接。 它们经常以可堆叠配置提供,并且可以轻松连接到任何类型的电线。 它们能够承载几安培的电流并且价格低廉。

Banana plug

可堆叠的香蕉插头。 请注意,有两种不同的方法可以插入额外的香蕉插头。

Variable power supply with banana plugs

Extech可调台式电源,前部带有香蕉插孔。

鳄鱼夹

命名原因显而易见,鳄鱼夹适用于接线柱或裸线的测试连接。 它们往往体积庞大,容易对附近的裸金属造成短路,并且具有相当差的抓地力,易于损害某些连接部位。 它们主要用于调试期间的低成本连接。

Alligator clips

“第三只手”的工具使用鳄鱼夹夹住工件,用鳄鱼夹夹住电线进行电气测试。 请注意鳄鱼夹周围的塑料套,以防止其他连接短路。

IC夹(或IC钩)

对于更精细的探测操作,市场上有各种IC夹。 这些尺寸允许用户将其夹在IC的引脚上而不接触相邻的引脚; 其中一些非常细腻,甚至可以夹在细间距的SMD元件支脚上。 这些较小的剪辑可以在逻辑分析仪和测试导线上找到,这对原型设计或故障排除电路来说非常有用。

Large IC clip

电线末端的大型IC夹。 该夹子仍然足够小,可以连接到通孔芯片上的单个支脚,而不会对邻近的引脚造成问题。

其他连接器

RJ型模块连接器

认证插孔连接器是电信设备进入本地交换机的标准配置。 通常听到的与之相关的名称(RJ45,RJ12等)不一定是正确的,中文俗称水晶头,因为RJ标志是基于位置数量,实际存在的导线数量和布线图案的组合。 例如,虽然标准以太网电缆的末端通常被称为“RJ45”,但RJ45实际上不仅意味着8位,8导体模块插孔,还意味着它与以太网连接。

这些模块化连接器可以非常有用,因为它们结合了可用性,多导体,适度的灵活性,低成本和适中的电流承载能力。 尽管这些电缆本来不是要提供大量的电源,但可用于将数据和几百毫安的数据从一个设备传输到另一个设备。 应注意确保为此类应用提供的插孔不会连接到传统的以太网端口,否则会导致损坏。

8p8c "RJ45" style modular jack

标准8p8c(8位,8芯)“RJ45”模块化插孔。 请注意,如果您打算使用此类插孔传输直流信号和电源,则必须避免使用带内置信号变压器的连接器。

D-sub型连接器

以其外壳的形状命名,D超小型连接器是计算世界的经典标准。 这种连接器有四种非常常见的品种:DA-15,DB-25,DE-15和DE-9。 管脚编号表示提供的连接数,字母组合表示管壳的大小。 因此,DE-15和DE-9具有相同的外壳尺寸,但具有不同数量的连接。

Female board-mount DE9 connector

DE-9母头板载连接器。 公母由与每个信号相关联的引脚或插座来定义,而不是整个连接器,使得该连接器尽管有效地插入到配合连接器的外壳中,仍然是母端。

DB-25和DE-9对硬件黑客最有用; 许多台式计算机仍然至少包含一个DE-9串行端口,并且通常还包含一个DB-25并行端口。 用DE-9和DB-25连接器端接的电缆也广泛使用。 与上述模块化连接器一样,这些可用于在两个设备之间提供电源和点对点通信。 同样,由于这些电缆的常用用途不包括电力传输,因此任何重新调整电缆的操作都要谨慎,这是非常重要的,因为插入标准端口的非标准设备很容易造成损坏。

更多可供深入学习的资料

现在您应该清楚哪些连接器最适合某些应用,哪些连接器将在您的下一个项目中对您有用。 请查看其他链接以更多地了解连接器。

  • Giant database 很全面的连接器和接口数据库 - 您场景的几乎任何连接器的简单介绍,如下图电脑背面的所有接口。 这是一个关于连接器基本信息的好网站,但对接口结束细节的描述不足。

  • Wikipedia article on registered jack connectors维基百科关于认证插孔连接器的文章 - 更多关于认证插孔(RJ)连接器的辨识,常被误解和误用的一些问题。
  • Wikipedia article on D-subminiature connectors维基百科有关D超小型连接器的文章 - 与认证插孔连接器一样,D型超小型标准的信息也很多。 维基百科有一篇很棒的关于它的文章。
  • Mouser电子产品目录 - 浏览电子产品供应商的目录通常是查找未识别连接器名称的好地方; Mouser增强型在线目录与打印版本一样好,而且不用浪费纸!

如果您希望浏览更多相关教程,请查看以下其他内容:

 


cc

原始文章采用CC BY-SA 4.0,您可以自由地:

  • 演绎 — 修改、转换或以本作品为基础进行创作
  • 在任何用途下,甚至商业目的。
  • 只要你遵守许可协议条款,许可人就无法收回你的这些权利。

本文由翻译美国开源硬件厂商Sparkfun(火花快乐)的相关教程翻译,原始教程采用同样的CC BY-SA 4.0协议,为便于理解和方便读者学习使用,部分内容为适应国内使用场景稍有删改或整合,这些行为都是协议允许并鼓励的。

原始文章及相关素材链接:

https://learn.sparkfun.com/tutorials/connector-basics

高级版Fritz表情机器人安装

欢迎购买高级版开源表情机器人Fritz套件,如果您看完本教程后对此制作感兴趣,可以考虑从下述淘宝网址购买我们提供的配套套件:

创元素淘宝店—表情机器人套件高级版

(购买后我们将于48小时内发货给您)

安装简介

此款为高级版,保留了所有的眼球和脖子的动作,安装过程较多,需要你的耐心和毅力。相当其他渠道您所能获得的版本,我们提供的此版本经过大量实践改良,采用可多次重复拆卸的螺栓螺母等连接方式。避免使用热胶枪这类工具的麻烦,以及初学者在初次安装过程中出错后,并不会因为使用了热胶枪而导致木板等零配件的损坏。您就尽情的大胆尝试吧。

可以参考以下视频,步骤都是类似的,该主题及更多版本很快上市,提供给大家:

需要的工具:

  1. 尖嘴钳、螺丝刀、镊子等
  2. 电脑
  3. 耐心

 

总组装

以上三步骤,请观看以下视频了解细节(注意,部分步骤已经被优化,无需使用热熔胶,部分运动轴也被长螺丝替代,便于重新拆装及调整)老版视频,用热熔胶连接,较为麻烦,仅供参考。

此处要把舵机和舵盘连上

5

连接电路

将Arduino固定上,连接电机的连线,插上USB。

02

装配完成!

烧录Arduino程序

烧录前可能要先检查串口驱动程序是否安装并正常工作,否则电脑可能无法识别Arduino控制板并与之通信

打开设备管理器

在“我的电脑”或者计算机,右键它弹出菜单表,点击“管理”;(仅限于win7系统的用户)


在计算机管理页面左侧列表,可以找到“设备管理器”双击它,中间会显示硬件和设备是否正常的信息。有黄色感叹号就代表者有问题。

如果您的电脑买安装此驱动,需要参考以下网址,安装CH340驱动后,电脑即可与Arduino通讯

win7 http://www.arduined.eu/files/CH341SER.zip

win8 http://www.arduined.eu/files/windows8/CH341SER.zip

Mac http://kig.re/downloads/CH341SER_MAC.ZIP

Mac https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver

点击[INSTALL],就可以完成驱动程序安裝。

确保驱动程序已经安装后,即可烧录Arduino程序

打开Arduino软件,没装过Arduino的可以在下述网址中下载并找到运行程序

https://pan.baidu.com/s/1dG44Fxn

03

文件 -> 打开,找到》》》》》

双击 Fritz.ino

04

在工具菜单项里设置 板 为 Arduino Uno,串口选中。

05

点击 上传

06

成功!

配置电脑控制程序

可以在下述网址中下载并找到运行程序

https://pan.baidu.com/s/1dG44Fxn

打开fritz.exe,等待连接成功(如果使用过程中连接经常断开,可能是因为没有使用电池盒单独供电或没有打开电池盒开关及电池电量不足引起的。)

07

打开 set motor

08

全打勾,

09

拖动一下眼眉,看看是不是能控制啦!

10

恭喜你!大功告成!

查看下面视频了解更多上位机软件使用过程中的详细情形:

关于步进电机的一切

什么是步进电机?

components_IMG_4838.jpg

步进电机是以不连续的步进移动的直流电机。 他们有多个线圈组织在称为“相”的组里。通过依次给每相励磁,电机将旋转, 每次一步。

通过计算机控制的步进,可以实现非常精确的定位和/或速度控制。因此,步进电机是许多精密运动控制应用的首选电机。

步进电机有许多不同的尺寸和样式和电气特性。 本指南详细说明你应该如何选择正确的电机。

4相单极电机

维基共享资源

步进电机的优点

▪  可用于定位场合 – 由于步进机以精确的可重复步骤移动,它们在卓越应用中需要精确定位,如3D打印机,CNC,相机平台和X,Y 绘图仪。一些磁盘驱动器还使用步进电机来定位读/写头。

▪ 精确的速度控制 – 精确的移动增量也允许对过程自动化和机器人的旋转速度进行出色的控制。

▪低速时能保持大扭矩 - 正常的直流电机在低速时不具有很大的扭矩。一个步进电机在低速时具有最大转矩,因此它们是一个对于需要低速度,高精度应用不错的选择。

components_IMG_4796_crop.jpg

步进电机的局限性

▪ 低效率 – 与直流电机不同,步进电机电流消耗独立于负载。.当他们空载时,他们得到的电流最多。正因如此,它们常常运行发热。

▪ 有限的高速扭矩 -一般来说,步进电机在高速时比低速具有较小的转矩 。一些步进器被优化以获得更好的高速性能 ,是它们需要与适当的驱动程序配对以实现该性能 。

▪ 没有反馈 – 与伺服电机不同,大多数步进器没有积分反馈位置。虽然可以实现运行“开环”的高精度。限位开关或通常为了安全和/或建立参考位置需要“本部”检测器。

步进电机类型

有各种各样的步进电机类型,其中一些需要非常专业的驱动程序。为了我们的目的,我们将重点介绍可用普通驱动器驱动的步进电机。它们是:永磁式或混合式步进电机,两相双极或四相单极

components_IMG_4810_crop.jpg

电机尺寸

首先要考虑的事情之一是电机必须做的工作。正如你所期望的,更大电机能够提供更多的功率。步进电机的尺寸范围从比花生较小到大如NEMA 57的怪物。

大多数电机具有额定转矩。这是你需要看看决定电机是否有足够的力矩做你想要的。

NEMA 17是用于3D打印机和小型数控铣床的常用尺寸。更小的电机找到应用于许多仿生机械上。较大的NEMA框架在CNC机床和工业应用中是常见的。

NEMA数字定义了用于安装电机的标准面板尺寸。他们不定义电机的其他特性。两个不同的NEMA 17电机可能有完全不同的电气或机械规格,并且不一定可互换。

components_IMG_4799.jpg

步骤计数

接下来要考虑的是您需要的定位分辨率。每步的步数转速范围为4至400。常用的步数为24,48和200。

分辨率通常表示为每步的度数。 1.8°电机与200步/转电机相同。

高分辨率的牺牲是速度和扭矩。高步进电机比相同尺寸下的RPM低于最大值。与这些类似尺寸的低速计数电机相比,转动这些电机所需的更高的步进速度导致更低的转矩。

components_IMG_4797.jpg

齿轮

实现高定位分辨率的另一种方法是使用齿轮传动。 一个32:1齿轮系应用于 8步/转电机的输出将产生512步电机。

齿轮系还将增加电动机的扭矩。 一些微小的齿轮步进器是能够产生令人印象深刻的扭矩。 但是权衡当然是速度。 齿轮式步进电机通常受到限制去低转速应用。

components_1253-01.jpg

轴样式

另一个要考虑的是如何电机将与驱动系统的其余部分接口。电机有多种轴类型

▪圆形或“D”轴:这些有多种标准直径,还有许多滑轮,齿轮和轴耦合器来配合设计。 “D”轴有一个扁平侧以帮助防止滑动。当涉及运用高扭矩时,这些轴形是我们能用到的

▪齿轮轴:一些轴具有磨入其中的齿轮齿。这些通常设计成与模块化齿轮系匹配丝杠轴

▪丝杠轴: 带有丝杠轴的电机用于构建直线执行器。这些的微型版本可以在许多磁盘驱动器中作为磁头定位器。

components_IMG_4814.jpg

接线

步进电机接线有许多变化。为了我们的目的,我们将专注于可以使用常用驱动程序驱动的步进器。这些是连接为2相双极或4相单极的永磁或混合步进电机。

components_IMG_4837.jpg

线圈和相位

步进电机可以具有任何数量的线圈。但是这些被以称为“相”的组连接。一相中的所有线圈被一起激发。

components_winding_types_2.png

单极与双极

单极 驱动器,总是以相同的方式给相位通电。 一个领导,“共同”领导,将总是负数。 另一个引线将始终为正。 可以实现单极驱动器 与简单的晶体管电路。 缺点是只有较低的扭矩 可以一次对一半线圈通电。

双极 驱动器使用H桥电路实际上反转通过相的电流。通过使极性交替地对相进行通电,可以使所有线圈工作以转动电动机

电机具有2组线圈。 4相单极电机具有4.两相双极电机将具有4个电线 - 每相2个。一些电机带有灵活的接线,允许您将电机作为双极或单极运行。

5-Wire Motor

This style is common in smaller unipolar motors. All of the common coil wires are tied together internally abd brought out as a 5th wire. This motor can only be driven as a unipolar motor.

6-Wire Motor

This motor only joins the common wires of 2 paired phases. These two wires can be joined to create a 5-wire unipolar motor.

Or you just can ignore them and treat it like a bipolar motor!

8-Wire Motor

The 8-wire unipolar is the most versatile motor of all. It can be driven in several ways:

  • 4-phase unipolar - All the common wires are connected together - just like a 5-wire motor.
  • 2-phase series bipolar - The phases are connected in series - just like a 6-wire motor.
  • 2-phase parallel bipolar- The phases are connected in parallel. This results in half the resistance and inductance - but requires twice the current to drive. The advantage of this wiring is higher torque and top speed.

components_IMG_4796_crop.jpg

 

驱动步进电机

Step in time, step in time
Come on, mateys, step in time
Step in time
Step in time, step in time
Step in time, step in time
Never need a reason, never need a rhyme
We step in time, we step in time

"Step In Time"
Robert B. Sherman and Richard M. Sherman

components_IMG_4805.jpg

驱动步进电机比驱动普通有刷直流电机复杂一些。步进电机需要步进控制器以及时地对相进行通电以使电机转向

components_IMG_4817_cropped.jpg

简单单极驱动器

最简单的驱动器类型可以用少量晶体管构建。 这些按顺序简单地接通和断开,以使相位通电并使电动机步机进。 单极驱动器的构建相对便宜,但只能使用单极电机。 在Arduino官网有一个很好的教程教你如何使用。

components_H-Bridge.jpg

简单的双H桥驱动器

驱动双极电机需要两个完整的H桥,因此它可以反转到相的电流。H桥可能很难从头开始构建。但是有很多H桥芯片可以简化任务。

L293D是最受欢迎和最经济的芯片之一。这些可以在大多数第一代Motor Shield的核心中发现,包括令人难以置信的流行的V1 Adafruit Motor Shield。

在Adafruit学习中有一个关于使用裸L293D和Arduino系统的优秀教程:

components_1438-00.jpg

Adafruit Motor Shield V2

Adafruit Motor Shield V2是基于L293D的基本控制器的一大进步。 V2 shield u使用两个TB6612 MOSFET驱动器 。与L293D相比,TB6612提供两倍的电流容量和更低的电压下降,来更有效地驱动你的步进电机。

有2个驱动器芯片和4个完整的H桥,每个shield可以驱动多达两个步进电机。驱动器芯片通过专用的PWM驱动器芯片与I2C接口连接。 这释放了很多 的GPIO引脚用于其他用途,并使屏蔽层也可堆叠。你最多可以叠加32个用2个IO引脚来控制64个电机!

此驱动程序的完整细节可以在学习系统中找到。

components_IMG_4840_crop.jpg

高级CNC控制器

gShield和TinyG CNC控制器板使您更接近工业级步进器的性能。这些电路板具有恒流“斩波器”驱动器,可以调节,来为电机提供最大的扭矩和速度。

TinyG CNC具有板载G代码解释器和4个电机输出,使其成为适用于中小型4轴CNC机床的完整嵌入式解决方案。

正如您所期望的,这些高级的高性能主板比较复杂,适合有经验的用户使用。

这些板及其操作的详细信息可以在TinyG WikiSynthetos Forums中找到。

 

选择合适的驱动代码驱动步进电机

components_IMG_4842_crop.jpg

现在我们来到最重要的部分:确保您的电机和驱动程序兼容。

不匹配的电机和驱动器可能会导致令人失望的性能。 或更糟:损坏电机和/或控制器。

如果你的选择不明智,你可能会遇到这个家伙:

components_691-00.jpg

了解驱动程序规格

驱动程序规范中的两个最重要的参数是:

▪ 电压 - 驱动器可以提供给电机的最大电压。

▪ 持续电流 - 驱动器可以提供给电机的最大电流。

额定的“峰值”电流不适用于步进电机。 始终遵循“持续”电流的额定值。

了解电机规格

您还需要知道电机的电气规格。 有2个关键参数:

▪ 每相的电流 - 这是电机绕组可以处理而不过热的最大电流。

▪ 每相电阻 - 这是每相的电阻

A通常表示额定电压。它通常从上面的两个参数计算,但不总是。 最好根据上述参数使用欧姆定律计算它。

components_Ohm.png

遵守定律!

步进电机的相是电感器,因此它们会抵抗电流的快速变化。 但是在每个步骤结束时或者当电机不运动时,它们表现得像纯电阻负载,并且会遵守欧姆定律.。

静止也就是步进电机吸收最大电流时。 所以欧姆定律可以让我们使用电机规格来计算驱动器的电流要求。

电压=电流x电阻

或者

电流=电压/电阻

这些公式应严格应用于所有“恒压”步进控制器。 这包括来自Adafruit的V1和V2 Motor Shields,以及几乎所有其它基于L293D的控制器。

但是一些电机具有非常低的线圈电阻。严格遵循这些公式,驱动电压将小于5v,性能会不好。这种类型的电机与恒压驱动器不匹配。这些步进器需要更专门的控制器。

违背定律?

这不可能违背欧姆定律。如果你尝试,你将必须被回答蓝烟怪物。 然而,这里还有一些其他规律在起作用。 洛伦兹,法拉第和欧姆定律的专业知识可以帮助您提高电机的性能。

步进线圈在被通电时产生磁场。 根据法拉第定律,变化的磁场在线圈中感应出电流。 根据洛伦兹定律,该电流将在产生电场的电流的相反方向上。 该反向电流被称为“反向电动势”或“反向电动势”。

这个反电动势增加了线圈的“阻抗”或有效电阻。 所以欧姆定律仍然适用 - 但这是对这个阻抗,而不是简单的相电阻。 该阻抗限制每个步骤开始时流过线圈的电流。

components_IMG_4840.jpg

斩波传动

斩波器“恒定电流”驱动通过以更高的电压驱动电机来补偿反电动势。 使用斩波器驱动几倍步进电机的额定电压的是不寻常的。

为了在这些较高的电压下保持安全,斩波器驱动器还监测输送到电动机的电流,并在它超过预设电平之前“斩断”它。

通过在更高的电压处开始,斩波器驱动器能够在步骤开始时向线圈输送更多的电流,增加可用转矩。 除了以较慢的速度增加扭矩之外,它还允许更高的最高速度。

选择斩波器驱动器并为特定电机配置它需要很好地了解电机和控制器。

常问问题

这个电机能和我的shield一起工作吗?

您需要知道电机规格以及控制器规格。 获取该信息后,请检查“将驱动程序与步进器匹配”页面,查看它们是否兼容。

这是一个NEMA 17,所以它应该工作,对吧?

NEMA框架尺寸标准仅定义安装面板的尺寸。 要确定它是否兼容,您需要知道电机的电气规格。

如果没有电机规格怎么办?

参见Jason的反向工程步进电机电线引脚。 这将告诉你相电阻。 对于相电流,您可以基于类似设计的电机和类似的相电阻进行估计。

当有疑问时,一般最好安全地使用较低的电流!

我的项目需要什么尺寸的电机?

大多数电机具有扭矩规格 - 通常为英寸/盎司或牛顿/厘米。 一英寸/盎司意味着电动机可以从轴的中心在一英寸处施加一盎司的力。 例如,它可以使用2“直径滑轮保持1盎司。

在计算项目所需的扭矩时,请确保允许加速所需和克服摩擦的额外扭矩。 将质量块从静止位置提升所需的扭矩要比将其简单地拿着更大。

.如果你的项目需要大扭矩和不高速度,考虑一个齿轮步进。

如何将我的电机连接到Motor Shield?

对于从Adafruit购买的电机,产品说明中列出了接线说明。

对于其他电机,如果可以,请检查电机规格表。

如果你没有规格表,检查Jason反向工程步进电机电线引脚

这个电源可以与我的电机工作吗?

首先确保它不超过电机或控制器的额定电压。通常可以在较低的电压下运行电机,但是你将获得较小的扭矩。

接下来,检查电流额定值。大多数步进模式一次为两相通电,因此电流额定值应至少为电机每相电流的两倍。

*这适用于恒压驱动器。 对于斩波驱动控制器,请检查控制器的说明。

components_IMG_4810_crop.jpg

资源

网上有很多优秀的有关步进电机的信息。 这里有一些我们最喜欢的链接:

Wikipedia Stepper Motor Page

RepRap Stepper Motor Page

Jones on Stepper Motors

Jason on reverse engineering the stepper wire pinouts

components_IMG_4838.jpg

 

 


本文由翻译美国开源硬件厂商Adafruit(阿达水果公司)的相关教程翻译,原始教程由Bill Earl编写,为便于理解和方便读者学习使用,我们已去函与原作者沟通关于本教程翻译中文并发布的相关使用权限,部分内容为适应国内使用场景稍有删改或整合,以上翻译内容仅用于学习交流分享,不得用于盈利等商业用途。

原始文章及相关素材链接:

https://learn.adafruit.com/all-about-stepper-motors/what-is-a-stepper-motor

	

简版Fritz表情机器人安装

欢迎购买简易版开源表情机器人Fritz套件,如果您看完本教程后对此制作感兴趣,可以考虑从下述淘宝网址购买我们提供的配套套件:

http://t.cn/R5IhT1s(由新浪提供的短链接,点击后跳转到淘宝)

安装简介

为了降低安装难度,本款去掉了眼球和脖子的动作,需要的可选用高配版。

可以参考

需要的工具:

  1. 热胶枪
  2. 螺丝刀
  3. 电脑
  4. 耐心

安装木板部分

所有的舵机需要先转到最中间的位置!!!

安装底座

连接处需要热熔胶固定

1

P51202-191313

安装下巴

用舵机里面带的螺丝固定舵机和木板

左侧的铜柱起固定作用

2

P51202-192031

安装脸

此处用的是短螺丝和铜柱。

要把3D打印的眼皮和铁丝安装在一起。

3

P51202-192909

P51202-192925

安装后脑

4

P51202-193038

P51202-193050

总组装

此处要把舵机和舵盘连上

5

QQ图片20151203131630

连接电路

将Arduino固定上,连接电机的连线,插上USB

F0A0B846-A22C-44C8-B7A1-D025FF5BE3EE 02

装配完成!

烧录Arduino程序

打开Arduino软件,没装过Arduino的可以在下述网址中下载并找到运行程序

http://pan.baidu.com/s/1gfCuNGf

03

文件 -> 打开,找到》》》》》

双击 Fritz.ino

04

在工具菜单项里设置 板 为 Arduino Uno,串口选中。

05

点击 上传

06

成功!

配置电脑控制程序

可以在下述网址中下载并找到运行程序

http://pan.baidu.com/s/1gfCuNGf

打开fritz.exe,等待连接成功

07

打开 set motor

08

全打勾,

09

拖动一下眼眉,看看是不是能控制啦!

10

恭喜你!大功告成!