スクラッチやPythonでワイヤレスプログラミングをしているときには、ブロックや関数が吸収してくれているので特に気にすることがない部分ですが、Arduinoなどで直接ロボットをコントロールしたい場合などには必ず知っておかないとできない情報です。
CPUポート割付
クムクムロボットのCPU(ATMEGA32U4)と周辺パーツ(ペリフェラル)の接続については下記の通りです。
CPU | 機能 | Arduino | ペリフェラル | 備考 |
1 | PE6 | D7 | MOTOR-4 | |
2 | UVCC | – | USB-VCC | |
3 | D- | – | USB-D(-) | CN2-(2)へ |
4 | D+ | – | USB-D(-) | CN2-(3)へ |
5 | U-GND | – | – | GND接続 |
6 | U-CAP | – | – | GND接続 |
7 | VBUS | – | – | CN2-(2)とりヒューズ・ダイオード経由にて |
8 | LED-RX | – | LED-1 | USBよりデータを受信時点灯 |
9 | PB1 | SCK | 基板裏ICPパターン(3)へ | |
10 | PB2 | MOSI | 基板裏ICPパターン(4)へ | |
11 | PB3 | MISO | 基板裏ICPパターン(1)へ | |
12 | PB7 | D11 | MOTOR-SW | モータ電源供給制御 HIGH=ON/LOW=OFF |
13 | RESET | 基板裏ICPパターン(5)へ | ||
14 | VCC | +5.0V | ||
15 | GND | GND | ||
16 | XTAL1 | |||
17 | XTAL2 | |||
18 | PD0 | D3 | I2C-SCL | U6(日本語LSI – ATP3011F4-AU)の(28)へ |
19 | PD1 | D2 | I2C-SDA | U6(日本語LSI – ATP3011F4-AU)の(27)へ |
20 | PD2 | D0 | BLE-TXD | U3(レベルコンバータ)(4)(2)を経由しU2(RN4020)の(5) UART-TXへ |
21 | PD3 | D1 | BLE-RXD | U4(レベルコンバータ)(2)(4)を経由しU2(RN4020)の(6) UART-RXへ |
22 | LED-TX | – | LED-2 | USBへデータを送信時点灯 |
23 | GND | |||
24 | AVCC | +5.0V | ||
25 | PD4 | D4 | MOTOR-1 | |
26 | PD6 | D12 | BEEP | |
27 | PD7 | D6 | MOTOR-3 | |
28 | PB4 | D8 | MOTOR-5 | |
29 | PB5 | D9 | MOTOR-6 | |
30 | PB6 | D10 | MOTOR-7 | |
31 | PC6 | D5 | MOTOR-2 | |
32 | PC7 | D13 | USONIC-T | CN5(2) 距離センサーTRIGGER出力 |
33 | GND | – | ||
34 | VCC | +5.0V | ||
35 | GND | |||
36 | PF7 | A0 | LED-R | |
37 | PF6 | A1 | LED-G | |
38 | PF5 | A2 | LED-B | |
39 | PF4 | A3 | USONIC-E | CN5(2)距離センサーECHO入力 |
40 | PF1 | A4 | MIC-IN | U10(OPA344)の(1)へ接続 |
41 | PF0 | A5 | VOLT-IN | 電池電圧を1/2に分圧して入力 (R4)より |
42 | AREF | – | +3.3V | U5(2)より3.3V |
43 | GND | |||
44 | AVCC | +5.0 |
クムクムロボットの機能制御について
RGB-LEDの制御
カソードコモン型のフルカラーLEDを使用し下記の通り接続しています。
アナログポート利用のため、ArduinoではanalogWriteにより輝度を指定した点灯が可能です。
単純な点灯・消灯であれば digitalWrite を使用しても構いません。
LEDとCPUの間にある抵抗(R23,25,26)は、LEDの各色に決められている規定電流に制御するために必要な抵抗です。
>>digitalWriteを使ったサンプルプログラムはこちらをクリック
CPU | 機能 | Arduino | ペリフェラル | |
36 | PF7 | A0 | LED-R | 赤 |
37 | PF6 | A1 | LED-G | 緑 |
38 | PF5 | A2 | LED-B | 青 |
モータの制御
使用しているサーボモータは、中国の JX-Servo社(PS-1109HB)のカスタム製品です。
通常は0-120°回転の製品を弊社の要求によりOEMとして0-180°回転するようにしています。
このモータは、Arduino(D4~D10)に接続しているため標準のサーボクラスを使い回転制御を行うことができます。
各モータにはあばれ防止のために220μFの電化コンデンサーと逆流防止のダイオードで保護をしています。
また、必要ないときにモータへの電源供給をカットするためのMOTOR-SWを設け、この信号をON(HIGH)/OFF(LOW)することで7個のモータへの電源供給を一括で処理できます。
CPU | 機能 | Arduino | ペリフェラル | 備考 |
25 | PD4 | D4 | MOTOR-1 | 右腕 |
31 | PC6 | D5 | MOTOR-2 | 右ふともも |
27 | PD7 | D6 | MOTOR-3 | 右足 |
1 | PE6 | D7 | MOTOR-4 | 顔 |
28 | PB4 | D8 | MOTOR-5 | 左足 |
29 | PB5 | D9 | MOTOR-6 | 左ふともも |
30 | PB6 | D10 | MOTOR-7 | 左腕 |
12 | PB7 | D11 | MOTOR-SW | モータへの電源供給 |
BEEP音の制御
BEEP音(tone)はArduino(D12)からボリュームを通してLM386を利用したオーディオアンプを通して発音します。
※本回路ではR14からU7までの間の抵抗回路定数によってボリュームの回転に合わせた音量のカーブが少ししっくりきていません。このあたりの抵抗値を変更すると音量カーブの調整ができます。
CPU | 機能 | Arduino | ペリフェラル | 備考 |
26 | PD6 | D12 | BEEP |
日本語発話の制御
クムクムでの日本語発話は日本の株式会社アクエスト社 は販売をする 音声合成LSI 「AquesTalk pico LSI をATMEGA32U4とI2Cバス接続しています。
ArduinoのプログラムからはI2Cバスを利用した制御により発話コントロールをしています。
18 | PD0 | D3 | I2C-SCL | U6(日本語LSI – ATP3011F4-AU)の(28)へ |
19 | PD1 | D2 | I2C-SDA | U6(日本語LSI – ATP3011F4-AU)の(27)へ |
超音波距離センサーの制御
クムクムに使用している超音波距離センサーは、電子工作ではスタンダードなHC-SR04を使用しています。
CPU | 機能 | Arduino | ペリフェラル | 備考 |
32 | PC7 | D13 | USONIC-T | CN5(2) 距離センサーTRIGGER出力 |
39 | PF4 | A3 | USONIC-E | CN5(2)距離センサーECHO入力 |
マイクによる音の検知
クムクムによる音の検知は、胸についている5mm径のコンデンサーマイクで拾った音を、オペアンプ(OPA344)により100倍増幅によりArduinoのアナログポート(A4)にアナログデータとして取り込んでいます。
プログラムは単純にanalogReadを使います。
取り込まれる音声の波形
analogReadで読み込むデータはモノラルデータとして音のレベルを取り込むため、下記のように512あたりを中心に上下に動いたデータが取り込まれます。
そのため、音のレベル検知処理としては、上下どちらかのデータを取り込み処理することでレベル取りをすることができます。
※R20/R19の比率で倍率を決めていますが、本回路で使用している抵抗値は、設計時に使用していたマイクに合わせた抵抗値となっておりインピーダンス等が多少ずれ、発振気味になっています。クムクム内のファームウェアではソフトウェアで発振を読み飛ばす制御をしていますが、もしハード的に変更したい場合は、R19を100Ωや10Ωなどに変更し、R20を求めたい倍数の抵抗に変えることで発振は抑えられます。
>MICによるデータ入力サンプルプログラムはこちら
CPU | 機能 | Arduino | ペリフェラル | 備考 |
40 | PF1 | A4 | MIC-IN |
BLEモジュールの制御
クムクムにはBluetoothを制御するためのマイクロチップ社のモジュール(RN4020)をボード上に標準搭載し、ATMEGA32U4とはシリアル接続をしています。
そのため、Arduinoによるプログラムでは単純にシリアルポートに接続したデバイスを制御するプログラムを書くだけで上位と簡単にBluetooth通信ができます。
クムクムQX-001R3Jでは、マイクロチップ社のMLDPという通信方法を使い、パソコンのUSBに接続された専用通信機(RN4020)と1:1のシリアル通信を実現しています。
※RN4020をMLDPやBLEモードで使うには、プログラム起動時にCPUからRN4020の設定を行うコマンドを送ります。設定が終わればあとは単純にシリアル通信処理を行うだけです。
>RN4020によるBluetooth通信サンプルプログラムはこちら
LED1(青)は、Bluetoothの接続が確立すると自動で点灯し接続が切れると消灯します。
LED2(橙)は、ボードに電源が投入されると点灯します。
U3,U4は上位のCPUが+5Vで操作しRN4020が+3.3Vで動作している電圧違いを吸収するためのレベルコンバータです。
CPU | 機能 | Arduino | ペリフェラル | |
20 | PD2 | D0 | BLE-TXD | U3(レベルコンバータ)(4)(2)を経由しU2(RN4020)の(5) UART-TXへ |
21 | PD3 | D1 | BLE-RXD | U4(レベルコンバータ)(2)(4)を経由しU2(RN4020)の(6) UART-RXへ |
電池電源監視制御
クムクムでの電池電圧監視は、電池電圧を1/2に分圧したものをArduinoの(A5)に入力しアナログ値として検知します。
アナログの基準値AREFに、電池電圧からDCDCコンバータ出力された3.3Vを使用しているためです。
CPU | 機能 | Arduino | ペリフェラル | 備考 |
41 | PF6 | A5 | VOLT-IN | 電池電圧を1/2に分圧して入力 (R4)より |
コメント