“SKU:RB-01C115 多模式電機(jī)驅(qū)動板”的版本間的差異

來自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索
?使用方法
第30行: 第30行:
 
將兩組排針分別斷開時,A0 、 A1 不會被占用。<br/>
 
將兩組排針分別斷開時,A0 、 A1 不會被占用。<br/>
  
 +
<br/>
 +
<br/>
 
==使用方法==
 
==使用方法==
 
===驅(qū)動兩路電機(jī)===
 
===驅(qū)動兩路電機(jī)===
第35行: 第37行:
 
# 直流減速電機(jī) * 2個
 
# 直流減速電機(jī) * 2個
 
# Arduino UNO 控制器 * 1個
 
# Arduino UNO 控制器 * 1個
?
# 11.1V 2200mAh 鋰電池 * 1個
+
# 7.4V 1200mAh 鋰電池 * 1個
 +
# Arduino 程序下載線 * 1條
  
 +
* 實(shí)物連接圖
 +
[[文件:RB01C11504.png|600px|縮略圖|居中]]
 
* 例子程序
 
* 例子程序
 
<pre style='color:blue'>#define PWA 3
 
<pre style='color:blue'>#define PWA 3
第133行: 第138行:
  
 
===驅(qū)動舵機(jī)===
 
===驅(qū)動舵機(jī)===
?
===驅(qū)動步進(jìn)電機(jī)===
+
* 準(zhǔn)備硬件
 +
# 金屬齒舵機(jī) * 1個
 +
# Arduino UNO 控制器 * 1個
 +
# 7.4V 1200mAh 鋰電池 * 1個
 +
# Arduino 程序下載線 * 1條
 +
* 硬件連接
 +
[[文件:RB01C11505.png|600px|縮略圖|居中]]
 +
 
 +
* 例子程序
 +
 
 +
<pre style='color:blue'>#include <Servo.h>
 +
 +
Servo myservo; 
 +
 +
int pos = 0; 
 +
 +
void setup()
 +
{
 +
  myservo.attach(10); 
 +
}
 +
 +
void loop()
 +
{
 +
  for(pos = 0; pos <= 180; pos += 1) 
 +
  {                               
 +
    myservo.write(pos);           
 +
    delay(15);                   
 +
  }
 +
  for(pos = 180; pos>=0; pos-=1) 
 +
  {                               
 +
    myservo.write(pos);         
 +
    delay(15);                 
 +
  }
 +
}
 +
</pre>
 +
 
 +
* 程序效果
 +
連接在 D10 引腳的舵機(jī),從0度開始順時針旋轉(zhuǎn)180度,然后再逆時針旋轉(zhuǎn)180度,循環(huán)執(zhí)行。
 +
 
===UART 接口測試===
 
===UART 接口測試===
 +
* 準(zhǔn)備硬件
 +
# LCD1602 串行液晶 * 1個
 +
# Arduino UNO 控制器 * 1個
 +
# 7.4V 1200mAh 鋰電池 * 1個
 +
# Arduino 程序下載線 * 1條
 +
# 4P 傳感器連接線 * 1個
 +
 +
* 硬件連接
 +
注意接線時,串行液晶的TX,連接控制器的RX;串行液晶RX,連接控制器TX
 +
[[文件:RB01C11506.png|600px|縮略圖|居中]]
 +
 +
* 例子程序
 +
注意:程序上傳時,不能連接 LCD1602 串行液晶
 +
<pre style='color:blue'>void setup()
 +
{
 +
Serial.begin(9600);                //設(shè)置波特率為 9600
 +
Serial.print("$CLEAR\r\n");            //清屏
 +
}
 +
void loop()
 +
{
 +
Serial.print("$GO 1 4\r\n");            //顯示的地址為第 1 行第 4 列
 +
Serial.print("$PRINT Welcome to\r\n"); //打印字符 Welcome to
 +
Serial.print("$GO 2 1\r\n");            //顯示的地址為第 2 行第 1 列
 +
Serial.print("$PRINT www.robotbase.cn\r\n");//打印字符 www.robotbase.cn
 +
}</pre>
 +
 +
* 程序效果
 +
將程序上傳至 UNO 控制器后,連接電機(jī)驅(qū)動板和串行液晶,液晶第一行顯示"Welcome to",第二行顯示"www.robotbase.cn"
 +
 
===IIC 接口測試===
 
===IIC 接口測試===
 +
* 準(zhǔn)備硬件
 +
# 4 - Digital Display * 1個
 +
# Arduino UNO 控制器 * 1個
 +
# 7.4V 1200mAh 鋰電池 * 1個
 +
# Arduino 程序下載線 * 1條
 +
# 4P 傳感器連接線 * 1個
 +
 +
* 硬件連接
 +
[[文件:RB01C11507.png|600px|縮略圖|居中]]
 +
* 例子程序
 +
<pre style='color:blue'>#include <EEPROM.h>
 +
#include <TimerOne.h>
 +
#include <avr/pgmspace.h>
 +
#include "TM1637.h"
 +
#define ON 1
 +
#define OFF 0
 +
 +
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
 +
unsigned char ClockPoint = 1;
 +
unsigned char Update;
 +
unsigned char microsecond_10 = 0;
 +
unsigned char second;
 +
unsigned char _microsecond_10 = 0;
 +
unsigned char _second;
 +
unsigned int eepromaddr;
 +
boolean Flag_ReadTime;
 +
 +
#define CLK A5   
 +
#define DIO A4
 +
TM1637 tm1637(CLK,DIO);
 +
 +
void setup()
 +
{
 +
  Serial.begin(9600);
 +
  tm1637.set(BRIGHT_TYPICAL);
 +
  tm1637.init();
 +
  Timer1.initialize(10000);
 +
  Timer1.attachInterrupt(TimingISR);
 +
  Serial.println("Please send command to control the stopwatch:");
 +
  Serial.println("S - start");
 +
  Serial.println("P - pause");
 +
  Serial.println("L - list the time");
 +
  Serial.println("W - write the time to EEPROM ");
 +
  Serial.println("R - reset");
 +
}
 +
void loop()
 +
{
 +
  char command;
 +
  command = Serial.read();
 +
  switch(command)
 +
  {
 +
    case 'S':stopwatchStart();Serial.println("Start timing...");break;
 +
    case 'P':stopwatchPause();Serial.println("Stopwatch was paused");break;
 +
    case 'L':readTime();break;
 +
    case 'W':saveTime();Serial.println("Save the time");break;
 +
    case 'R':stopwatchReset();Serial.println("Stopwatch was reset");break;
 +
    default:break;
 +
  }
 +
  if(Update == ON)
 +
  {
 +
    TimeUpdate();
 +
    tm1637.display(TimeDisp);
 +
  }
 +
}
 +
 +
void TimingISR()
 +
{
 +
  microsecond_10 ++;
 +
  Update = ON;
 +
  if(microsecond_10 == 100){
 +
    second ++;
 +
    if(second == 60)
 +
    {
 +
      second = 0;
 +
    }
 +
    microsecond_10 = 0; 
 +
  }
 +
  ClockPoint = (~ClockPoint) & 0x01;
 +
  if(Flag_ReadTime == 0)
 +
  {
 +
    _microsecond_10 = microsecond_10;
 +
    _second = second;
 +
  }
 +
}
 +
void TimeUpdate(void)
 +
{
 +
  if(ClockPoint)tm1637.point(POINT_ON);
 +
  else tm1637.point(POINT_ON);
 +
  TimeDisp[2] = _microsecond_10 / 10;
 +
  TimeDisp[3] = _microsecond_10 % 10;
 +
  TimeDisp[0] = _second / 10;
 +
  TimeDisp[1] = _second % 10;
 +
  Update = OFF;
 +
}
 +
void stopwatchStart()//timer1 on
 +
{
 +
  Flag_ReadTime = 0;
 +
  TCCR1B |= Timer1.clockSelectBits;
 +
}
 +
void stopwatchPause()
 +
{
 +
  TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
 +
}
 +
void stopwatchReset()
 +
{
 +
  stopwatchPause();
 +
  Flag_ReadTime = 0;
 +
  _microsecond_10 = 0;
 +
  _second = 0;
 +
  microsecond_10 = 0;
 +
  second = 0;
 +
  Update = ON;
 +
}
 +
void saveTime()
 +
{
 +
  EEPROM.write(eepromaddr ++,microsecond_10);
 +
  EEPROM.write(eepromaddr ++,second);
 +
}
 +
void readTime()
 +
{
 +
  Flag_ReadTime = 1;
 +
  if(eepromaddr == 0)
 +
  {
 +
    Serial.println("The time had been read");
 +
    _microsecond_10 = 0;
 +
    _second = 0;
 +
  }
 +
  else{
 +
  _second = EEPROM.read(-- eepromaddr);
 +
  _microsecond_10 = EEPROM.read(-- eepromaddr);
 +
  Serial.println("List the time");
 +
  }
 +
  Update = ON;
 +
}</pre>
 +
* 程序效果
 +
程序上傳后,數(shù)碼管顯示模塊開始計時,最大計時時間1分鐘,1分鐘后,清零,重新再計時。

2016年7月29日 (五) 15:48的版本

RB01C11501.png

目錄

產(chǎn)品概述

產(chǎn)品為一個多功能驅(qū)動板,可以驅(qū)動電機(jī)、四線兩相步進(jìn)電機(jī)、舵機(jī),外觀是 Arduino 盾板,排座設(shè)計,Arduino 控制器連接電機(jī)驅(qū)動板的同時,不影響傳感器擴(kuò)展板的連接,板載串行、IIC等常用通信接口,電機(jī)轉(zhuǎn)向指示燈,解決 Arduino UNO 控制器 IO 接口驅(qū)動能力弱,不能直接驅(qū)動電機(jī)或大扭力舵機(jī)的問題,電機(jī)及外部供電接口采用防插反接頭,避免由于接線錯誤造成的產(chǎn)品損壞。

規(guī)格參數(shù)

  1. 產(chǎn)品貨號:RB - 01C115
  2. 電機(jī)驅(qū)動芯片:L298P
  3. 外部供電范圍:7V - 35V
  4. 外形特點(diǎn):Arduino UNO 盾板
  5. 外形尺寸:70 * 56mm
  6. 擴(kuò)展接口
  • 電機(jī)接口 * 2 個
  • 外部供電接口 * 1 個
  • UART 接口 * 1 個
  • IIC 接口 * 1 個
  • 數(shù)字接口 * 14 個
  • 模擬接口 * 6 個
  1. 電源指示燈:紅色
  2. 電機(jī)轉(zhuǎn)向指示燈:4 個(紅色 * 2 個,綠色 * 2 個)

接口示意圖

RB01C11502.png
  • 接口說明:
RB01C11503.png

(1)Vin 接口
當(dāng)外部供電范圍在 7V - 12V 之間時,將此處連接,Arduino UNO 可以直接從電機(jī)驅(qū)動板上取電,默認(rèn)為連接狀態(tài)。
當(dāng)外部供電范圍在 12V - 35V 之間時,需要將 Vin 斷開,Arduino UNO 控制器需要單獨(dú)供電,不能從電機(jī)驅(qū)動板上取電。
當(dāng) Arduino UNO 控制器使用 DC 接口供電 7V - 12V 之間時,將此處連接,電機(jī)驅(qū)動板可以直接從 Arduino UNO 控制器上取電。

(2)SNS0、SNS1 接口
將兩組排針分別連接時,A0、A1 接口會被占用,分別讀取 L298 的輸出電流。
將兩組排針分別斷開時,A0 、 A1 不會被占用。



使用方法

驅(qū)動兩路電機(jī)

  • 實(shí)驗(yàn)硬件
  1. 直流減速電機(jī) * 2個
  2. Arduino UNO 控制器 * 1個
  3. 7.4V 1200mAh 鋰電池 * 1個
  4. Arduino 程序下載線 * 1條
  • 實(shí)物連接圖
RB01C11504.png
  • 例子程序
#define PWA 3
#define PWB 11
#define DIRA 12
#define DIRB 13
#define BRAKEA 9
#define BRAKEB 8                 
void setup(){
  Serial.begin(9600);           
  pinMode(PWA,OUTPUT);
  pinMode(PWB,OUTPUT);
  pinMode(DIRA,OUTPUT);
  pinMode(DIRB,OUTPUT);
  pinMode(BRAKEA,OUTPUT);
  pinMode(BRAKEB,OUTPUT);
}

void loop(){
  head();
  delay(3000);
  back();
  delay(3000);
  left();
  delay(3000);
  right();
  delay(3000);
  breaka();
  delay(3000);
  stopt();
  delay(3000);
}

void head(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,LOW);
}

void back(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,LOW);
}

void left(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,LOW);
}

void right(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,LOW);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,LOW);
}

void breaka(){
  analogWrite(PWA,180);
  analogWrite(PWB,180);
  digitalWrite(DIRA,HIGH);
  digitalWrite(BRAKEA,HIGH);
  digitalWrite(DIRB,HIGH);
  digitalWrite(BRAKEB,HIGH);
}

void stopt(){
  analogWrite(PWA,0);
  analogWrite(PWB,0);
  digitalWrite(DIRA,LOW);
  digitalWrite(BRAKEA,HIGH);
  digitalWrite(DIRB,LOW);
  digitalWrite(BRAKEB,HIGH);
}
  • 程序效果

連接在A口和B口電機(jī)以下面的順序運(yùn)動

  • A口電機(jī)順時針、B口電機(jī)逆時針
  • A口電機(jī)逆時針、B口電機(jī)順時針
  • A口、B口電機(jī)順時針
  • A口、B口電機(jī)順時針
  • A口、B口電機(jī)制動 - 電機(jī)指示燈全部亮起
  • A口、B口電機(jī)停止 - 電機(jī)指示燈全部熄滅

驅(qū)動舵機(jī)

  • 準(zhǔn)備硬件
  1. 金屬齒舵機(jī) * 1個
  2. Arduino UNO 控制器 * 1個
  3. 7.4V 1200mAh 鋰電池 * 1個
  4. Arduino 程序下載線 * 1條
  • 硬件連接
RB01C11505.png
  • 例子程序
#include <Servo.h> 
 
Servo myservo;  
 
int pos = 0;   
 
void setup() 
{ 
  myservo.attach(10);  
} 
 
void loop() 
{ 
  for(pos = 0; pos <= 180; pos += 1)  
  {                                 
    myservo.write(pos);            
    delay(15);                    
  } 
  for(pos = 180; pos>=0; pos-=1)  
  {                                
    myservo.write(pos);           
    delay(15);                   
  } 
} 
  • 程序效果

連接在 D10 引腳的舵機(jī),從0度開始順時針旋轉(zhuǎn)180度,然后再逆時針旋轉(zhuǎn)180度,循環(huán)執(zhí)行。

UART 接口測試

  • 準(zhǔn)備硬件
  1. LCD1602 串行液晶 * 1個
  2. Arduino UNO 控制器 * 1個
  3. 7.4V 1200mAh 鋰電池 * 1個
  4. Arduino 程序下載線 * 1條
  5. 4P 傳感器連接線 * 1個
  • 硬件連接

注意接線時,串行液晶的TX,連接控制器的RX;串行液晶RX,連接控制器TX

RB01C11506.png
  • 例子程序

注意:程序上傳時,不能連接 LCD1602 串行液晶

void setup()
{ 
Serial.begin(9600);                //設(shè)置波特率為 9600 
Serial.print("$CLEAR\r\n");            //清屏 
}
void loop()
{ 
Serial.print("$GO 1 4\r\n");             //顯示的地址為第 1 行第 4 列 
Serial.print("$PRINT Welcome to\r\n"); //打印字符 Welcome to 
Serial.print("$GO 2 1\r\n");            //顯示的地址為第 2 行第 1 列 
Serial.print("$PRINT www.robotbase.cn\r\n");//打印字符 www.robotbase.cn 
}
  • 程序效果

將程序上傳至 UNO 控制器后,連接電機(jī)驅(qū)動板和串行液晶,液晶第一行顯示"Welcome to",第二行顯示"www.robotbase.cn"

IIC 接口測試

  • 準(zhǔn)備硬件
  1. 4 - Digital Display * 1個
  2. Arduino UNO 控制器 * 1個
  3. 7.4V 1200mAh 鋰電池 * 1個
  4. Arduino 程序下載線 * 1條
  5. 4P 傳感器連接線 * 1個
  • 硬件連接
RB01C11507.png
  • 例子程序
#include <EEPROM.h>
#include <TimerOne.h>
#include <avr/pgmspace.h>
#include "TM1637.h"
#define ON 1
#define OFF 0

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char microsecond_10 = 0;
unsigned char second;
unsigned char _microsecond_10 = 0;
unsigned char _second;
unsigned int eepromaddr;
boolean Flag_ReadTime;

#define CLK A5     
#define DIO A4
TM1637 tm1637(CLK,DIO);

void setup()
{
  Serial.begin(9600);
  tm1637.set(BRIGHT_TYPICAL);
  tm1637.init();
  Timer1.initialize(10000);
  Timer1.attachInterrupt(TimingISR);
  Serial.println("Please send command to control the stopwatch:");
  Serial.println("S - start");
  Serial.println("P - pause");
  Serial.println("L - list the time");
  Serial.println("W - write the time to EEPROM ");
  Serial.println("R - reset");
}
void loop()
{
  char command;
  command = Serial.read();
  switch(command)
  {
    case 'S':stopwatchStart();Serial.println("Start timing...");break;
    case 'P':stopwatchPause();Serial.println("Stopwatch was paused");break;
    case 'L':readTime();break;
    case 'W':saveTime();Serial.println("Save the time");break;
    case 'R':stopwatchReset();Serial.println("Stopwatch was reset");break;
    default:break;
  }
  if(Update == ON)
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
}

void TimingISR()
{
  microsecond_10 ++;
  Update = ON;
  if(microsecond_10 == 100){
    second ++;
    if(second == 60)
    {
      second = 0;
    }
    microsecond_10 = 0;  
  }
  ClockPoint = (~ClockPoint) & 0x01;
  if(Flag_ReadTime == 0)
  {
    _microsecond_10 = microsecond_10;
    _second = second;
  }
}
void TimeUpdate(void)
{
  if(ClockPoint)tm1637.point(POINT_ON);
  else tm1637.point(POINT_ON); 
  TimeDisp[2] = _microsecond_10 / 10;
  TimeDisp[3] = _microsecond_10 % 10;
  TimeDisp[0] = _second / 10;
  TimeDisp[1] = _second % 10;
  Update = OFF;
}
void stopwatchStart()//timer1 on
{
  Flag_ReadTime = 0;
  TCCR1B |= Timer1.clockSelectBits; 
}
void stopwatchPause()
{
  TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
}
void stopwatchReset()
{
  stopwatchPause();
  Flag_ReadTime = 0;
  _microsecond_10 = 0;
  _second = 0;
  microsecond_10 = 0;
  second = 0;
  Update = ON;
}
void saveTime()
{
  EEPROM.write(eepromaddr ++,microsecond_10);
  EEPROM.write(eepromaddr ++,second);
}
void readTime()
{
  Flag_ReadTime = 1;
  if(eepromaddr == 0)
  {
    Serial.println("The time had been read");
    _microsecond_10 = 0;
    _second = 0;
  }
  else{
  _second = EEPROM.read(-- eepromaddr);
  _microsecond_10 = EEPROM.read(-- eepromaddr);
  Serial.println("List the time");
  }
  Update = ON;
}
  • 程序效果

程序上傳后,數(shù)碼管顯示模塊開始計時,最大計時時間1分鐘,1分鐘后,清零,重新再計時。