耳grepをArduinoで
バイナリアンじゃない僕がArduinoをつかって耳grepみたいなのを作ってみた
簡単な話として,ファイルを1バイトづつArduinoに送って,Arduinoはそれを
受け取って音を鳴らす.ということです.
Arduino側
ここでは,Arduino側のプログラムについて書いてます*1.
int beatPin = 3; int boudRate = 9600; void setup(){ Serial.begin(boudRate); pinMode(beatPin, OUTPUT); } void loop(){ if(Serial.available() > 0){ tone(beatPin, Serial.read()+20); // 20Hz以下は聞こえないということを思い出した }else{ noTone(beatPin); } }
Arduinoとは,SerialPortを用いて通信します.
はじめに通信するシリアルポートの通信速度(boudRate)と,音声出力するための
ピンの位置(beatPin)を決めます.ここでは,通信速度を9600bps,使用するピン
の位置を3としました.
loop関数内で受信したデータをtone関数で出力します.1バイトごとに入力される
ので0~255の値が周波数として出力されます*2.
読ませたいファイルの送信
つぎにファイルを読み込んでArduinoに送るためのコードです.
ここではRubyを使って送ってます.
# serialsend.rb require 'serialport' boudRate = 9600 mySerial = SerialPort.new(ARGV.shift, boudRate, 8, 1, SerialPort::NONE) File.open(ARGV.shift) do |f| sleep(1) while char = f.read(1) mySerial.putc char end end mySerial.close
使い方は,引数のはじめにArduinoを接続してるシリアルポート,2番目に読ませたい
ファイルとなっています.
ruby serialsend.rb /path/to/serial/port /path/to/file
で実行するとファイルの内容を1バイトごとに読み込んでシリアルポートに送信されて
Arduinoが受信し,音がではじめます.