Android+Arduino
こんな感じで何か出来ないか考え中↓
自分にはソフトウェアの能力が足りないですが,こんな感じの配置も目標↓
今日の進展.
SoftModemのようなことが出来ないかと思って,オーディオ信号をデジタル化して入力する回路を作って Ardumoto上に載せてデジタル入出力ピンに直接はんだ付け.

Androidでピアノのアプリを使って音を出してArduinoでパルス幅を読み取ってみました.

波形が歪んでいるので安定した値は取れませんが,パルス幅(単位はμs)はちゃんと計測できている ことがシリアル通信でモニタできました.

あとは音階でモータコントロールするスケッチを書けば,お手軽なAndroidコントロール移動ロボの出来上がり.
動き出しました. Ardumotoのサンプルスケッチを改変して,
まずピン定義. int ch_R = 2; // audio channel R int ch_L = 4; // audio channel L setup中に以下を記述. pinMode(ch_R, INPUT); // 右チャンネル入力設定 pinMode(ch_L, INPUT); // 左チャンネル入力設定 digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low analogWrite(pwm_a, 0); analogWrite(pwm_b, 0); loop中に以下を記述.元のサンプルの記述は削除. パルス幅を測って,500μs以上か以下かでモータの方向を決めて回してます. pR=pulseIn(ch_R,HIGH,10000); pL=pulseIn(ch_L,HIGH,10000); if (pR !=0 ){ if (pR<500) { digitalWrite(dir_a, LOW); } else {digitalWrite(dir_a, HIGH); } analogWrite(pwm_a, 200); } else {analogWrite(pwm_a, 0); } if (pL !=0 ){ if (pL<500) { digitalWrite(dir_b, LOW); } else {digitalWrite(dir_b, HIGH); } analogWrite(pwm_b, 200); } else {analogWrite(pwm_b, 0); } delay(100);
ピアノで動かした動画
音楽をかけたりするとプルプル踊ってるようにも見えます.
![]() ESP32 Wifi Bluetooth開発ボード |
![]() Arduino Nano Every |
![]() Raspberry Pi pico |
![]() FPGA XILINX Artix-7 |