2017年 ITキッズラボ開催予定
2017年ITキッズラボワークショップの開催予定です。
1月21日(土)・2月18日(土)・3月18日(土)
カリキュラムの内容が確定しましたらWEBサイトに掲示します。
お問合せはこちらからお願いします。
2017年ITキッズラボワークショップの開催予定です。
1月21日(土)・2月18日(土)・3月18日(土)
カリキュラムの内容が確定しましたらWEBサイトに掲示します。
お問合せはこちらからお願いします。
2016年ITキッズラボワークショップの開催予定です。
1月23日(土)・2月20日(土)・3月12日(土)
初心者・リピーターそれぞれのカリキュラムをご用意しています。
お問合せ・お申し込みはこちらからお願いします。
サーボモータは、回転する角度を指示して動かすことができるモータなんだ。ロボットの腕や足に使われてるよ。
名前 | 仕様 |
---|---|
マイコン | Arduino UNO |
サーボモーター | SG90 |
モーターから出ている線を Arduino に直接つなぐ。
10度、11度、12度と1度づつ角度を変えて170度までモータ回す。
170度までいったら、今度は180度から1度まで逆回転させる。
#include <Servo.h> Servo myservo; int pos = 0; void setup() { myservo.attach(8); // 8 pin is used for signal } void loop() { for(pos = 10; pos <= 170; pos += 1) { myservo.write(pos); delay(15); // waits 15ms } for(pos = 180; pos >=1; pos-=1) { myservo.write(pos); delay(15); // waits 15ms } }
Arduino IDE を使っている場合は、以下の手順で Arduino にプログラムを書き込む。
INO を使っている場合は、コマンドラインで次のコマンドを打つ。
$ ino build $ ino upload
うまくいったらモータが回り始めるはずだよ 😉
「コンピューターとしゃべる(Bluetooth)」で示したように、Arduino に HC-06(JY-MCU) を接続して、BeagleBone のアプリケーションと通信するまでを説明するよ。
BeagleBoneBlack に SPP が登録されているか確認する。
$ sdptool browse local
登録されていないので、以下のコマンドで登録する。
$ sdptool add --channel=22 SP Serial Port service registered
SPP が登録された。
# sdptool browse local Service Name: Serial Port Service Description: COM Port Service Provider: BlueZ Service RecHandle: 0x10007 Service Class ID List: "Serial Port" (0x1101) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 22 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Serial Port" (0x1101) Version: 0x0100
Bluez-simple-agent で libffi.so ライブラリが必要なのでソースをダウンロードしてインストールしておく。
シンボリックリンクを張るのを忘れずに。
$ wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz $ tar xzvf libffi-3.2.1.tar.gz $ cd libffi-3.2.1 $ ./configure && make # make install # ln -s /usr/local/lib/libffi.so.6 /usr/lib/
Arduino の Bluetooth デバイス HC-06 を検索する。
$ sudo hcitool scan Scanning ... 30:14:10:15:02:64 HC-06
RFCOMM ポートとアダプタをバインドする。
# rfcomm bind 1 30:14:10:15:02:64 # rfcomm rfcomm1: 30:14:10:15:02:64 channel 1 closed
指定したリモートのBluetoothデバイスと仮想シリアルポートを関連付ける。 bindコマンド実行後、/dev/rfcommDEV(DEVはポート番号)というデバイスファイルが作成されるので、 以降はこれを使って通信ができる。 bindコマンドでは、デバイスファイルを作るだけで実際にリモートデバイスと接続は行わない。 アプリケーションがデバイスファイルをオープンする段階で接続処理が行われる。
HC-06 が見つかったので、MAC アドレスを指定してペアリングする。
ピンコードは 1234 を入力する。
*bluez-simple-agentは python 2.7系で動かない。
$ sudo bluez-simple-agent hci0 30:14:10:15:02:64 RequestPinCode (/org/bluez/399/hci0/dev_30_14_10_15_02_64) Enter PIN Code: 1234 Release New device (/org/bluez/399/hci0/dev_30_14_10_15_02_64)
現在のセッションのみで接続する。
$ sudo hidd --connect 30:14:10:15:02:64
minicom のインストール&セットアップ
$ sudo apt-get install minicom
minicom を起動して、Serial port setup で以下のように設定する。
$ sudo minicom -s A - Serial device: /dev/rfcomm1 E - Bps/Par/Bits: 115200 8N1
Configuration 画面から exit すると受信データが表示される。
Welcome to minicom 2.6.2 OPTIONS: I18n Compiled on Feb 8 2013, 05:09:59. Port /dev/rfcomm1 Press CTRL-A Z for help on special keys hello world! :
$ pip install pyserial $ sudo easy_install -U pyserial
注意:python 2.7 から python 3.3 へ移行したとき pip でエラーが発生したが 以下の手順でうまくいった。
# curl https://bootstrap.pypa.io/ez_setup.py | python # easy_install --upgrade pip # pip install --upgrade setuptools
pyserial を使って受信データを表示する。
> import serial > ser = serial.Serial('/dev/rfcomm0', timeout=0.1) # timeoutを秒で設定(default:None)ボーレートはデフォルトで9600 > c = ser.read(10) # 10文字読み込み > print(c) > ser.close()
BeagleBoneBlack に Node.js と Snowshoe 環境はインストールされているものとする。
シリアル通信モジュール インストール
$ npm install serialport
var serialport = require('serialport'); /* ポートの設定 */ var portName = '/dev/rfcomm1'; var sp = new serialport.SerialPort(portName, { baudRate: 115200, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, parser: serialport.parsers.readline("n") }); /* イベントハンドラ */ sp.on('data', function(input) { console.log('Received : ' + input); });
実行結果
$ node serialtest.js Received : hello world! Received : hello world! Received : hello world! :