なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Blynkを使ってスマートフォンからAdafruit Feather M0 Bluefruit LEを制御する方法

Posted by arms22 on 2016年12月21日 0  0

Blynkとは?


Blynk_Architecture
Blynkプラットフォームのアーキテクチャ

インターネットを介してArduinoやRaspberry等を遠隔制御するアプリを構築するためのiOS/Android向けのプラットフォームです。ウィジェットと呼ばれる部品をドラッグ&ドロップで画面に配置することで、デバイスを制御するためのリッチなUIを簡単につくることができます。またデバイス側のコードを記述することなく直接ハードウェア(デジタルピンまたはアナログピン)を制御することができます。

基本的にデバイスとスマートフォンはBlynk Cloudを介して通信するのですが、最新のバージョンではBLE(Bluetooth Low Energy)を使ってデバイスと直接通信することができるようになりました。今回はこの機能をつかってFeather M0を制御してみたいと思います。


Blynkアプリのインストールとアカウントの作成

まずはBlynkアプリをインストールします。インストールが終わったらBlynkアプリを起動し、新しいアカウントを作成してください。Blynkアプリで作成したプロジェクトデータはクラウド上で管理されるので、スマートフォンが変わってもプロジェクトを作り直す必要はありません。

For iOS
https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt=8

For Android
https://play.google.com/store/apps/details?id=cc.blynk


Blynkプロジェクトの作成

Blynkテストプロジェクト
ロボットコントローラー風のUI

Blynkアプリを起動して”Create New Project”をタップし新しいプロジェクトを作成します。HARDWARE MODELはArduino Zeroを選択します。AUTH TOKENはArduinoのスケッチに埋め込むのでE-Mailで自分宛てに送信しておきましょう。空っぽのプロジェクト画面が開いたら画面をタップして、上の画像のようにBLEウィジェット、ジョイスティック、ラベル、LED 2個を配置します。

Blynkテストプロジェクト_ウィジェット設定
ウィジェットの設定

ウィジェットにピン、ラベル、値の範囲等設定します。ウィジェットには仮想ピン(V1〜V255)を割り当てます。BlynkアプリとFeather M0は仮想ピンを通してデータのやり取りを行います。実際のハードウェアの制御はBlynkアプリから送られたきたデータをもとにFeather M0で行います。


ハードウェア

Blynkテスト_ブレッドボード
実態配線図

Blynkテスト_回路図
回路図

DCモータを動かしてみたかったのですが、回路がやや複雑になるのでとりあえずLEDをモータに見立てて制御してみます。ピン12とピン11にLEDを接続します。A0に接続している半固定抵抗は使用していないので省略してOKです。


BLEライブラリとBlynkライブラリのインストール

Arduino IDEにFeather M0 Bluefruit LE用のBLEライブラリとBlynkライブラリをインストールします。Arduino IDEを起動してライブラリマネージャを開き(スケッチ > ライブラリをインクルード > ライブラリを管理)、Adafruit BluefruitLE nRF51Blynkをインストールします。


サンプルスケッチ

Blynkライブラリのサンプルスケッチをベースにジョイスティックデータの取得とLEDの制御、Blynkアプリ側のラベルとLEDの制御を追加しています。auth[]の中身をAUTH TOKENに書き換えてFeather M0に書き込んでください。


BlynkアプリからFeather M0にデータを送る
次のように仮想ピンに対応するBLYNK_WRITE関数を実装し、param.asInt()で値を取得します。
// 仮想ピンV1の書き込み
BLYNK_WRITE(V1)
{
 // 仮想ピンV1を通してジョイスティックの値を読み取る
 int x = param[0].asInt();
 int y = param[1].asInt();
 (省略)
}

Feather M0からBlynkアプリにデータを送る
次のように仮想ピンに対応するBLYNK_READ関数を実装し、Blynk.virtualWrite()で値を書き込みます。
// 仮想ピンV2の読み込み
BLYNK_READ(V2)  // ウィジェットの読み込み周期で呼び出される(1秒〜)
{
 // 仮想ピンV2にスピードを書き込む
 Blynk.virtualWrite(2, speed);
}

ウィジェットをPUSHモードに設定すると、任意のタイミングで値を書き込めます。


動かし方

IMGP1314

Feather M0を通電した状態でBLEウィジェットの設定画面を開き、”Connect BLE Device”から”Adafruit Bluefruit LE”を選びます。プロジェクト画面に戻って画面右上の三角をタップするとウィジェットが動き出します。ジョイスティックをぐりぐりするとFeather M0につながったLEDが点灯し、ジョイスティックを倒し込んだ量に応じた値=Speedがラベルに表示されます。ジョイスティックを前に倒すとFWD-LEDが、後ろに倒すとBCK-LEDが点灯します。


参考記事

Blynk - Getting Started
http://docs.blynk.cc/#getting-started


Adafruit Feather M0 Bluefruit LE
スイッチサイエンス
売り上げランキング: 172,942

Arduino Zero/M0 互換ボード「Adafruit Feather M0 Bluefruit LE」の開発環境を準備する。

Posted by arms22 on 2016年12月03日 3  0

Adafruit Feather M0 Bluefruit LE

Arduino UNOよりちょっとだけ速くてBLEが使えるボードが欲しくなったので、Arduino Zero/M0 互換のAdafruit Feather M0 Bluefruit LE を買いました。このボードの紹介と開発環境の構築手順についてまとめておきます。


Adafruit Feather M0 Bluefruit LEとは?


Adafruit社製のArduino Zero/M0互換ボードです。コアはArduino Zero/M0と同様、Atmel社のARM Cortex M0プロセッサ「ATSAMD21G18」を搭載していて、クロックは48MHz、3.3Vで動作します。またNordic Semiconductor社のnRF51822チップを採用したBLEモジュール「MDBT40」を搭載しています。

主な仕様:
  • ATSAMD21G18搭載
  • 動作クロック:48MHz
  • 動作電圧:3.3 V
  • FLASH:256 KB
  • RAM:32 KB
  • EEPROM:なし
  • GPIO:20 ピン
  • PWM:8 ピン
  • アナログ入力:10 ピン
  • DAC出力:1ピン
  • インターフェース:シリアル、I2C、SPI
  • リチウムポリマー充電回路搭載


Arduino IDEのインストール

続いて開発環境の構築手順について解説します。まずはArduinoのウェブサイトでArduinoソフトウェア(以下、Arduino IDE)の最新バージョンをダウンロードします。(記事執筆時点で1.6.13が最新)

Arduino - Software
https://www.arduino.cc/en/Main/Software


SAMDコアインストール

次にSAMDボード向けのコンパイル環境をインストールします。
  1. ボードマネージャを開く(ツール > ボード > ボードマネージャ)
  2. Arduino SAMD Boards (32-bits ARM Cortex-M0+)」をインストール



Adafruit SAMDボード情報追加

AdafruitのSAMDボード情報(Adafruit Feather M0)を追加します。

  1. 環境設定を開く(Arduino > Preferences…)
  2. 「追加のボードマネージャのURL」に次のURLを入力
    https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
    ※他のURLがすでに入力されている場合、それぞれのURLをカンマ”,”で区切って入力してください。
  3. ボードマネージャを開く(ツール > ボード > ボードマネージャ)
  4. Adafruit SAMD Boards をインストール


Arduino/Adafruit SAMDボード
ここで一旦、Arduino IDEを再起動。


サンプルスケッチ

環境が整ったのでテストとして次のスケッチを書き込み、LEDの点滅動作を確認します。


次のようにボードを設定し、書き込みボタンを押します。しばらくしてLEDが1秒周期で点滅はじめたら書き込み成功です。

  • ツール→ボード→Adafruit Feather M0 (USB Native Port)
  • ツール→シリアリポート→Adafruit Feather M0が繋がっているポートを指定してください

AdafruitのWebサイトではBLEモジュールを使ったアプリケーションの例が多数紹介されています(参考URLを参照)。次回はBLEモジュールを使ったスケッチの書き方について紹介したいと思います。


参考URL

Adafruit Feather M0 Bluefruit LE - スイッチサイエンス
https://www.switch-science.com/catalog/2752/

Adafruit Feather M0 Bluefruit LE : Adafruit Industries, Unique & fun DIY electronics and kits
https://www.adafruit.com/product/2995

Overview | Adafruit Feather M0 Bluefruit LE | Adafruit Learning System
https://learn.adafruit.com/adafruit-feather-m0-bluefruit-le/overview


Adafruit Feather M0 Bluefruit LE
スイッチサイエンス
売り上げランキング: 172,942


Adafruit Feather M0 Basic Proto
スイッチサイエンス
売り上げランキング: 260,974


Arduinoで赤外線アレイセンサ「Grid-EYE」から2次元の温度データを取得する

Posted by arms22 on 2016年01月03日 21  0

IMGP1082

Grid-EYEはPanasonicが開発した赤外線センサで8x8(64画素)の2次元の温度データを出力します(上写真、四角い窓の缶パッケージ)。視野角60度で広範囲の温度が計測できます。電子レンジやエアコン、また静止した人体の検出も可能なのでデジタルサイネージなどにも使われています。



とある伝でこのICのサンプルを頂いたのでサーモグラフィーを作ってみました。Grid-EYEで取得した2次元の温度データをProcessingを使って表示しています(詳細はサンプルコード2)。


回路


GridEyeサンプル回路
industrial.panasonic.com/cdbs/www-data/pdf/ADI8000/ADI8000CJ1.pdfより引用

Arduinoとの接続
2)SDA -- A4 または SDA
3)SCL -- A5 または SCL
4)INT -- 2番 または 3番
9)VDD -- 3.3V
6)GND -- GND

SDA/SCL/INT端子は10kΩの抵抗でプルアップします。その他のコンデンサ・抵抗は推奨回路どおり接続します。INTピンは割り込み信号を出力する端子です。設定した閾値を超えた時、または下回った時にLOWレベルを出力します。今回は使用しないので未配線でもOKです。電源はAMG883xなら3.3V、AMG885xなら5.0Vを接続します。


ライブラリ

Grid-EYEからピクセル毎の温度を読み込むためのライブラリを作りました。下記URLからzipファイルをダウンロードしてください。ライブラリをインストールするにはArduinoのメニューからスケッチ > Include Library > Add .ZIP Library...を選択し、先ほどダウンロードしたzipファイルを選びます。

arms22/GridEye
https://github.com/arms22/GridEye/archive/master.zip


サンプル1

Arduinoでピクセル温度データを読み込むサンプルです。サーミスタ温度とピクセル温度データを読み込み、シリアル通信で温度を文字列として送信します。シリアルモニタでサーミスタ温度とピクセル温度データが確認できます。サーミスタ温度を読み出す関数thermistorTemp()の戻り値はint型で1LSB=0.0625度です。ピクセル温度データを読み出す関数pixelOut()の第1引数には温度データを格納するint型配列を渡します。1LSB=0.25度です。



サンプル2

Processingを使ってサーモグラフを表示するサンプルです。Arduinoでピクセル温度データを読み込み、シリアル通信で1ピクセルを2バイトのshort型で下位バイト・上位バイトの順で送信します。温度データの送信前に2バイトのヘッダ(0x55、0xaa)をデータの区切りとして送信します。Processing側では130バイトのデータ(ヘッダ2バイト+ピクセル温度データ64*2)がバッファに溜まるのを待ちます。130バイト受信したらヘッダを受信したか確認します。ヘッダを受信したらピクセル温度データを変数に格納します。
受信したピクセル温度データはサーモグラフっぽく見せるために色と温度の対応を調整するのが結構大変でした。Processing側のコードはPythonで記述しています。



赤外線アレイセンサ Grid-EYE | 電子デバイス・産業用機器 | Panasonic
http://industrial.panasonic.com/jp/products/sensors/built-in-sensors/grid-eye


↓本格的なモノは結構高いですな。。



グラフィック液晶ディスプレイを割ってしまった。

Posted by arms22 on 2015年09月08日 0  0

割れたモノクログラフィックディスプレイ

バックライトの必要のない反射型ディスプレイにバックライトを半田付けしてしまった。バックライトを取り外そうとディスプレイの端子をニッパでカットしていたら、変な力がディスプレイの端子部分にかかってしまたらしく、パキッと音を立てて割れた。毎度のことだが私は本当に良く部品(工具も)壊す。このモノを壊す癖、なんとか治したい。。

グラフィックディスプレイ交換後

割れてしまったものはしょうがないので、気を取り直してバックライトが必要な透過型ディスプレイにバックライトを取り付けた。薄型で視認性もなかなか良い。Arduino用のライブラリもあるので簡単に使える。

EA DOG series - ELECTRONIC ASSEMBLY
http://www.lcd-module.com/products/dog.html

Application Node - ELECTRONIC ASSEMBLY
http://www.lcd-module.com/support/application-note.html

Arduino IDEでブートローダの書き込みエラー(avrdude: stk500v2_recv_mk2: error in USB receive)

Posted by arms22 on 2015年08月23日 0  0

IMGP0984
ブートローダ書き込み用アダプタとAVRISP-MKIIのクローン(FRISK USBTiny MkII

Arduino IDEバージョン1.6.5(以下、Arduino 1.6.5)を使ってATmega328pにArduinoのブートローダの書き込み(ツール→ブートローダを書き込む)を行うと下記エラーが発生する。

avrdude: stk500v2_recv_mk2: error in USB receive

LUFAベースのAVRISP-MKIIとArduino 1.6.5に内包されているavrdudeバージョン6.0.1の組み合わせでこのエラーが発生する。AVRFREAKSのフォーラムで関連する投稿を見つけた。

LUFA based AVRISP-MKII doesn't work with avrdude 6.0.1
http://www.avrfreaks.net/forum/lufa-based-avrisp-mkii-doesnt-work-avrdude-601

Arduino 1.0.6を使うと正常に書き込むことができる。Arduino 1.0.6に内包されているavrdudeバージョン5.11ではこの問題は発生しないようなので、暫くは1.0.6と1.6.5を使い分ける必要があるようだ。

Arduinoで光学式マウスのCMOSセンサーを乗っ取って移動距離を計測する

Posted by arms22 on 2015年01月07日 6  0

IMGP0612

昨年末の話。勤務先の大掃除の日にいらなくなった光学式マウスを頂戴してきたので、マウスに内蔵されているCMOSセンサーを使って移動距離を計測する実験を行いました。この記事ではArduinoを使ってセンサーから座標を取得し、マウスの移動した距離をシリアルモニタに出力する方法を紹介します。

IMGP0601

写真はマウスを分解したところ(マウスの型番はFMU−HOP1-PW)。真ん中の8本足のICが今回の主役CMOSマウスセンサー「PAN3101」。PAN3101はDSPを内蔵したローコストの光学式マウスセンサーの1つで、ICに内蔵されたCMOSカメラで机やマウスパッドの表面を連続して撮影し、その映像から移動方向や距離を測定します。シリアルインターフェースを通してレジスタの値を読むことで現在のX/Y座標を知ることができます。PAN3101の横の細長いICはUSBインターフェースだと思います。

PAN3101の仕様

  • 電源:4.75V〜5.5V
  • システムクロック:18.432MHz
  • 速度:21インチ/秒
  • 解像度:400 or 800カウント/インチ
  • フレームレート:3000fps
  • 動作電流:10mA(移動中)、5mA(停止)、100uA(パワーダウン)
  • インターフェース:2線式シリアル
※CMOSカメラの画素数は不明。
※このICはカメラ映像を抜き出すことはできない様子。

IMGP0598

IMGP0597

ICの裏側にピンホールが開いていてプラスチック製のレンズが取り付けられている。


ハードウェア


IMGP0617

USB ICとマウスセンサの間のSCLK/SDIOのパターンをカットしSCLK/SDIOにワイヤに接続します。USBケーブルが接続されていたスルーホールをArduinoとの中継ポイントとして利用するためUSB ICに接続されているD+/D-のパターンもカットします。

次のようにArduinoと接続します。PAN3101のピン割り当てはデータシートを参照してください。
マウス to Arduino
VDD(7) 5V
SCLK(4) 2番
SDIO(3) 3番
GND(6) GND

ライブラリ


幸いにもArduino用のライブラリを見つけることができました。OptiMouseはPAN3101以外にAgilentのADNS-2051・ADNS-2083・ADNS-2610に対応しています。

OptiMouse
https://github.com/zapmaker/OptiMouse


スケッチ


//使用するデバイスに合わせてインクルードするヘッダファイルを選択すること
#include "PAN3101.h"
// #include "ADNS2051.h"
// #include "ADNS2610.h"
// #include "ADNS2620.h"
// #include "ADNS2083.h"

//ピン割り当て
#define SCLK 2
#define SDIO 3

//PAN3101デバイス作成
PAN3101 Optical1 = PAN3101(SCLK, SDIO);
// ADNS2051 Optical1 = ADNS2051(SCLK, SDIO);
// ADNS2610 Optical1 = ADNS2610(SCLK, SDIO);
// ADNS2620 Optical1 = ADNS2620(SCLK, SDIO);
// ADNS2083 Optical1 = ADNS2083(SCLK, SDIO);

//マウスの現在値
signed long x = 0;
signed long y = 0;

void setup()
{
  //シリアルポートを初期化
  Serial.begin(38400);
  //マウスセンサ初期化
  Optical1.begin();
}

void loop()
{
  signed char tx, ty;

  //最後のモーションステータスを取得(PAN3101とADNS2051のみ対応)
  //Optical1.updateStatus();

  //注意事項
  //updateStatusコマンドを使う場合、
  //PAN3101.hのDelta_Yを0x18に、Delta_Xを0x17に変更すること。

  //モーションステータスビットがセットされていれば
  //if (Optical1.motion())
  {
    //dX/dYレジスタを読み出して現在値に加算する
    //dX/dYレジスタには前回読み出してからの相対値が格納されている
    //dX/dYレジスタは8bit(-127〜128)なのでオーバーフローする前に読み出すこと
    tx = Optical1.dx();
    x += tx;
    ty = Optical1.dy();
    y += ty;

    //dX/dYレジスタに値がセットされていれば
    if (tx || ty)
    {
      //現在値をmmに変換してシリアルポートに出力する
      Serial.print("x=");
      Serial.print((25.4 * (float)x) / 800.0);
      Serial.print("mm y=");
      Serial.print((25.4 * (float)y) / 800.0);
      Serial.println("mm");
    }
  }
}
スケッチをアップロードしシリアルモニタを開くとマウスの移動した距離が次のように出力されます。
x=46.99mm y=5.11mm
x=47.05mm y=5.02mm
x=47.05mm y=4.95mm
x=47.09mm y=4.86mm
x=47.12mm y=4.79mm
x=47.15mm y=4.70mm
x=47.15mm y=4.64mm
x=47.18mm y=4.57mm
x=47.18mm y=4.54mm
x=47.21mm y=4.51mm
今回使用したマウスは2007年頃の製品で同じICを使ったマウスを手に入れるのは難しいと思います。けれども安いマウスはどれも同じようなセンサーを使っていると思うので取りあえず光学式マウスを見つけたらバラしてICの型番を確認してみてください。そしてGoogleで検索すればきっと対応するライブラリが見つかると思います。

参考リンク


PAN3101
http://www.pixart.com.tw/upload/PAN3101_V10_20051121170653.pdf

Interfacing an optical mouse sensor to your Arduino
http://www.martijnthe.nl/2009/07/interfacing-an-optical-mouse-sensor-to-your-arduino/


↓最近は青色LEDを採用した光学式マウスが主流になってきているみたいですね。

iBUFFALO 有線BlueLEDマウス Mサイズ レッド BSMBU16MRD
バッファロー (2013-06-28)
売り上げランキング: 745


↓いわゆるPCゲーマー向けのマウスは高速・高解像度のセンサを搭載したモデルが多いようです。こいつも1度バラしてみたい。

LOGICOOL ゲーミングマウス G300r
ロジクール (2013-04-19)
売り上げランキング: 83

Arduinoと音声合成ICでしゃべる温度湿度計

Posted by arms22 on 2014年11月27日 0  0

久しぶりのArduinoネタです。Arduinoと音声合成IC「AquesTalk pico」を使ってしゃべる温度湿度計を製作しました。

IMGP0189

LCDは使わずボタンを押すと音声で温度と湿度を通知するという仕組みにしてみました。取りあえず動作確認用にブレッドボードに組んで余っていたMDF板に固定。



動いている様子。若干語尾が聞き取り辛いですが「22.0度、70%なり」と言っています。


ハードウェア・回路図



しゃべる温度湿度計回路図

メイン基板はArduino Duemilanove、音声合成ICにATP3010、温度湿度センサはSHT11、スピーカ駆動に秋月のD級アンプモジュールを使用しています。

ArduinoとATP3010はI2Cで接続します。ATP3010の4番端子を10K抵抗でプルダウンさせることでI2Cで通信ができます。SCL/SDAは10K抵抗でプルアップします。ATP30xxは声種が異なるものがいくつか販売されており、外部クロックが不要なICもあります。その場合16MHzの発振子は接続不要です。

SHT11はI2Cのような通信方式を採用していますが互換性がありません。Arduinoの2番にDATA、3番にCLKを接続します。DATAは10K抵抗でプルアップします。

回路図上ではD級アンプモジュールは省略しています。可変抵抗の出力端子をアンプモジュールのIN+に接続し、IN-はGNDに接続します。


ライブラリ


Arduino用 音声合成LSIライブラリ
http://blog-yama.a-quest.com/?eid=970151

Arduino Playground - Bounce
http://playground.arduino.cc/Code/Bounce

Arduinoで遊ぼう - デジタル温度・湿度センサー「SHT11」
http://arms22.blog91.fc2.com/blog-entry-489.html

Sleepライブラリ - github
https://github.com/arms22/Sleep


スケッチ



#include <AquesTalk.h>
#include <Wire.h>
#include <Sensirion.h>
#include <Bounce2.h>
#include <Sleep.h>

// 端子定義
const uint8_t dataPin = 2;
const uint8_t clockPin = 3;
const uint8_t speakPin = 6;

// 温度・湿度・露点温度格納用変数
float temperature;
float humidity;
float dewpoint;

// SHT1xデバイス
Sensirion tempSensor = Sensirion(dataPin, clockPin);

// 音声合成デバイス
AquesTalk atp;

// 発声ボタン
Bounce spkbtn;

void setup()
{
  // シリアルポート初期化
  Serial.begin(9600);

  // ボタン初期化
  pinMode(speakPin, INPUT);
  spkbtn.attach(speakPin);
  spkbtn.interval(20);
}

void loop()
{
  String str;

  spkbtn.update();

  if(spkbtn.fell())
  {
    // 温度・湿度・露点温度を計測し、変数に格納する
    tempSensor.measure(&temperature, &humidity, &dewpoint);

    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" C, Humidity: ");
    Serial.print(humidity);
    Serial.print(" %, Dewpoint: ");
    Serial.print(dewpoint);
    Serial.println(" C");

    str = "<NUMK VAL=" + String(temperature, 1) + " COUNTER=do> ";
    str+= "<NUMK VAL=" + String((int)humidity) + " COUNTER=pa-se'nto>nari";
    Serial.println(str);

    // 発声開始
    atp.Synthe((const char*)&str[0]);

    // 自己発熱で精度が落ちないよう十分な時間を待って次の計測を行うこと(4秒以上)
  }

  sleep(10);
}



PAM8012使用2ワットD級アンプモジュール
http://akizukidenshi.com/catalog/g/gK-08217/

音声合成LSI ATP3011F4-PU(かわいい系の女声)
http://akizukidenshi.com/catalog/g/gI-05665/

音声合成LSI 「AquesTalk pico LSI」
http://www.a-quest.com/products/aquestalkpicolsi.html

Dotsduino(ドッツデュイーノ)ケース

Posted by arms22 on 2013年11月09日 0  0

Dotsduinoケース

Maker Faireのレポート記事でも書きましたが、DotsduinoケースのモデルデータをThingiverseにアップしました。以前にDotsduinoのキットを買ったよ〜って方は3Dプリンターで出力してみてください。3Dプリンターを持ってない人は3Dプリンターを持っている友人・知人を探してプリントしてみてください。

このデータはABSでプリントすることを前提に内径を少し大きくしています。PLAでプリントした場合、マトリクスのはめ合いが少し緩いかもしれません。その場合はテープなどをマトリクスの周りに1〜2周貼ってはめ合いを調整してください。

Dotsduino Case by arms22 - Thingiverse
http://www.thingiverse.com/thing:177871

Arduinoで遊ぼう - OAuthを使って安全につぶやくライブラリ「Stewitter」

Posted by arms22 on 2013年07月07日 52  1

2013年7月7日 StewitterライブラリがStewgate Uに対応しました。StewGate SG-1は7月末でサービス終了します。Stewitterライブラリをお使いの方はライブラリを更新し、トークンを新しく取得し直してください。

2012年1月15日 StewitterライブラリがArduino 1.0に対応しました。それに合わせてサンプルスケッチを書きなおしました。

イントロダクション



ArduinoからTwitterにつぶやくライブラリ「Stewitter」を作りました。OAuth認証をArduinoで実装するのは大変なので、OAuth認証を肩代りしてくれるプロキシ「StewGate U」を使ってTwitterへメッセージをポストします。

stewgate-u-log.png

StewGate U: Throw your stuff into the stewittering pot.
http://stewgate-u.appspot.com/

StewGateはアクセンス・テクノロジーのギークが作ってくれたサービスです。

株式会社アクセンス・テクノロジー - StewGate
http://omake.accense.com/wiki/StewGate


トークンを取得する


StewGateを使ってつぶやくときはユーザ名とパスワードの替わりにトークンを使います。トークンは次の手順で取得します。
  1. StewGateのページからTwitterにログインします。
  2. "連携アプリを認証"ボタンを押します。
  3. StewGateのページに戻ったらダッシュボードに移動します。
  4. ダッシュボードに移動するとトークンが表示されます。

トークンをクリックすると簡単な使い方が表示されます。
http://stewgate-u.appspot.com/api/post/

POSTデータ:
_t = 76856766df853e490ee3db911610f10e

msg = "あなたの送信したいメッセージ"
* UTF-8、URLエンコード済みにしてください。
* メッセージに "%(name)s" を含めると、トークンの名前に置換されます。


応答:
OK (ポスト成功)
エラーメッセージ (ポスト失敗)
"_t="の後のアルファベットと数字の部分がトークンなのでメモしておきましょう。
76856766df853e490ee3db911610f10e



Stewitterライブラリのインストール


次のURLからStewitterライブラリをダウンロードしてください。Arduino IDEを起動しメニューからスケッチ→ライブラリを使用→Add Library…を選択してください。

arms22/Stewitter
https://github.com/arms22/Stewitter
https://dl.dropboxusercontent.com/u/14188987/arduino/libraries/Stewitter.zip

またArduino 1.0.4以前をお使いの場合はZIPファイルを解凍し、Arduinoのライブラリフォルダ(~/Documents/Arduino/libraries)に直接コピーしてください。ライブラリフォルダがない場合は作成してください。

このライブラリはNeoCatさんのTwitterライブラリをベースに作成しました。

ArduinoからTwitterにPOSTするライブラリ
http://d.hatena.ne.jp/NeoCat/20090505/1241466723


サンプルスケッチ1:メッセージを送信


#include <SPI.h>
#include <Ethernet.h>
#include <Stewitter.h>

// MACアドレス
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// "YourToken"をあなたのトークンで書き換えてください。
Stewitter twitter("YourToken");

// メッセージ(日本語もOK)
char msg[] = "こんにちは世界!私はアルデュイーノ!";

void setup()
{
  delay(1000);

  Ethernet.begin(mac);

  Serial.begin(9600);
  Serial.println("connecting ...");
  
  // twitterに接続して、メッセージを送信
  if (twitter.post(msg)) {
    // 完了を待つ
    int status = twitter.wait();
    // status が 200なら正常に完了
    if (status == 200) {
      // レスポンスを表示
      Serial.println(twitter.response());
    } 
    else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } 
  else {
    Serial.println("connection failed.");
  }
}

void loop()
{
}


サンプルスケッチ2:最後のメンションを取得する


#include <SPI.h>
#include <Ethernet.h>
#include <Stewitter.h>

// MACアドレス
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// "YourToken"をあなたのトークンで書き換えてください。
Stewitter twitter("YourToken");

void setup()
{
  delay(1000);

  Ethernet.begin(mac);

  Serial.begin(9600);
  Serial.println("connecting ...");

  // twitterに接続して、 最後のメンション(@yourname の入ったメッセージ)を取得
  if (twitter.lastMention()) {
    // 完了を待つ
    int status = twitter.wait();
    // status が 200なら正常に完了
    if (status == 200) {
      // 最後のメンションを表示
      // ex) 20100111082341|874453678|whosaysni|@yourname whats up?
      Serial.println(twitter.response());
    } 
    else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } 
  else {
    Serial.println("connection failed.");
  }
}

void loop()
{
}



Arduinoをはじめようキット
スイッチサイエンス
売り上げランキング: 709


Arduino イーサネットシールド
スイッチサイエンス
売り上げランキング: 14,505

Arduino電力計 - 一日の消費電力を表示させる

Posted by arms22 on 2013年06月23日 8  0

目次

  1. Arduino電力計 - プロトタイプ
  2. Arduino電力計 - 回路図とスケッチ
  3. Arduino電力計 - サージ対策
  4. Arduino電力計 - Pachubeにデータをアップロードする
  5. Arduino電力計 - ケースに組み込む
  6. Arduino電力計 - 2系統対応の回路図とスケッチ
  7. Arduino電力計 - 分電盤に接続
  8. Arduino電力計 - 一日の消費電力を表示させる



IMGP8552

Arduino電力計のスケッチを改良して、一日の消費電力を表示できるようにしたよ。表面のスイッチで表示を切り替えれるようにしてある。スイッチは両面テープで固定した。雑ですみません。。

IMGP8553

ついでに過去8日分の消費電力も表示させたよ。これで1週間の消費電力のパターンが分かるはず。できれば時間帯別の消費電力も表示させたいところ。というのも家の電気料金メニューは利用時間帯で電気代が大きく異なるからね。朝10時から17時までの間は電気代が特に高くなるので、この時間はなるべく消費電力を抑えたい。

一日の消費電力の表示に対応したスケッチはこちら。

Download: Watt meter /w Arduino
https://code.google.com/p/arms22/downloads/detail?name=watt_meter-1.1.zip

このカテゴリーに該当する記事はありません。