※ 請求書払いの際は見積もり依頼フォームからまず見積もり依頼をご送付ください。(その他はお支払い画面で選択)
※ 全ての配送物に領収書が同封されます。
概要
全方向に移動が可能な、YFROBOT社の四輪駆動のメカナムホイール台車です。Arduino Unoと同等の配置でピンが設置されており、マイコンをそのまま差し込むことで制御することができます。
駆動に必要なセットアップが完了しているので、電池を入れればすぐに動作させることができます。
サイズが137mm x 108mmと小型で、研究開発やプロトタイピングに最適です。
同梱内容
基本セット | 基本セット+Arduino Uno互換マイコン | |
メカナムホイール台車 | O | O |
予備ピン | O | O |
六角レンチ | O | O |
リモコン | O | O |
マニュアル | O | O |
Arduino Uno互換ボード | O |
組み立て方や使い方を解説したマニュアルを同梱しています。
組み立て方法・動作方法
下図のように、1層目に3.7Vの電池を2つ設置することができます。
※電池は付属していません。単3形の3.7Vリチウム充電池が対応しており、通常の乾電池では動きません。
質の低い電池だと発火の恐れがあるので、次のような保護回路付きのリチウム充電池を別途購入ください。
2層目を取り付けます。1層目のピンに2層目のピン接続端子が全て合うように取り付けます。1層目と2層目の矢印の向き(正面方向)が合うように取り付けます。
3層目にArduino Uno 互換のマイコンボードを取り付けます。ボードを裏返しにしてピンの位置が合うように取り付けます。
サイズ
メカナムホイールの直径 | 48mm |
サイズ | 137mm x 108mm x 54mm |
ピン配置
ホイールM1 | 位置:左前 | 方向:4番PIN PWM:3番PIN |
ホイールM2 | 位置:右前 |
方向:7番PIN PWM:5番PIN |
ホイールM3 | 位置:左後ろ | 方向:8番PIN PWM:6番PIN |
ホイールM4 | 位置:右後ろ | 方向:12番PIN PWM:11番PIN |
赤外線受信 | 2番PIN | |
ブザー | 9番PIN | |
LED | 13番PIN |
- パワースイッチ:充電池をセットして、このスイッチを押すと電源が入ってマイコンとモータが動作可能状態になります。
- リセットボタン:マイコンをリセットします。マイコンのリセットボタンを押した時と同様の挙動をします。
- IR Receiver:赤外線受信機で、リモコンの通信を受信することができます。
メカナムホイールでの全方向移動について
4つのそれぞれのホイールの回転方向を制御することにより、全方向移動・回転運動を行うことが可能になります。
台車の制御例
下記は前進・後退を繰り返すサンプルコードです。
#define M1dir 4 #define M1speed 3 #define M2dir 7 #define M2speed 5 #define M3dir 8 #define M3speed 6 #define M4dir 12 #define M4speed 11
void setup() { Serial.begin(9600); pinMode(M1dir, OUTPUT); pinMode(M1speed, OUTPUT); pinMode(M2dir, OUTPUT); pinMode(M2speed, OUTPUT); pinMode(M3dir, OUTPUT); pinMode(M3speed, OUTPUT); pinMode(M4dir, OUTPUT); pinMode(M4speed, OUTPUT); setMotor(255, 255, 255, 255); } void loop() { setMotor(100, 100, 100, 100); //前進 delay(1000); setMotor(-100, -100, -100, -100); //後退 delay(1000); setMotor(0, 0, 0, 0); //停止 delay(2000); } /* 数値範囲 -255 ~ 255 */ void setMotor(int m1, int m2, int m3, int m4) { if (m1 > 0) digitalWrite(M1dir, LOW); else if (m1 < 0) digitalWrite(M1dir, HIGH); analogWrite(M1speed, abs(m1)); if (m2 > 0) digitalWrite(M2dir, HIGH); else if (m2 < 0) digitalWrite(M2dir, LOW); analogWrite(M2speed, abs(m2)); if (m3 > 0) digitalWrite(M3dir, LOW); else if (m3 < 0) digitalWrite(M3dir, HIGH); analogWrite(M3speed, abs(m3)); if (m4 > 0) digitalWrite(M4dir, HIGH); else if (m4 < 0) digitalWrite(M4dir, LOW); analogWrite(M4speed, abs(m4)); }
ブザーについて
9番PINがブザーになっており、ON/OFFを繰り返す周波数の音を流すことができます。
下記はArduinoで3,000Hzの音を1秒間流す例です。(333マイクロ秒で1 ON/OFF = 3,000Hz)
void setup() { pinMode(9, OUTPUT); for (int i = 0; i < 3000; i++){ digitalWrite(9, LOW); delayMicroseconds(166); digitalWrite(9, HIGH); delayMicroseconds(166); } } void loop() { }
LEDについて
台車の後部にはLEDが6つついており、それぞれにRGB値を指定することで任意の色で光らせることが可能です。
Arduinoで制御する際は、Adafruit_NeoPixelというライブラリを使用します。下記レポジトリからzipファイルをダウンロードしてArduino IDEでインクルードしましょう。
#include <Adafruit_NeoPixel.h>
#define RGBPIN 13
#define NUMPIXELS 6
Adafruit_NeoPixel strip(NUMPIXELS, RGBPIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.setBrightness(50);
strip.setPixelColor(0, strip.Color(150, 0, 0));
strip.setPixelColor(1, strip.Color(150, 150, 0));
strip.setPixelColor(2, strip.Color(0, 150, 0));
strip.setPixelColor(3, strip.Color(0, 150, 150));
strip.setPixelColor(4, strip.Color(0, 0, 150));
strip.setPixelColor(5, strip.Color(150, 0, 150));
strip.show();
}
void loop(){
}
LEDは左上から0〜2、右上から3〜5という順番で並んでいるので、該当の番号のColorをセットすることで任意の色で光らせることが可能です。
リモコンでの操作
図のIR Receiver D2という部分が、赤外線の信号を受信する端子になっており、2番ピンが割り当てられています。
リモコンの上下左右ボタンで動作させるサンプルコードは下記になります。
https://drive.google.com/file/d/1iMWjzrBaKpkxEXzTFrBj377idoVaOoUM/view?usp=sharing
zipを展開し、irremote.inoをマイコンに書き込みするとリモコンでの操作を確認することができます。サンプルでは上下左右のボタンのみですが、
results.value
が、各ボタンのアドレスの値になるので、シリアルモニタ等で出力を行うことで、各ボタンのアドレスを知ることができます。
超音波センサの受信
上図の4つの位置に超音波センサを取り付けることが可能です。5本のピンの接続端子がついており、対応している超音波センサはSR09です。
I2C アドレスの確認
超音波センサの読み取りにはI2C を用います。超音波センサーを接続した状態で、I2C のアドレスを確認します。
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { uint8_t error, address, line = 1; int nDevices = 0; Serial.println(" 0 1 2 3 4 5 6 7 8 9 A B C D E F"); Serial.print ("00: "); for (address = 0x03; address < 0x78; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { printHex(address); nDevices++; } else if (error == 4) Serial.print(" ER"); else Serial.print(" --"); if ((address + 1) % 16 == 0) { Serial.println(); Serial.print(line); Serial.print("0:"); line++; } } if (nDevices == 0) Serial.println("¥nNo I2C devices found¥n"); else { Serial.print("¥nFound "); Serial.print(nDevices); Serial.println(" devices¥n"); } delay(5000); // wait 5 seconds for next scan } void printHex(uint8_t address) { Serial.print(" "); if (address < 16) Serial.print("0"); Serial.print(address, HEX); }
シリアルモニタで確認をすると、次のように割り当てられたアドレスを確認することができます。この場合は74 が割り当てられているI2C のアドレスになります。
超音波センサの値の取得例
ADDRESS の箇所を、先ほど取得したI2C アドレスに置き換えます。(下の例では74)
#include <Wire.h> #define ADDRESS 0x74 // default address of SR09 is 0xE8 #define CMDREG 0x02 //the command register is 0x02 #define CMDRD 0xBC //read the distance of SR09,less 600cm.
void setup() { Serial.begin(9600); Wire.begin(); SR09_send_command(ADDRESS,CMDREG,0X71); delay(2000); Serial.println("Start..."); }
void loop() { word xx = SR09_read_data(ADDRESS,CMDREG,CMDRD); Serial.print(xx); Serial.println("mm"); delay(200); }
void SR09_send_command(byte address,byte reg,byte command) { Wire.beginTransmission(address); Wire.write(reg); Wire.write(command); Wire.endTransmission(); }
word SR09_read_data(byte address,byte reg,byte command) { word temp_reading; SR09_send_command(address,reg,command); delay(88); // wait at least 87 milliseconds Wire.beginTransmission(address); Wire.write(0x02); Wire.endTransmission(); Wire.requestFrom(uint8_t(address), uint8_t(2)); while ( Wire.available() < 2) {} temp_reading = (Wire.read()) << 8; temp_reading |= Wire.read(); return temp_reading; }
取得ができると、シリアルモニタにて距離を確認することが可能になります。
Arduino Uno互換ボードについて
互換マイコンセットに付属するArduino Uno互換ボードをPCに接続した際に、シリアルポートがグレーアウトされて書き込みができない場合はドライバーをインストールする必要があります。
詳しくは下記記事をご参照ください。
返品・不良品・キャンセルについて
お支払いについて
お支払い情報は安全に処理されます。 クレジットカードの詳細を保存したり、クレジットカード情報にアクセスすることはありません