クムクムロボット[QX-001R3J]の回路構成とArduinoプログラミング

スクラッチや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までの間の抵抗回路定数によってボリュームの回転に合わせた音量のカーブが少ししっくりきていません。このあたりの抵抗値を変更すると音量カーブの調整ができます。

>tone関数を使ったサンプルプログラムはこちら

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)より

 

 

コメント

タイトルとURLをコピーしました