「Asterisk+Arduino」の版間の差分
提供: VoIP-Info.jp
(新しいページ: ' ===スケッチ=== #include <Servo.h> Servo servo1; int servoPin = 10; int up = 60; int down = 15; void setup(){ servo1.attach(servoPin); servo1.write(down);...') |
細 (「Asterisk+Arduino」を保護しました ([編集=管理者のみ許可] (無期限) [移動=管理者のみ許可] (無期限))) |
||
(6人の利用者による、間の9版が非表示) | |||
1行目: | 1行目: | ||
+ | ===ハードウェア=== | ||
+ | Arduino Diecimilaを使います。Arduinoについては http://www.arduino.cc/ を参照してください。<br> | ||
+ | 日本国内では[http://www.switch-science.com/products/detail.php?product_id=3 スイッチサイエンス]( http://www.switch-science.com/ )、メカロボショップ( http://www.mecharoboshop.com/ )などから、3,000円くらいで購入できます。<br> | ||
+ | ネギ振りに使用しているサーボモータは小型のものです。電源はUSBから取ります。<br> | ||
===スケッチ=== | ===スケッチ=== | ||
+ | サーボモータはArduinoの10番ピンに接続します。<br> | ||
+ | Arduinoは以下のようなプログラムで動作させます。シリアルポート(USB)から入力された数値(1~9)に応じてネギを振る回数が決まります。'u'が入力されると上の位置、'd'が入力されると下の位置で停止します。's'が入力されると1回だけネギを振ります。<br> | ||
#include <Servo.h> | #include <Servo.h> | ||
54行目: | 60行目: | ||
} | } | ||
} | } | ||
+ | ===Asteriskからの制御=== | ||
+ | AsteriskからはSystem()でシェルをキックすることでシリアルポートに書き込みます。ArduinoはFDT社のUSB-シリアル変換チップを使用しているため、Linux上からでは/dev/ttyUSBXにみえます。<br> | ||
+ | シリアルにデータを送るシェルは以下の通りです。<br> | ||
+ | #!/bin/sh | ||
+ | |||
+ | TTY="ttyUSB0" | ||
+ | |||
+ | if [ "$1" -lt "1" ] | ||
+ | then | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | if [ "$1" -gt "9" ] | ||
+ | then | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | stty -parenb -parodd cs8 -hupcl -cstopb -cread -clocal -crtscts < /dev/$TTY | ||
+ | |||
+ | echo $1 > /dev/$TTY | ||
+ | |||
+ | sttyでパラメータを設定した後、echo で引数を/dev/ttyUSB0などに書き込むだけです。<br> | ||
+ | Asterisk側からはextenで | ||
+ | exten => 2,1,system(/var/lib/asterisk/negi.sh 2) | ||
+ | のように引数をつけてシェルをキックすればネギを振ります。<br> | ||
+ | なお、/dev/ttyUSBXのパーミッションに注意してください。<br> |
2017年11月18日 (土) 17:52時点における最新版
ハードウェア
Arduino Diecimilaを使います。Arduinoについては http://www.arduino.cc/ を参照してください。
日本国内ではスイッチサイエンス( http://www.switch-science.com/ )、メカロボショップ( http://www.mecharoboshop.com/ )などから、3,000円くらいで購入できます。
ネギ振りに使用しているサーボモータは小型のものです。電源はUSBから取ります。
スケッチ
サーボモータはArduinoの10番ピンに接続します。
Arduinoは以下のようなプログラムで動作させます。シリアルポート(USB)から入力された数値(1~9)に応じてネギを振る回数が決まります。'u'が入力されると上の位置、'd'が入力されると下の位置で停止します。's'が入力されると1回だけネギを振ります。
#include <Servo.h> Servo servo1; int servoPin = 10; int up = 60; int down = 15; void setup(){ servo1.attach(servoPin); servo1.write(down); Serial.begin(9600); Serial.print("OK"); } void servo_loop(char ch) { int i; servo1.write(down); for(i=0;i<(int)(ch -'0');i++){ servo1.write(up); delay(150); servo1.write(down); delay(200); } } void loop(){ if(Serial.available()) { char ch = Serial.read(); switch(ch) { case '1'...'9': servo_loop(ch); break; case 'd': servo1.write(down); break; case 'u': servo1.write(up); break; case 's': servo1.write(down); servo1.write(up); delay(150); servo1.write(down); break; } } }
Asteriskからの制御
AsteriskからはSystem()でシェルをキックすることでシリアルポートに書き込みます。ArduinoはFDT社のUSB-シリアル変換チップを使用しているため、Linux上からでは/dev/ttyUSBXにみえます。
シリアルにデータを送るシェルは以下の通りです。
#!/bin/sh TTY="ttyUSB0" if [ "$1" -lt "1" ] then exit fi if [ "$1" -gt "9" ] then exit fi stty -parenb -parodd cs8 -hupcl -cstopb -cread -clocal -crtscts < /dev/$TTY echo $1 > /dev/$TTY
sttyでパラメータを設定した後、echo で引数を/dev/ttyUSB0などに書き込むだけです。
Asterisk側からはextenで
exten => 2,1,system(/var/lib/asterisk/negi.sh 2)
のように引数をつけてシェルをキックすればネギを振ります。
なお、/dev/ttyUSBXのパーミッションに注意してください。