Arduino ライブラリ追加


これまでは、ライブラリを追加するには、
検索エンジンでライブラリを探してきて、
libraryディレクトリ配下にマニュルで配置していた。

Arduino.cc のArduino IDE 1.6.9 以降では、ライブラリ管理の機能が追加されて、ライブラリの追加が簡単になった。

(1)ネットから直接インストールする。
メニューの[スケッチ]-[Include Library]-[Manage Libraries]から、Library Managerを立ち上げます。
Library Managerのウィンドウが立ち上がったら、右上にキーワードを入力して自分が探しているライブラリを検索します。
20170901_arduino_libraly_manager
(2)Zipファイルからインストールする。
メニューの[スケッチ]-[Include Library]-[Add .Zip Library]からZipファイルを選択します。

参考
Arduinoライブラリの追加 – Make


さくら IoT – 温湿度センサー HDC1000


さくら IoT と 温湿度センサー HDC1000 で温湿度を観測する

ハンズオン資料
さくらインターネットから、ハンズオンの資料が公開されています。
http://www.slideshare.net/sakura_pr/ss-64599802

センサーとして HDC1000 を、WebSocket クライアントとして node-red を使っています。
HDC1000 は、秋月電子で販売されています。
HDC1000使用 温湿度センサーモジュール

いくつか気になったことがあります。
(1) HDC1000 の +V を Arduino の 3.3V に接続している。
Arduino は 5V 動作なので、HDC1000 も 5V にすべきでしょう。
(2) node-red のインストールを、すべて root ユーザーで行っている。
yum 以外は、一般ユーザで設定できますね。
(3) node-red での動作確認が WebSocket を受信するところまでです。
これは、時間の関係かもしれないが、もうちょっとやりたいですよね。
WebSocket の受信だけなら、WEBブラウザーでも出来るし。
拙作の javascript 版

今回やったこと
HDC1000 のデータを node-red で受信するところまでは、資料と同じです。
その先として、グラフ表示をしてみました。

環境は、CentOS ではなく、MAC で構築しました。
インストールは、下記を参考にしてください。
brew で node をインストールする
MAC に Node-RED をインストールする
Node-RED でグラフ表示をする

センサ側
HDC1000 を通信モジュールに接続する
20161013_sakura_hdc1000

node-red の処理
WebSocket の受信から、http 出力にする flow がわからなかったので。
いったん、WebSocket で受信したデータをファイルに保存しました。
ファイルを読み出して、http 出力に結びつけました。

Flow
Flow は Github で公開しました。
20161013_sakura_flow

parser
WebSocket で受信したデータを cvs 形式にする
コード parser.js

text
一番新しいデータが、上になるように、逆順に並び替える
コード text.js

temperature、humidity、count
最新の100個のデータを、グラフ形式に変換する
コード temperature.js

結果
20161013_sakura_temperature


さくら IoT で温度・湿度を観測する


20160701_sakura_iot_system

さくらの IoT Platform さくらインターネットが提供するIoTプラットフォームサービスです。
前回 は、基本的な確認ができたので。
今回は、実用的なものを作ってみました。
センサーのデータ (温度・湿度など) を、さくらの IoT を経由して、WEB にてグラフ表示します。
作ったプログラムは Github で公開しました。

まず、センサー部です。
センサーボード として、以前作ったものを使います。
温度、湿度、気圧などが測定できます。
20160701_sakura_iot_sensor_board

Arduino にセンサーボードとIoT通信ボードを接続します。
Arduino のスケッチ を作成します。
Arduino に書き込みます。
Arduino の電源を入れると、さくらの IoT サーバーに送信されます。
データは、さくらの IoT コントロールパネルに表示されます。
これで、センサー部は完成です。

続いて、サーバー部です。
今回のアルファ版では、さくらのクラウド 2万円分チケットも付いていました。
ありがたく使わせて頂き、さくらのクラウドで新規にサーバーを立てました。
サーバーのプログラム を作成します。
主要部は、Python Flask で記述しました。
さくらの IoT Platform から来たデータを、いったんデータベース(MySQL) に格納します。
データベースから読み出し、Google Chart でグラフ表示します。
これで、サーバー部は完成です。

自宅で1日ほど運用したものが、下記に示します。
ここのところ、毎日30度を超えて暑いですね。
寝る前に、クーラーを入れたので、そこだけ温度が下がってます。
20160701_sakura_iot_graph


さくらIoT通信モジュールを試してみた


さくらの IoT Platform は、さくらインターネットが提供するIoTプラットフォームサービスです。
α版テスターの公募があったので申し込んでみたところ、6月頭に通信モジュール・キットが送付されてきました。

通信モジュール・キット
送付されたのは、アルミの箱が1つでした。
201618_sakura_iot_case

何の説明もついていなかったので、まずは、ねじ回しで箱を開けます。
中身は、下記のものでした。
・通信モジュール SORACOM SIM 版 x 1個
・通信モジュール Softbank SIM 版 x 1個
・接続ケーブル x 2本
・棒形アンテナ x 2本
・アンテナケーブル x 2本
・板型アンテナ x 1個
・さくらのクラウド 2万円分チケット x 1枚
・シール x 1枚

通信モジュールは、モデムボードとデバイスボードが一体になり、SIMカードが挿入されています。
モデムボードは CEREVO 製で、デバイスボードは ABiT 製です。
20160618_sakura_iot_softbank 20160618_sakura_iot_soracom 20160618_sakura_iot_abit

マニュアル
さくらの IoT プラットフォーム 利用マニュアル – PDF販
さくらのIoTプラットフォーム 利用マニュアル – github

物理インターフェイス
電源は5V系です。
UART、SPI、I2C の3つの口を持っていますが。
どれか1つ接続すれば、OKです。

Arduino との接続

Sakura IoT Arduino
1 UART TX (O) D8 or D0
2 UART RX (I) D9 or D1
3 GND GND
4 SPI MOSI (I) D11
5 SPI MISO (O) D12
6 SPI SCK (I) D13
7 SPI CS (I) D10
8 GND GND
9 I2C SDA (I/O) SDA (A4)
10 I2C SCL (I/O) SCK (A5)
11 GND GND
12 +5V +5V

ソフト・インターフェイス
さくらインターネット から、Arduino用の SPI と I2C のサンプルコードが公開されています。
SakuraAlphaArduino

UART については、解説を書いた人がいます。
さくらのIoT通信モジュールのUARTの使い方

試してみる
(1) コントロールパネルの用意
さくらインターネットのアカウントを作成します。
IoT Platformのコントロールパネルにて、通信モジュールを登録します。
サービスとして「WebSocket」を作成します。
20160618_sakura_iot_control_top

(2) 通信モジュールの用意
通信モジュールに、棒型アンテナと、Arduinoを接続します。
パソコンにUSBコネクタを差して給電します。
5分ほどすると、コントロールパネルの表示が「オンライン」に変わります。
20160618_sakura_iot_wiring

(3) Arduinoの用意
サンプルコードの SakuraAlpha_I2C あるいは SakuraAlpha_SPI を Arduino に書き込みます。
コントロールパネルは、下記のようになります。
20160618_sakura_iot_control_data

Arduino のシリアルモニタは、下記のようになります。
20160618_sakura_iot_monitor

クライアントの作成
WebSocket のクライアントを作成します。
接続先は、コントロールパネルに表示されています。

wss://secure.sakura.ad.jp/iot-alpha/...

データは、下記のようなJSON形式です。

{"module":"xxx","type":"channels","datetime":"2016-06-18T07:43:55.024301691Z","payload":{"channels":[{"channel":0,"type":"I","value":1},{"channel":1,"type":"I","value":1},{"channel":2,"type":"I","value":1}]}}

keepalive もやってきます。

{"type":"keepalive","datetime":"2016-06-18T07:45:23.06614438Z"} 

実行結果

type: channels
datetime: 2016-06-18T17:12:18.391885263Z
module: xxxx
channel: 0 type: I value: 44
channel: 1 type: I value: 44
channel: 2 type: I value: 44

type: keepalive
datetime: 2016-06-18T17:12:19.97128196Z

コードは Github で公開しました。

参考
さくらのIoT Platformを試してみた
さくらのIoT Platform α で作ったもの
さくらのIoT通信モジュールのUARTの使い方
さくらのIoT Platform α – mbed


Sumobot Jr


20160501_sumobot_completion

Sumobot Jr はオープンソースのロボットカーのキットです。

オリジナルから設計データを少し変更しています。
設計データやプログラムなど Github で公開しました。

部品
Arduino Uno
電池ボックス (単三x4本)
・単三電池 x 4本
・連続回転サーボ SM-S4303R x 2個
16mm ボール
・ネジとナット M2.6x10mm x 12本、M2.6x15mm x 2本
・結索バンド 20cm x 2本
・ゴムバンド #25 3mm幅 x 2本
・線材 少々
20160501_sumobot_parts_2

加工品
レーザー加工機
・車体 (設計データ)
20160501_sumobot_laser_body

3Dプリンタ
・ボールキャスタ (設計データ)
20160501_sumobot_3d_printer_ball_caster

サーボの動作確認
サーボが所望の動作をするか確認します。
特に、停止を指定したときに、ちゃんと停止しているか。
参考: Arduino 連続回転サーボ

車体の組み立て
動画が公開されています。
Sumobot Jr Assembly video for Nodebots Day 7/27

(1) ボールキャスタの穴をキリでM2.6のネジが入るように大きくします。
20160501_sumobot_ball_hall_blue

(2) ボールキャスタを底板にネジで固定します。
20160501_sumobot_ball_calter_blue

(3) サーボホーン (サーボの付属品) の穴をキリでM2.6のネジが入るように大きくします。
20160501_sumobot_servo_horn_holl

(4) サーボホーンを車輪にネジで固定します。
20160501_sumobot_servo_horn

(5) サーボを底板に結索バンドで固定します。
20160501_sumobot_servo_mount_2

(6) Arduino を上板にスペーサーをかましてネジで固定します。
20160501_sumobot_srduino_parts20160501_sumobot_arduino

(7) 上板を車体に取り付けます。
20160501_sumobot_upper

(8) 車輪を車体に木ネジ (サーボの付属品) で取り付けます。
20160501_sumobot_wheel_2

(9) 前板を車体に取り付けます。
20160501_sumobot_front_2

(10) ボールをボールキャスタにはめ込みます。
20160501_sumobot_ball_mount_blue

配線
20160501_sumobot_circuit

(11) 電池ボックスにメスのジャンパー線を半田付けします。
(12) オスのジャンパー線を半田付けして、4つ口にします。
20160501_sumobot_soldering

(13) Arduinoと電池ボックスと2個のサーボを結線します。
20160501_sumobot_wiring

(14) 電池ボックスを車体に入れます。
電池ボックスの上下に厚紙を入れると、ほどよい感じで固定されます。
20160501_sumobot_battery

(15) 完成です。
20160501_sumobot_completion

プログラム
Arduino にスケッチ sumobot_turn を書き込みます。
電源を入れます。
Sumobot Jr が左回転と右回転を繰り返せば、OKです。

課題
ゴムバンドがすぐに車輪から外れる。
20160501_sumobot_wheel_and_rubber

YouTube Preview Image

Arduino Uno : Servo と AltSoftSerial は同時に使用できない


Arduino Uno で Servo クラスと AltSoftSerial クラスを同時に使用すると、コンパイル・エラーになります。

multiple definition of `__vector_11'

どちらのクラスも16ビットタイマーを必要としていて、そのための割込みが衝突しています。
Arduino Uno のハード仕様による制約で、回避する方法はありません。

対策として、Arduino Mega などハード仕様を満たすものを使う方法もありますが。
ひとまず、SoftSerial クラスを使って凌ぎました。

参考
AltSoftSerial and Servo libraries fails to compile


Arduino 連続回転サーボ


20160425_arduino_servo

一般的なサーボ は、180度くらいの可変範囲を持っています。
連続回転サーボ (Continuous Rotation Servo) は、360度以上の可変範囲を持ち、連続して回転することができます。
モータの代わりに使用することができます。

今回は、SpringRC SM-S4303R を使用しました。
国内では扱っているところがなかったので、米国の Pololu から購入しました。

制御信号
制御信号は、周期的なパルスで、周期 20ms、パルス幅 1.0ms – 2.0ms です。
パルス幅 1.5ms で停止、1.0 – 1.5ms で時計周り、1.5 – 2.0ms で反時計周りです。
停止の 1.5ms から離れるに従い回転数が増えます。
20160425_servo_control_2

Arduino で制御する
サーボには3本の線があります。
赤を+5v、黒をGND、白を制御ピンに接続します。

(1) digitalWrite
制御信号を digitalWrite で生成します。
width を 1000、1400、1500、1600、2000 と変化させて、
時計周り(高速)、時計周り(低速)、停止、反時計周り(低速)、 反時計周り(高速) となることを確認します。

servo-digitalwrite.ino

 
int PIN = 13;
int width = 1500;
void setup() {
 	pinMode(PIN, OUTPUT);
}
void loop() {
	digitalWrite(PIN, HIGH);
	delayMicroseconds(width);
	digitalWrite(PIN, LOW);
	delayMicroseconds(3000 - width);
	delay(17); // wait 17 ms
}

(2) Servo クラス
Arduino には、サーボ制御のためのクラス Servo が用意されています。ハードウェア・タイマーを利用しています。
Servo#write で、回転のスピードを設定します。0にするとフルスピードで回転し、180にすると、反対方向にフルスピードで回転します。90のときは停止します。

speed を 0、80、90、100、180 と変化させて、
時計周り(高速)、時計周り(低速)、停止、反時計周り(低速)、 反時計周り(高速) となることを確認します。

servo-test.ino

 
#include <Servo.h>
Servo myservo;
int PIN = 13;
int speed = 90;
void setup() { 
	myservo.attach(PIN);
	myservo.write(speed);
} 
void loop() {}

(3) コマンド
パラメータを変えるたびに、プログラムを書き換えるのは面倒です。
シリアルモニタからコマンドを送って、変更できるようにしました。
servo_command.ino

コマンドの形式は、s + 3桁の数字です。

s000 : 時計周り 高速
s090 : 停止
s180 : 反時計周り 高速

参考
Pololu SM-S4303R
SM 33R/43R/81R Datasheet
Servo#write : Arduino日本語リファレンス


Arduino SRL 社の記者会見


20150801_arduino_musto

8月1日に Arduino SRL 社の Federico Musto 氏の記者会見がありました。
Maker Faire Tokyo のため来日した機会に、スイッチサイエンス社が会見を設定しました。

現在、Arduino は内部分裂をおこしています。
詳しいことは、スイッチサイエンスさんの記事を参照ください。
Arduino の内部分裂について

以下は、Musto 氏の会見を元に、私なりに整理したものです。

Arduino の分裂と現状
Massimo Banzi 氏が率いる米国の Arduino LLC 社と、Federico Musto 氏が率いるイタリアの Arduino SRL 社に、分裂しています。

そのため、Arduino のサイトも2つあります。
Arduino LLC (米国) が運営する従来から存在する
https://www.arduino.cc/
Arduino SRL (イタリア) が運営するもので、分裂後に作ったもの
http://www.arduino.org/

困ったことに、それぞれで配布してる Arduino IDE のバージョンが異なります。
LLC : 1.6.5
SRL : 1.7.6

Musto 氏によれば、ある日突然、arduino.cc のアカウントが取り消されたので、やむを得ず arduino.org を立ち上げたとのこと。
また、LLC の配布する IDE には、そのボードは正規品ではないというような表示が出るため、ユーザの利便性を考えて、その表示を出ないようにしたとのこと。
現時点では、大きな違いはないようですが、今後は違いは大きくなる事が予想されます。

ボードに関しては。
Arduino SRL が、Arduino UNO などを製造販売しています。
Made in Italy と表示されているおなじみのもの。
Arduino LLC は、SparkFun の Arduino Pro Mini などで商標権をライセンスしていますが、直接の製造販売はしていない様子です。

国内のボード販売に関しては。
Arduino SRL が Arduino という国内商標を保有していため、Arduino SRL のものが正規品という扱いになると思われます。

Arduino の今後
和解の道はあるのか。
Musto 氏は、我々は和解の用意があるが、相手が拒否していると、発言していました。
現時点では、感情的や金銭的なこじれもあり、LLC と SRL が相互に訴訟するという自体になっており、和解は難しいという印象を持ちました。

Arduino Fundation
Musto 氏から、LLC と SRL 以外に、企業や個人の開発者やユーザを含めたコミュニティーのために、非営利の団体を立ちあげたいという意向が表明されました。

Arduino SRL のプラン
Musto 氏から、事態はどうあれ、我々は前に進むとして、いくつか計画が紹介されました。

社員全員が共同創業者
オフィスは、イタリアの他の、米国、台湾、中国にあるそうです。
社員は約60名で、全員の肩書きが共同創業者だそうです。
これは、掃除のおばさんでも、一緒に会社を運営しているという気持ちからだそうです。
内訳は、生産関係が20名ほど、ハード開発が数名で、デザイナーが数名で、事務職が数名で、残りはソフト開発。

数日前に、about-us のページに顔写真が掲載されているのを見つけましたが、全員が co-fouder (共同創業者) になっていたので、これは何のリストかと面食らいました。

新らしいボード YUN と TIAN
Musto 氏から、私は Linux 育ちなので、従来型の Arduino だけではなく、Linux の技術を使ってネットワークに簡単に接続できるボードも作るという話がありました。

Arduino YUN
すでに、Arduino に Wifi を付加した YUN が発売されています。
メイン CPU は Arduino UNO と同様に AVR 8ビットです。
MIPS CPU 配下で Wifi を制御するサブボードが搭載されています。
知らなかったが、Llinux で動作しているようです。

Arduino TIAN
さらに、 BLE ( Blutooth Low Energy) を付加した TIAN を計画中です。
メイン CPU には、ARM Cotex M0 コアが採用されました。
MIPS CPU 配下で 2.4GHz / 5GHz Wifi と BLE を制御するサブボードが搭載されています。
技術基準適合証明 についても、取得する方向とのこと。

なお、YUN と TIAN は中国語で雲と空の意味とのこと。
台湾に開発チームがいるそうです。

20150801_arduino_tian_block

新しい開発環境 Arduino Studio と my.arduino.org
Arduino Studio
scratch のようなビジュアルな開発環境を開発中です。
すでに、アルファ版 が公開されています。

my.arduino.org
ブラウザだけで動作するWEBアプリ型の開発環境を準備中です。
こちらは mbed を意識したのかな。

Arduino Starter Kit の日本版
Arduino Starter Kit には、170ページの書籍が付いています。
これをスイッチサイエンスさんが翻訳しました。
間もなく発売とのこと。

Federico Musto 氏の印象
記者会見のあと、少し話をしてファブラボ関内のステッカーを渡したら、すぐにパソコンに貼ってくれたので、嬉しかった。
Maker Faire Tokyo の会場内で、ブースを回っている姿を見かけました。
Arduino を使った作品を見ると、声をかけていました。
根っから Maker が好きなんだなという印象を持ちました。

参考
「Arduino分裂」渦中の1人が胸中を語る
Arduino shrinks Linux-ready Yún to “Mini” size


LED 3×3 の電子基板を作る


概要
Eagle と Sevenmini を使って、LED 3×3 の Arduino シールドの基板を作ります。
過去に作った下記のものと、ほぼ同じですが、今回は配線が全て裏面になるように工夫しました。
Eagle と Modela を使って電子基板を作る その2
Eagle と Sevenmini を使って電子基板を作る その1

データは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成します。
20150708_led_sch20150708_led_brd

(2) Mirror にしてガーバーデータを出力します。
20150708_led_gerber

FLASH 側の作業
(1) ガーバーデータを読み込みます。
ハンダ面データ (sol) を「フォト表」に、
ドリルデータ (drd) を「穴」に、
外形データ (out) を「外形表」にします。
(2) 輪郭線抽出を行います。

Sevenmini 側の作業
(1) 配線の加工
基板を両面テープで固定します。
ミリング用のエンドミルを取り付けます。
CAM-Circuit2 アプリから加工を指示します。
(2) 穴の加工
ドリル用のエンドミル 0.6mm に交換します。
CAM-Circuit2 アプリから加工を指示します。
(3) 外形の加工
フォーミングのエンドミルに交換します。
CAM-Circuit2 アプリから加工を指示します。
20150708_led_milling_120150708_led_milling_2

後加工
(1) 怪我をしないように、切断した縁をヤスリで削ります。
(2) 部品の足の太さに合わせて、ハンドドリルで穴を大きくします。
(3) ハンダが乗りやすいように、表面を研磨します。
20150708_led_polish

ハンダ付け
部品をつけて、裏面をハンダ付けします。
20150708_led_pcb_rear 20150708_led_pcb_front

動作確認
完成したLEDシールドを、Arduino に載せて、LEDを1つづつ点灯するスケッチを実行します。
20150708_led_test

備考
今回は、基板加工機の講習を兼ねています。
私の方で、ガーバーデータの作成まで行いました。
FLASH側の作業以降は、別の方にやって頂きました。


Bluetooth シールドを Android から制御する


20150408_bt_system

前回作成した Bluetooth シールド を Android から制御します。

機能
(1) デジタル出力
Android のボタンを押すと、Arduino の LED が点灯します。
(2) PWM出力
Android のスライドバーを移動すると、Arduino の LED の明るさが変わります。
(3) デジタル入力
Arduino のボタンを押すと、Android で状態を表示します。
(4) アナログ入力
Arduino の可変抵抗を回すと、Android で可変抵抗の値をグラフに表示します。

ソースコード
Arduino 側
Android から Arduino を制御する で作成したスケッチを使用します。

Android 側
Android から Arduino を制御する で作成したアプリをベースにします。
通信部分を USBシリアルから Bluetooth シリアルに変更します。
UI は以前のものを流用します。
20150408_bt_android

github で公開しています。
Arduino_SerialControl
Android_Bluetooth