レビューメディア「ジグソー」

Lチカだけではもったいない.発想力さえあれば,何でも出来る(気がする)!

 Intel Edison Kit for Arduinoのプレミアムレビューになります.

 


 まさか自分に依頼が来るとは思っていませんでした.ド素人のレビューになりますが,こんなことが出来そうだというヒントになればと思います.

 

 そもそもIntel Edisonとは,何か? 何が出来るのか?
 Intel Edison自体は,組み込み用途向けの超小型のコンピューターです.ほぼSDカードサイズしかありません.
 これで何が出来るかと言えば,小型コンピューターですから,使い方次第で何でも出来ると言うことになります.

 

 しかし,普通のPCのように使うことはできません.Intel Edison自体には,組み込み用途のため,表示パネルもなければ,キーボードやマウスをつなげるUSBポートもありません.
 また,Intel Edisonを使うには,”Edisonにこういう動作をしなさい”というプログラム(スケッチという)を書く必要があります.このスケッチ次第で,何でも出来るようになるということです.

 

 それから,ArduinoとRaspberry Piとは,何が違うのか?という疑問があります.
 Arduinoは,プログラミング言語で直接ハードウエアを制御するのに対し,Raspberry PiはOS上のソフトウエアで周辺機器を制御するイメージです.Raspberry Piは,まさにPCの小型版で,性能面を除けば,ほとんど同じことが出来ます.一方,Arduinoは,PCと同じ事をさせる用途より,直接ハードウエアを制御することに向いています.オリジナルロボットを作ったり,各種センサーからの情報を基に決まった動作を定期的にさせる用途を実現させるのに適しています.

 

 Intel Edison自体は,SDカードサイズしかありませんから,実装して使うこと(要するに組み込み)になりますが,汎用的に使うためのブレイクアウトボードが用意されています.その一つにArduino互換の拡張ボードがあります.

 

 本当にSDカードに隠れるくらいの大きさしかありません.


 種類は,Indel Edison単体(Intel Edison Module)以外に,Arduino Uno 3互換のピンデザインの拡張ボード(Intel Edison Board for Arduino)とセットのIntel Edison Kit for Arduino,より小型の拡張ボード(Intel Edison Breakout Board)とセットのIntel Edison Breakout Board Kitの3種類があるようです.

 

 今回,Arduino互換の拡張ボードセットであるIntel Edison Kit for Audirnoのレビューになります.基本的に,Arduinoのスケッチや周辺機器がそのまま使えます.

 

 

 

これが,Intel Edison Board for Arduinoです.

 

【レビューにあたり用意したもの】

・Intel Edison Kit for Arduino : レビュー対象品

・ブレッドボードとジャンパー配線類 : ブレッドボードとLEDや抵抗などがセットになったArduino Uno用やRaspberry Pi用のキットが安くて便利
・各種センサー : 光センサーや温度センサーなど,使用目的に合わせて用意 Arduino用で無くても,使用方法がわかれば汎用品でもOK
・LCD表示器 : 無くても問題ありませんが,使用用途に合わせて用意.あると用途が広がります

・microUSBケーブル : 2本(スマホ用でOK),キットに付属している場合もあります.
・テスター : あると便利.Arduinoには,デバッガがないので,複雑なスケッチには必要です
・ラジオペンチ,9V電池(外部給電用),Addressアダプタなどは,なくても大丈夫です
 事前に準備しなくても,必要に応じて集めればいいと思います.
 本格的な工作を行うのでなければ,ハンダゴテは不要で,ブレッドボードとジャンパー線だけで回路が組めます.

 

 各種センサー,LCD表示器,エンコーダなどは,Grove Indoor Environment Kit for Intel Edisonというキットを用意しました.使用目的は決め手はいませんが,"Intel Edison"で検索したら,これがヒットしたので,何でも出来そうだと思い,入手した感じです.よりシンプルなGrove Starter Kitもあります.センサー内容に合わせて選択すればよいと思います.ただし,このキット内のLCDモニターは,I2C接続なので,Edison Labのスケッチは使えません.

 


 サンプルスケッチの基本動作確認用には,”「Make it with Edison」トライアルキット by Edison Lab”というEdison Labのサンプルスケッチで使われるいるパーツを集めたキットを用意しました.個別にブレッドボード,配線,LED,抵抗などを揃えるのは面倒なので,このトライアルキットは最適です.キット内容も汎用品なため,Edison Labに用の特殊なものはなく,他の用途にも使えます.また,Arduino用の拡張キットもありますが,Uno本体が付属していたり,Groveのキットとダブる内容でしたので,基本動作確認用にはこのキットが最適です.この辺検証部品は,利用目的に合わせて選択してください.2万円くらい出すと,フルセット購入できますが,本格的にやらない限り,すべてを使うことはないと思います.

 

 

「Make it with Edison」トライアルキット by Edison Lab
①普通のブレッドボード 1個
②普通のジャンパワイヤ(オス~オス) 1パック
③固いジャンパワイヤ(ブレッドボード用) 1セット
④タクトスイッチ 1個
⑤トリマポテンショメータ 3個
⑥LED 赤 3mm 6個
⑦抵抗 220Ω 6個
⑧抵抗 10kΩ 2個
⑨フォトレジスタ cdsセル 1個
⑩LCD 16x2モジュール(ピンヘッダ実装済み)1個
⑪説明紙 1枚
⑫Edison Lab紹介カード 1枚

 

ハーフサイズブレッドボード:

 

配線①

 

配線②

 

LCD表示器:

 

LED,抵抗類:

 

 このトライアルキットですが,配線のみあまり耐久性の高いものではありませんので,きちんと使う場合には,大きめのブレッドボードとあわせてしっかりしたものを購入した方が良さそうです.

 

 このトライアルキットで一通りのことは出来るのですが,LCDモニタの配線をすると,バラしたくなくなり,もう一つブレッドボードが必要になりましたので,Arduinoエントリーキットなるものを確保しました.

【Arduinoエントリーキット】
① USBケーブル microBタイプ(約150cm)
② ブレッドボード
③ タクトスイッチ
④ LED 赤色x4、黄色x1、黄緑x1
⑤ 抵抗 10kΩx5、1kΩx5、510Ωx10、330Ωx5
⑥ 可変抵抗 10kΩx1
⑦ ジャンパーワイヤー(14cmx15、18cmx5, 23cmx5)
⑧ 圧電スピーカー(PT08-Z185)
⑨ 光センサー(Cdsセル)
⑩ 温度センサー(LM35DZ)

 

 

 ジャンパー線の余裕も出来ましたし,温度センサーや圧電スピーカーが加わりました.これだけあれば,何とかなりそうです.

 

 もう一つ,シリアルLEDチップという面白いLEDを見つけましたので,Edisonでコントロールしてみたいと思います.RGBフルカラータイプで,10個のLEDがシリアル接続されていますが,個別に発光をコントロールできるというものです.

 

 

 

【レビュー目次】
 1.Intel Edison Kit for Arduinoの構成
 2.セットアップ
 3.サンプルスケッチによる基本動作確認
 4.各種センサーを使ったサンプルスケッチの応用編
 5.オリジナルファンコンの作製

 6.POVの作製
 7.オリジナルLEDイルミネーションの作製
 8.Grove Indoor Environment Kitを使ってみる

 9.アナログ温湿度計を作ってみる?
10.レビューまとめ

 

 こんな感じでレビューを進めていきます.

 初め,レビュー中にスケッチをフルに入れましたが,とても長くなりすぎましたので,最低限に減らしました.でも,例のごとく長いレビューに...

更新: 2015/08/16

1.Intel Edison Kit for Arduinoの構成

 Intel Edison Kit for Arduinoの構成パーツです.

 

①Intel Edisonモジュール 1個
②Arduino 拡張ボード 1枚
③樹脂スペーサー 4本
④ネジ 4本
⑤六角ナット 2個(紛失注意)

 

 Intel Edison(①)が本体で,これだけで動作します.ただし,端子が特殊なため,ブレイクアウトボードとして,Arduino拡張ボード(②)に載せます.Intel Edisonは,本当にSDカード並の大きさしかありません.これだけで,Wi-Fiも搭載し,小型PC並のことが出来てしまうのは不思議な感じがします.

 

 

 まず,本キットを組み立てます.

 ②の拡張ボードに①のEdisonを枠に合わせて載せ,端子を接続させるために(軽く)押し込みます.その後,⑤のナットで軽く締め込みます.小さなスパナが無くても,ラジオペンチで十分です.
 拡張ボードの4隅近くにある穴に,④のネジを差し込み,拡張ボードの裏側から③のスペーサーで固定します(手締めでOK).
 これで,完成です.

 

更新: 2015/08/17

2.Intel Edison Kit for Arduinoのセットアップ

 今回,Windows8.1-PCで,Intel Edison Kit for Arduinoのセットアップを進めた様子を記載します.Windows7-PCでも行いましたが,全く同じです.

 

 参考にするのは,こちらのEdison Lab.”さあ,始めよう!” LED点滅からWi-Fi接続までのガイド!のサイトや,前回のプレミアムレビューです.
http://edison-lab.jp/gettingstarted/edison-arduino/windows/

ただし,Edison Labの手順は最新版に対応しておらず,一部手順が異なる場面がありました.ここでは,最新インストーラ対応版で説明を進めます.


作業手順(”さぁ,始めよう”の手順)
Step 1 – Edisonをつなぐ ←すぐにつながない方が良さそう
Step 2 – Edison Arduino IDEのダウンロード
Step 3 – ドライバーとソフトウェアのインストール (今回は,Step1の中でインストールします)
Step 4 – Blinkサンプルを使ったLED点滅テスト
Step 5 – EdisonをWi-Fiにつなぐ


 開発環境ですが,PCスペックは必要ないので,何でも良さそうです.モバイルPCでも良いのですが,今回は,レビューを書きながらの試作になりますので,自作デスクトップPCを使用しました.机の上にノートPC2台を置くと,Edisonの検証スペースが確保できないのが理由です.CPU:i5-4690K,M/B:Z87 Extreme4という組み合わせです.USBポートもたくさんあるので,大丈夫です.

 結局,もう一台,Windows7ノートPCにもインストールしましたが,手順は同じです.

 

 モバイルPCを利用する場合,懸念材料として,USB端子が少ないことが挙げられます.Intel Edison Kit for Arduinoは,2本のmicroUSBケーブルで接続が必要なため,USBポートが1つしかなかったり,2つあっても,既に使用中の場合には,USB-HUBを介して接続することになります.
 Arduinoの場合,スケッチを書く際は,PCが必要ですが,完成後動作させる場合には,電源さえ供給できればよいので,PCは不要です.なので,モバイル環境で開発しなければならない場合を除き,使用するPCは何でも良いことになります.


Step 1 – Edisonをつなぐ
 Edison Labの手順では,初めにWindows-PCとUSBケーブルを2本とも接続することになっています.しかし,経験上は,先にドライバーをインストールしておいたほうが良さそうなので,接続前に,ドライバーのインストールを行います.
 なので,ここではPCとつなぎません.


【1-1】ドライバーのインストール

①FTDIドライバーをダウンロードして,インストールする
 Intel Edsionと接続する前に,FTDIドライバーをインストールしてください.このドライバーがないとシリアルポートを認識できません.
http://www.ftdichip.com/Drivers/CDM/CDM%20v2.10.00%20WHQL%20Certified.exe
 管理者権限で実行する必要があります.画面の指示通りに進めていけばOKです.

 

 

 FTDI COMドライバーがインストールされました.”完了”で,終了します.

 

②ターミナルエミュレータPuTTY(TeraTerm)をダウンロード
 Edison Labでは,ターミナルエミュレータとして,PuTTYを利用していますが,私の環境では上手く動きませんでしたので,TeraTerrmを使用しました.PuTTYは,インストール不要な実行型ファイルですが,TeraTermは,インストールが必要です.
http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
http://osdn.jp/projects/ttssh2/releases/
 どちらでも構いませんので,最新版をダウンロードしてください.TeraTermの場合には,インストールまでしてください.
 後ほど利用します.

 

 

③PCと接続する
 ここで,EdisonとPCをmicroUSBケーブルで接続します.組み立てておいたArduino拡張ボードのmicroUSB端子に,microUSBケーブルを2本とも接続します.
 この時,拡張ボードのmicroUSB端子と標準USB端子の間にあるマイクロSWを,microUSB端子側(OTG動作:デフォルト位置)に切り換えておきます.

 

 ボード上の中央付近にある緑LEDが点灯すれば,電源が入りました.ドライバーの組み込みに少し時間がかかります.また,すべてのデバイスに対してドライバーがあてられていませんが,大丈夫です(このSSは,Windows7-PCのものです).エクスプローラーなどで,接続されたEdisonが現れれば,無事認識されています(今回は,D:).この時に割り当てられたドライブレターを確認にしておきます.WindowsからはUSBドライブのように見えていて,中身は空だと思います.

 

 

 

④Intel Edison Driverをインストール
 Intelのサイトから,Edisonのドライバー類をダウンロード&インストールします.
 この部分の手順が,Intel Labと大きく異なります.最新版のインストーラーは,すべてが一括で行えるようになっています.
https://communities.intel.com/docs/DOC-23242
 サイト内中央付近の"Windows 64-bit Integrated Installer"をクリックし,ダウンロード&インストールしてください.

 

 

 

 EdisonとPCを接続しないでドライバーのインストールを始めると,途中でEdisonとの接続を促され,接続しないと先に進めなくなります.

 

 途中,いろいろと確認メッセージが表示されますが,基本的に”OK”または”next”で進めて行けば,大丈夫です.

 また,Javaが無かったり,古いバージョンのJavaのままだと最新版をインストールするように促されますので,Javaは最新版にしてください.


 ドライバーのインストールが無事終了すると,"Arduino IDE"もダウンロードされています.ダウンロード先は,デフォルトで"c:Intel/Edison"です.

 

 途中,Intel Phone Flashというプログラムがインストールされ,実行できるようになりますが,分かり難いので,ここでは実行せず,手動でfirmwareの更新を行うことにします(次項).

 

 また,デバイスマネージャーを起動して,”USB Serial Port (COM*)”と”Intel Edison Virtual Com Port (COM*)”に割り当てられたCOMポート番号を憶えておいてください(この場合は,COM3とCOM4).

(注)2台のPCでSSした関係で,comポート番号がそれぞれ異なっています.COMポート番号は,あくまでも割り振られた番号なので,各自の環境に合わせてください.本レビュー中でCOMポート番号がことなる場合がありますが,気にしないでください.

 


 もし,割り当てがされていない場合には,一度microUSBケーブルを抜いて,再度接続してください.この割り当てがされていないと,この先に進めません.

 

【1-2】古いイメージファイルの削除
 基本的に必要ない作業ですが,念のために実行します.
①コマンドプロンプトを起動
②Edisonのドライブレターを入力(”D:”など)
③"dir"と入力し,ファイルの確認(基本的に何も存在していないはず)
④”del *”で,すべてのファイルとフォルダを削除
⑤再度,"dir"と入力し,ファイルが存在しないことを確認
⑥コマンドプロンプトを終了

 

 

【1-3】最新イメージファイルをダウンロード

 このイメージもドライバーと同時にダウンロードされています.もし,ダウンロード(C:Intel/)されていなかったら,下記の手順を進めてください.

 

①Edison公式のソフトウエア・ダウンロードページにアクセスし,”Edison Yocto complete image”をダウンロードします.
https://communities.intel.com/docs/DOC-23242

 


②ダウンロードしたファイルを解凍し,フォルダ内のすべてのファイルをエクスプローラーなどを使って,Edisonドライブ(トップディレクトリ)にコピーします.
③エクスプローラーなどで,Edisonドライブに,すべてのファイルがコピーされたことを確認します.

 

 

【1-4】Edisonの初期化
①デバイスマネージャーを起動
②”ポート(COMとLPT)”下にある”USB Serial Port (COM*)”のCOMポート番号を確認(この場合は,COM3)
③"TeraTerm"を起動("PuTTY"でも可)
④画面下の"シリアル"をチェックし,プルダウンから"USB Serial Port (COM*)"を選択(この場合,COM3)し,”OK"をクリック
⑤”設定”→”シリアルポート”と進み,ボーレートのプルダウンから,"115200"を選択し,"OK"をクリック
⑥"Enter"を押す
⑦"Edison login"表示になる
⑧"root"と入力
⑨"reboot ota"と入力し,初期化する
⑩しばらく(3分くらい)すると,最新イメージに更新され,再起動します
⑪初期化されると,"edison login:"状態になる
⑫"root"と入力し,ログイン
⑬"cat /etc/version"と入力し,バージョン情報を表示し,最新のファームウエアにアップデートされたことを確認する
⑭"exit"でログアウトする
⑮"TeraTerm"を終了する

 

 

Step 2 – Edison Arduino IDEのダウンロード

 先にインストールしたインテルドライバーの中に含まれています.
 デフォルトのインストール先である”C:\Intel/Edison/Arduino"の下にあります.
 デスクトップにショートカットを作成しておくと便利です.
 既にArduino IDEの開発環境を持っている人も,Intelのサイトからダウンロードしたものでないと,Edisonが認識できないようです.


Step 3 – ドライバーとソフトウェアのインストール 
 今回は,Step1でインストール済みなので,省略.


Step 4 – Blinkサンプルを使ったLED点滅テスト
 いわゆる”Lチカ”ですが,拡張ボード上に搭載されているLEDで行います.LEDを用意する必要はありません.


①Step2の"Arduino IDE"を起動します.

 


②"ツール"⇒"マイコンボード"⇒"Intel Edison"を選択
③"ツール"⇒"シリアルポート"⇒"COM*"(Intel Edison Virtual Com Port が接続されたCOMポート番号)を選択
④"ファイル"⇒"スケッチの例"⇒"01.Basics" ⇒"Blink"と選択すると,スケッチが書き込まれた新しいウインドウが開きます.


⑤Arduino IDE画面の左上”→”アイコンをクリックし,"Blink"のスケッチをEdisonにアップロードする
⑥コンパイル後,スケッチが実行される.Arduino拡張ボード中央付近にあるLEDがチカチカ点滅を始めたら,動作OKです

 

 これで,やっと,”Edisonへの道”第一歩を踏み出しました.

 しかし,ここまで辿り着くのに,実は問題が発生しています.理由はわかりませんが,Arduino IDEで,シリアルポートが選択できないという症状です.マイコンボードはきちんと”Edison"が選択できます.デバイスマネージャーからも,Intel Edison Virtual Com Port (COM4)が認識できています.
 でも,なぜか選択できない(シリアルポートが何もない)状態でした.microUSBケーブルの抜き差しや再起動をしましたが,改善しません.
 いろいろ試してみると,Arduino IDEを起動してから,Edisonを接続すると,選択できることがわかりました.一度,Arduino IDEに記憶させると,次回からはデフォルトの設定になっているので,そのまま使えます.

 

 もう一つ,ノートPCでUSB-HUB経由で,接続したところ,Intel Edison Virtual Com Portが認識されません.電源は供給されているのですが,USBドライブとしても認識してくれませんでした.おそらく,ドライバーがあてられていないのだと思います.HUBを介さずに,直接接続すると認識するので,USB-HUB側の問題だと思います.

 

Step 5 – EdisonをWi-Fiにつなぐ
 Intel Edisonは,Wi-Fiを内蔵しているため,別途Wi-Fiモジュールを用意する必要はありません.Edison単体で,Wi-Fiに接続可能です.
 Arduino拡張ボードを使うと,タブレット並の感度はある様で,2FのEdisonで,1Fの2.4GHz帯を受信できています.
 では,そのWi-Fi設定を行います.この手順もEdison Labの設定手順と異なっています(OSバージョンの違い?).
①"TeraTerm"を起動する(”PuTTY"でも良い)
②画面下の"シリアル"をチェックし,プルダウンから"USB Serial Port (COM*)"を選択(この場合,COM3)し,”OK"をクリック
③”設定”→”シリアルポート”と進み,ボーレートのプルダウンから,"115200"を選択し,"OK"をクリック
④"Enter"を押す
⑤"Edison login"表示になる
⑥"root"と入力
⑦"configure_edison –-setup"と入力
⑧現在のパスワードを要求されるので,そのまま"Enter"(パスワード設定済み場合には,そのパスワード)
⑨パスワード設定を要求されるので,8文字以上の英数字を入力
⑨新しいパスワードの再入力を要求されるので,8文字以上の英数字を再入力
⑩Edisonの新しい名前の設定するように要求してくるので,5文字以上の英数字を入力
⑪設定した名前でいいか,再確認されるので,よければ,”Y"
⑫Wi-Fiの設定を行う聞いてくるので,”Y"を入力
⑬現在のWi-Fi環境のスキャンが始まり,接続可能なAPがリスト表示される
⑭リスト上のAPから,接続したい番号(左端)を入力
⑮選択したAPで良いか確認されるので,良ければ”Y"
⑯接続するAPのパスコード(暗号キー)を入力
⑰接続に成功すると,割り当てられたIPアドレスとurlが表示される
⑱接続に失敗した場合には,"configure_edison --wifi"と入力し,やり直す

 

⑲無事接続されたら,Windows-PC上のブラウザから接続してみる.同一ネットワーク内PCのブラウザ上で,IPアドレスかurl名を入力する
⑳Edisonに接続できれば,IPアドレスとurlが表示される

 


これで,基本的なセットアップと動作確認は完了.
後は,何を作るのか,考える・・・
これからが,本当の勝負!

更新: 2015/08/16

3.サンプルスケッチによる基本動作確認

 今回,Intel Edisonのプレミアムレビューのお話しを頂いた際,オリジナル試作機の課題に対し,何も思いつきませんでした.そこで,google先生に”Intel Edison"のことを聞いてみると,先の”Grove Indoor Environment Kit for Intel Edison"なるものを見つけました.

 

 何を作るかわからないけれど,このキットがあれば,何か作れそうだという感触で,受諾.しかし,そんなに簡単ではありませんでした.

 Grove Indoor Environment Kit for Intel Edisonを使う前に,もう少し,予習が必要そうです.

Edison-labにあるサンプルスケッチとトライアルキットを使って,勉強します.
http://edison-lab.jp/examples/

 

 

サンプルスケッチは,全部で37あります.これを全部やっている余裕はありませんので,代表的なものをセレクトします.

 

①基本のLチカ
 まずは,やっぱり,基本のLチカ.
 ただし,一歩進んで,”デジタル-押しボタンでLEDを点滅”を試してみます.
http://edison-lab.jp/examples/digital/debounce/

 

 必要な部品は,LED,タクトスイッチ,抵抗(10kΩ,220Ω)です.
 サンプルの通りに,配線します.電源も拡張ボードから5Vをもらいます.

 

 Arduino IDE上で,"ファイル"⇒"スケッチの例"⇒"02.Digital" ⇒"Debounce"と選択し,アップロード.

 

 

 タクトスイッチを押す毎に,LEDのON/OFFが切り替わります.
 実は,このスケッチ,結構難しいです.タクトスイッチを使うには,工夫が必要なことがわかりました.タクトスイッチを押した時の誤認識(デバウンズ)を防ぐために,Delayを入れる必要があり,しかも,変化したかどうかの判断と,状態の反転をしなければなりません.


②Lチカの応用-1
 Lチカの応用編です.LEDの輝度調整を行います.
http://edison-lab.jp/examples/basic/fade/

 

 必要な部品は,LED,抵抗(220Ω)だけです.
 サンプルの通りに,配線します.拡張ボードの9番ピンで制御します.

 

 Arduino IDE上で,"ファイル"⇒"スケッチの例"⇒"01.Basic" ⇒"Fade"と選択し,アップロード.
 LEDの輝度が変化しているのがわかります.

 


③Lチカの応用-2
 Lチカの応用編です.LEDの点滅速度調整を行います.
http://edison-lab.jp/examples/analog/analog-input/

 

 必要な部品は,LED,抵抗(220Ω),トリマポテンションメータだけです.
 サンプルの通りに,配線します.点滅速度は,トリマポテンションメータで調整します.

 

 

 Arduino IDE上で,"ファイル"⇒"スケッチの例"⇒"03.Analog" ⇒"AnalogInput"と選択し,アップロード.
 トリマポテンションメータをまわすと,点滅輝度が変化します.

 


④Lチカの応用-3
 Lチカの応用編です.6つのLEDを配列変数で制御します.
http://edison-lab.jp/examples/control/arrays/

 

 必要な部品は,LEDと抵抗(220Ω)が各6個です.
 サンプルの通りに,配線します.

 

 Arduino IDE上で,"ファイル"⇒"スケッチの例"⇒"05.Control" ⇒"Array"と選択し,アップロード.

 

 

⑤LチカをWi-Fiで遠隔操作

 LチカのWi-Fi版です.Wi-Fi内の別PCから,LEDのON/OFFを制御します.

http://edison-lab.jp/examples/wifi/simple-web-server/

 

 必要な部品は,LED,抵抗(220Ω)だけです.
 サンプルの通りに,配線します.

 

 

Arduino IDE上で,"ファイル"⇒"スケッチの例"⇒"wifi" ⇒"SimpleWebServerWifi"と選択.
char ssid[] = yourNetwork の部分を,自環境のネットワーク名に書き換える.
char pass[] = secretPasswordの部分を、自環境のパスワードに書き換える.
WiFiServer server(Port#)の番号を8080に書き換える.
アップロードする.

 

 シリアルモニタを開くと,IPアドレスが表示されています.


 同じネットワーク内PCでwebブラウザを開き,シリアルモニタに表示されているhttp://<IPアドレス>:8080/hを入力すると,Edisonに接続できました.

 ここで,"here"に部分をクリックすると,LEDがONしたり,OFFしたりします.その様子が,シリアルモニタに表示されます.

 

 


 基本的な動作確認は出来ました.
 ”定義部分",”setup部分”,”loop部分”に大別され,電源供給し続ける間,"loop()"内の指示を続けるのが基本です.

 

 Arduino言語の日本語リファレンスは,このサイトが簡潔に説明しています.
http://www.musashinodenpa.com/arduino/ref/index.php

 

 スケッチ内容を読むと何となくわかりますが,自分で書くとなるとやっぱり厳しい感じです.特に,Wi-Fi設定は,大変です.
 ただ,やりたいことがはっきりすれば,それなりに出来そうな雰囲気は掴めました.

更新: 2015/08/17

4.各種センサーを使ったサンプルスケッチの応用編

 キットの中に光センサーや温度センサーもありますので,応用編としてこれらも使ってみたいと思います.また,LCDも入っていますので,表示にもチャレンジします.

 

【光センサーでLEDの光量調整】

 CdSという光センサーを使って,LEDの輝度を変更してみます.
 CdSという光センサーは,一種の抵抗で,明るくなると抵抗値が減少し,暗くなると抵抗値が上昇します.

 

 初めに動作確認します.簡単に,CdS光センサーとLEDを直列に接続してみます.13pin-CdS-抵抗(220Ω)-LED-GNDと,すべて直列に接続します.
 この場合,明るくなるとLED輝度も明るくなることになります.暗くなると点灯する動作とは反対ですが,モニター画面のエコモードと同じです.

 

// CdSとLEDの組み合わせ(1)
void setup()
{
pinMode(13, OUTPUT); //13番ピンを出力として使う
}

void loop()
{
digitalWrite(13, HIGH); //13番ピンの出力をHIGH = 5Vにする
delay(1000); //1000ミリ秒 = 1秒待つ
digitalWrite(13, LOW); //13番ピンの出力をLOW = 0Vにする
delay(1000); //1000ミリ秒 = 1秒待つ
}


 きちんと思い通りの動作をしています.


 では,暗くなったらLEDが点灯する本来の動作をさせてみます.
 先程の接続では,すべて直列接続しましたが,CdSセンサーとLEDを並列接続することで実現できます.13pin-抵抗(220Ω)-CdS//LED-GNDとなります.
 こうすると,暗いときには,CdSセンサーの抵抗値が高いため,電流はLEDへ流れます.逆に明るくなると,CdSセンサーの抵抗値が低くなるため,電流はLEDへ流れなくなります.

 

 スケッチは,先程同じです.

 

 

 同じスケッチですが,反対の動作をしていることがわかります.

 この回路では,Arduinoからは単に5V電源をもらっているだけなので,実はArduinoの代わりに電池をつなげても点灯動作をします.

 

 


 やっぱり,Arduinoらしいことをしてみたいです.
 CdSセンサーの値を読み込んで見たいと思います.
 5V-抵抗(10kΩ)-A0ピン//CdS-GNDと接続します.CdSセンサーの電圧変化が読み取れることになります.

// CdSとLEDの組み合わせ(2)

int CDS_val=0;
void setup()
{
Serial.begin(9600); //モニター出力のおまじない
}
void loop()
{
CDS_val=analogRead(0); //A0ピンからデータを読み込む
Serial.println(CDS_val); //入力された値をモニターに出力
delay(100);
}

シリアルモニターを起動すると,CdSセンサーからの入力値が変動(0~1023)していることがわかります.


 このCdSセンサーからの入力値を使って,LEDの輝度を変化させてみます.
 先程のCdSセンサー入力回路に,LEDの出力回路を追加します.3ピン-抵抗(220Ω)-LED-GNDと直列に接続.

// CdSとLEDの組み合わせ(3)
int CDS_val=0;
void setup()
{
Serial.begin(9600); //モニター出力のおまじない
}
void loop()
{
CDS_val=analogRead(0); //A0ピンからデータを読み込む
Serial.println(CDS_val/4); //入力された値をモニターに出力
analogWrite(3,CDS_val/4); //入力された値÷4の値を3ピンにアナログ出力
delay(100);
}

 

 


 ここのでの注意点は.CdSセンサーからのアナログ入力は0~1023までの値に対し,アナログ出力は0~255までなので,入力値を4で割っています.

 


【圧電スピーカーでメロディー】

 ここまでくると,LEDを光らせるだけでは面白くありませんので,音も鳴らしてみたいと思います.
 音を出すには,電子ブザーか圧電スピーカーを使いますが,今回は,圧電スピーカー(PT08-Z185)を使います.電子ブザーは.電源を入れるだけで音が出ますが,圧電スピーカーは,数kHzの信号を入力する必要があります.
 周波数を与えるといわれると,一見難しそうですが,Arduinoにはtone関数が用意されています. Tone関数は,指定した周波数の矩形波(50%デューティ)を生成することが出来ます.

 

 では,早速,確認してみます.
 PT08-Z185のプラス側を12ピン,マイナス側をGNDに接続します.

 

 

// tone関数でスピーカーを鳴らす
#define D_time 200 //音を出している時間(msec)
#define SPEAKER 12 //スピーカーの出力ピン番号

void setup()
{
}

void loop()
{
tone(SPEAKER,262,D_time) ; // ド
delay(D_time) ;
tone(SPEAKER,294,D_time) ; // レ
delay(D_time) ;
tone(SPEAKER,330,D_time) ; // ミ
delay(D_time) ;
tone(SPEAKER,349,D_time) ; // ファ
delay(D_time) ;
tone(SPEAKER,392,D_time) ; // ソ
delay(D_time) ;
tone(SPEAKER,440,D_time) ; // ラ
delay(D_time) ;
tone(SPEAKER,494,D_time) ; // シ
delay(D_time) ;
tone(SPEAKER,523,D_time) ; // ド
delay(D_time) ;
}

 

 

 電子音階が出ました.
 このtone関数ですが,同時に生成できるのは1音のみなため,和音が出せません.
 しかし,簡単な音楽は演奏できます.音符の長さは,適当です.


// tone関数で演奏(1)
#define D_time1 400 //4分音符(msec)
#define D_time2 800 //2分音符(msec)
#define D_time3 1600 //全音符(msec)
#define D_time4 10 //区切り(msec)
#define SPEAKER 12 //スピーカーの出力ピン番号

void setup()
{
}

void loop()
{
tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time2) ; // ミ
delay(D_time4) ;

tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time2) ; // ミ
delay(D_time4) ;

tone(SPEAKER,392,D_time1) ; // ソ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,294,D_time2) ; // レ
delay(D_time4) ;

tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time2) ; // ミ
delay(D_time4) ;

tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time2) ; // ミ
delay(D_time4) ;

tone(SPEAKER,392,D_time1) ; // ソ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,262,D_time1) ; // ド
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,294,D_time2) ; // レ
delay(D_time4) ;

tone(SPEAKER,392,D_time1) ; // ソ
delay(D_time4) ;
tone(SPEAKER,392,D_time1) ; // ソ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,392,D_time1) ; // ソ
delay(D_time4) ;
tone(SPEAKER,440,D_time1) ; // ラ
delay(D_time4) ;
tone(SPEAKER,440,D_time1) ; // ラ
delay(D_time4) ;
tone(SPEAKER,392,D_time2) ; // ソ
delay(D_time4) ;

tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,330,D_time1) ; // ミ
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,294,D_time1) ; // レ
delay(D_time4) ;
tone(SPEAKER,262,D_time3) ; // ド
delay(1000) ;
}

 

 

 綺麗に演奏できました.今回は,スケッチの中に譜面を入れましたが,タクトスイッチを鍵盤の数だけ用意すれば,簡易的な電子楽器ができあがります.

 

 こんな曲にもチャレンジ.

 

 

 楽譜が難しい(楽譜が読めないだけ?)ので正確には再現できていませんが,曲の雰囲気は伝わると思います.

 

 

【光と音の合体版】

 ここまで,光センサーの入力値でLED輝度を変化させることと,圧電スピーカーから音を出すことを行いました.
 次は,この2つを合体させてみます.回路図は,そのまま使います.

 

//光と音の共演
int CDS_val = 0; //CdSセンサー入力値の変数
int LED_val = 0; //LED出力値の変数
#define D_time 200 //音を出している時間(msec)
#define SPEAKER 12 //スピーカーの出力ピン番号
#define LED_pin 3 //LEDピン番号

void setup()
{
Serial.begin(9600); //モニター出力するための設定
}

void loop()
{
CDS_val=analogRead(0); //A0ピンからCdSデータを受け取る
LED_val = CDS_val/4; //LED出力用の値を変数に格納
Serial.println(LED_val); //シリアルモニターに出力

//明るさを消灯+4段階に設定する
//明るさに合わせて音を出す

if(LED_val < 50)
{ //50以下は消灯
analogWrite(LED_pin,0); //出力は0
}

else if(LED_val < 100)
{ //50〜100の時
analogWrite(LED_pin,100); //LED出力は100
tone(SPEAKER,262,D_time) ; // ド
delay(D_time) ;
tone(SPEAKER,294,D_time) ; // レ
delay(D_time) ;
tone(SPEAKER,330,D_time) ; // ミ
delay(D_time) ;
}

else if(LED_val < 150)
{ //100〜150の時
analogWrite(LED_pin,150); //LED出力は150
tone(SPEAKER,330,D_time) ; // ミ
delay(D_time) ;
tone(SPEAKER,349,D_time) ; // ファ
delay(D_time) ;
tone(SPEAKER,392,D_time) ; // ソ
delay(D_time) ;
}

else if(LED_val < 200)
{ //150〜200の時
analogWrite(LED_pin,200); //出力は200
tone(SPEAKER,392,D_time) ; // ソ
delay(D_time) ;
tone(SPEAKER,440,D_time) ; // ラ
delay(D_time) ;
tone(SPEAKER,494,D_time) ; // シ
delay(D_time) ;
}

else
{ //200以上の時は最大出力
analogWrite(LED_pin,255); //出力は255
tone(SPEAKER,494,D_time) ; // シ
delay(D_time) ;
tone(SPEAKER,523,D_time) ; // ド
delay(D_time) ;
tone(SPEAKER,523,D_time) ; // ド
delay(D_time) ;
}
delay(1000);
}

 

 光センサーからの入力値(明るさ)で,LEDの輝度が変わり,それに合わせて音程が変わります.上で利用した譜面を貼り付けると,明るさによって,メロディーを変えることが出来ます.

 

 

 

【温度センサーに変えてみる】

 今回,入力にあたるセンサーは,光(明るさ)センサーにしましたが,温度センサーでも同じことが出来ます.
 温度によって,LED表示を変えてみたいと思います.また,30℃以上で,警告音を鳴らしたと思います.
 A0に温度センサー()の出力をつなぎます.電源は,5Vです.LEDは,緑,黄,赤の3色をそれぞれ3,4,5ピンに抵抗(220Ω)を介して接続します.
 また,温度は分解能が必要ですので,ADCの分解能を12bitにしてみます.一般的なArduinoは10bit(0~1023)ですが,Intel Edison Kit for Arduinoは,12bit(0~4095)の値が得られます.

 

 

//温度センサー
float AI_val = 0; //温度センサー入力値の変数
float TEMP_val = 0; //温度の変数
#define SPEAKER 12 //スピーカーの出力ピン番号
#define GLED_pin 3 //LED(緑)ピン番号
#define YLED_pin 4 //LED(黄)ピン番号
#define RLED_pin 5 //LED(赤)ピン番号

void setup()
{
Serial.begin(9600); //モニター出力するための設定
}

void loop()
{
analogReadResolution(12); //ADCを12bitに変更
AI_val=analogRead(0); //A0ピンから電圧データを受け取る
TEMP_val = ((5 * AI_val) / 4096) * 100; //アナログ入力12bit(4096)を5Vに変換
Serial.println(TEMP_val); //シリアルモニターに出力

//温度に合わせてLEDを発光

if(TEMP_val < 15)
{ //15C以下は消灯
analogWrite(GLED_pin,0); //緑出力は0
analogWrite(YLED_pin,0); //黄出力は0
analogWrite(RLED_pin,0); //赤出力は0
}

else if(TEMP_val < 18)
{ //15〜18Cの時
analogWrite(GLED_pin,150); //緑出力は150
analogWrite(YLED_pin,0); //黄出力は0
analogWrite(RLED_pin,0); //赤出力は0
}

else if(TEMP_val < 21)
{ //18〜21Cの時
analogWrite(GLED_pin,255); //緑出力は255
analogWrite(YLED_pin,0); //黄出力は0
analogWrite(RLED_pin,0); //赤出力は0
}

else if(TEMP_val < 24)
{ //21〜24Cの時
analogWrite(GLED_pin,255); //緑出力は255
analogWrite(YLED_pin,150); //黄出力は150
analogWrite(RLED_pin,0); //赤出力は0
}

else if(TEMP_val < 27)
{ //24〜27Cの時
analogWrite(GLED_pin,255); //緑出力は255
analogWrite(YLED_pin,255); //黄出力は255
analogWrite(RLED_pin,0); //赤出力は0
}

else if(TEMP_val < 30)
{ //27〜30Cの時
analogWrite(GLED_pin,255); //緑出力は255
analogWrite(YLED_pin,255); //黄出力は255
analogWrite(RLED_pin,150); //赤出力は150
}

else
{ //30以上の時は最大出力
analogWrite(GLED_pin,255); //緑出力は255
analogWrite(YLED_pin,255); //黄出力は255
analogWrite(RLED_pin,255); //赤出力は255
for (int i=1; i <= 3; i++)
{
tone(SPEAKER,523,200) ; // ド
delay(200) ;
}
}
delay(1000); //サンプリング周期1(秒)
}

 

 

 簡単なLED色温度計が出来ました.暗闇でも,だいたいの温度がわかります.また,30度を超えると,警告音が出ますので,就寝中の熱中症予防になるかもしれません.

 

 

【LCDモニタを使ってみる】

 先程は,LED色温度計を造りましたが,温度は直接何℃あるのか,知りたいです.
 そこで,LCD表示を使ってみます.

 

 使い方は,ここに詳しく載っています.
http://edison-lab.jp/blog/2015/07/switch-science-trial-kit.html

 

 ピンヘッダは実装されているので,ブレッドボードが使えます.
 配線が複雑ですが,1本ずつ,確実に接続していきます.一度組んだら,バラすのがイヤになりました.

 

 

 サンプルスケッチをダウンロードします.
http://edison-lab.jp/blog/2015/07/switch-science-trial-kit.html

 

 サンプルスケッチ”HelloWorld”を開き,アップロードします.

  

 

 LCDに"hello world!"と表示され,Arduinoの起動時間がカウントアップされています.

 

 


 このLCDに,温度を表示させてみます.Loop()の中身を書き換えるだけです.

 

//LCDに温度表示させる

float AI_val = 0; //温度センサー入力値の変数 

float TEMP_val = 0; //温度の変数
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()

lcd.init(1, 12, 255, 11, 5, 4, 3, 2, 0, 0, 0, 0); // for Intel Edison
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}

void loop()

lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("Temp.="); //LCDモニターに出力
analogReadResolution(12); //ADCを12bitに変更
AI_val=analogRead(0); //A0ピンから電圧データを受け取る
TEMP_val = ((5 * AI_val) / 4096) * 100; //アナログ入力12bit(4096)を5Vに変換
lcd.print(TEMP_val); //LCDモニターに出力
if (TEMP_val < -55 || TMEP_val >150) //使用温度範囲-50~150℃
{
lcd.setCursor(0, 2); // set the cursor to column 0, line 2
lcd.print("Out of Range");
}
delay(1000); //サンプリング周期1(秒)
}

 

 

サンプルスケッチを使えば,いろいろなことが出来ることがわかりました.

 

更新: 2015/08/15

5.オリジナルファンコンの作製

 Arduinoは,PWM制御が出来ます.そして,標準でpulseIn()という関数で,High/Lowのそれぞれの時間を測定できます.
 そうすると,4ピンPCファン(PWMファン)の制御が出来そうな予感.

 先達の知恵お借りして,試してみました.

 

 まず,4ピンのPWM-FANは,
FAN 1pin - GND
FAN 2pin - 12V
FAN 3pin - SENSE
FAN 4pin - CNTRL(PWM)
と,なっています.

 

 CONTROLは,単なるPWM制御なので,入力にトリムポテンションメーターを使いanalogRead()し,analogWrite()を使えば良いことがわかります.
 注意点は,入力は0-1023に対して,出力は0-255になることです.

 

 FANの4pin(PWM)を,Arduinoの9pinに接続し,回転数が変化するか調べてみます.

 

 配線がぐちゃぐちゃなことは,見なかったことにしてください.ポテンションメーターを調整すると,回転数が変化します.

 今回使用したPWM-FANは,EnermaxのUCTB12Pなので,PWMの制御範囲は,500-1500rpmなので,検出と制御は出来ていそうです.

 

  

 

 ちょっと表示がバグっていますが,スケッチは修正済みです.

 

 

 次に,ファンを簡単な温度制御してみます.

 配線図はこうなります.

 

 コレを実際に組むと,ちょっと酷いです.大目に見てください.

 

 

温度をPWMに出力するだけです.

 

 

 

 一応,温度制御された簡単なオリジナルファンコンが出来ました.

 個別制御,一括制御で変わってきますが,Edison一台で,アナログ入力数とアナログ出力数だけファンを取り付けられます.

更新: 2015/08/15

6.POVの作製

 ArduinoでPOV(Persistent Of Vision=残像)が出来ると言うことなので,チャレンジしてみました.

 

 8bit文字なので,2~9ピンにLED-抵抗-GNDと接続するだけです.同じLEDが6個しかなかったので,2個は別ですが,光らせてしまえば,差はありません.

 

 

//ZIGSOW #define BITMAP 40
0b0000000,
0b1100001,
0b1010001,
0b1001001,
0b1000101,
0b1000011,
0b0000000,
0b0000000,
0b1111111,
0b0000000,
0b0000000,
0b0111110,
0b1000001,
0b1000001,
0b1010001,
0b0110110,
0b0000000,
0b0000000,
0b1000111,
0b1001001,
0b1001001,
0b1110001,
0b0000000,
0b0000000,
0b0111110,
0b1000001,
0b1000001,
0b1000001,
0b0111110,
0b0000000,
0b0000000,
0b0001111,
0b0110000,
0b1000000,
0b0111000,
0b1000000,
0b0110000,
0b0001111,
0b0000000,
0b0000000
};

 

結果は,こんな感じです.

 

 いろいろな反射や,無関係なLEDが写り込んでいますが,”ZIGSOW"と表示されています.先のビットマップを横にしてみると,”1”で,”ZIGSOW"と書いてあるのがわかると思います.

 この文字は,Excelで作製して,8bit表示に変換しました.なので,好きな文字が書けます.たとえば,こんな感じです.

 

 

 ただし,漢字は難しいです.そして,文字数が多いと,上手く写真に撮るのが難しいです.

更新: 2015/08/27

7.オリジナルLEDイルミネーションの作製(→Edisonでは動きませんでした)

 ArduinoとLEDについていろいろと調べている内に.シリアル信号でコントロールできるLED(WS2822S)なるものを見つけました.Intel Edisonにはピッタリな予感.

 

 

 WS2822SというRGBフルカラーLEDチップは,マイコンとEPROM(書き込み可能なメモリ)を内蔵したLEDチップで,アドレスが指定できます.このアドレス(LEDの指定)とシリアル信号で,特定のLEDチップの色と輝度がコントロールできます.LEDは,RGBタイプで,8bitの輝度制御可能.各色8bit輝度調整ができるため,1LEDにつき3チャネル分のシリアル信号が必要です.しかし,LEDチップがアドレスを持つため,シリアル接続しても,各LEDに対して独立して色輝度制御が可能という面白いLEDです.

 

 ということは,簡単にオリジナルイルミネーションが作れるということを意味しています.光り物好きな方には最適なアイテムになる予感.

 

 では,早速,試作してみます.
 今回用意したのは,ちょっと横着をして10チップが基板に実装済みのものです.WS2822S自体は表面実装タイプなのでブレッドボードが使えません.汎用基板に半田付けするのも面倒なので,実装済みを購入してしましました.しかも,サンプルスケッチも用意されているというありがたいものです.

 注意する点は電源で,700mA程度流れるようです.5V電源だけは,別に用意して,信号だけをEdisonから送った方が良いかもしれません.

まず,各LEDにアドレスを書き込みます.5V,GND,DATA(13pin),ADDRESS(12pin)の4本を接続します.

 

 こちらのwikiを参考(コピペ)して,実行します.Ws2822sのライブラリーのダウンロード&ライブラリー登録も忘れずに行っておいてください.Arduino IDEは,再起動させます.

 

 今後,アドレスを変更する必要がなければ,ADDRESSを書き込む必要はないので,信号を接続する必要も無いみたいです.
http://trac.switch-science.com/wiki/WS2822S

 

 まず,WS2822Sアドレス設定をします.

 5V,GND,ADR(12pin,LED(13pin))の4本を接続します.

 

 

 IDE上で,"ファイル"→"スケッチの例"→"WS2822S"→"address_write"を読み込みます.

 実行します.

 

 ここで,問題発生.

 コンパイルが上手く行きません.

 エラーもなく,途中で停止してしまいます.

 

 いろいろとチャレンジしましたが,ギブアップ!

 販売元にも問い合わせましたが,Edisonでは動作しないという回答でした.よって,WS2822Sを使用したオリジナル照明作製は実現できませんでした.

 マイコンがATmega328Pなら動くと言うことで,ボードにArduino Unoを選択するとコンパイル可能です.

 

 コメント欄にもありますが,ご助言を頂きながらチャレンジしましたが,私の力では光らすことが出来ませんでした.

 

 

 この設定が上手く行くと,以下の様なレビュー予定でした.

 

  一旦,電源を落とします. 

 

 次に,LEDを光らせてみます.

 5V,GND,DATA(13pin)の3本を接続します.
 IDE上で,"ファイル"→"スケッチの例"→"WS2822S"→"LED_bar_10"を読み込みます.

 

  

 このシリアルLEDチップですが,1回ループをまわしただけでは,光り続けない様です.決まった時間以内に,再書き込み(データの取込)を行わないといけません.なので,Arduinoにはピッタリな用途です.

 

#include "Ws2822s.h"
#define NUM_PIXELS 10 // 使用するWS2822Sの数
#define LED_PIN 13 // WS2822SのDAIピンにつなげるArduinoのピン番号

Ws2822s LED(LED_PIN, NUM_PIXELS);

void setup()
{
}

void loop()
{
 for (int i = 0; i < NUM_PIXELS; ++i)

  {
  LED.setColor(i, 0xFF, 0xFF, 0xFF);
  LED.setColor((i + 1) % NUM_PIXELS, 0xFF, 0x00, 0x00);
  LED.setColor((i + 2) % NUM_PIXELS, 0xFF, 0x00, 0xFF);
  LED.setColor((i + 3) % NUM_PIXELS, 0xFF, 0xFF, 0x00);
  LED.setColor((i + 4) % NUM_PIXELS, 0x50, 0xFF, 0x50);
  LED.setColor((i + 5) % NUM_PIXELS, 0x00, 0xFF, 0x00);
  LED.setColor((i + 6) % NUM_PIXELS, 0x00, 0xFF, 0xFF);
  LED.setColor((i + 7) % NUM_PIXELS, 0x00, 0x00, 0xFF);
  LED.setColor((i + 8) % NUM_PIXELS, 0x99, 0x99, 0x99);
  LED.setColor((i + 9) % NUM_PIXELS, 0x00, 0x00, 0x00);
  LED.send();
  delay(500);
  }
}

 

  このような簡単なスケッチで,10個のLEDチップを好きな色で光らせることが出来ます.しかも配線は,5V,GND,Dataの3線のみです.

  

  結果はありませんが,こんなこともできるというIntel Edisonです.

更新: 2015/08/15

8.Grove Indoor Environment Kitを使ってみる

 やっと,本編です.

 

 Grove Indoor Environment Kit for Intel Edisonを使って,オリジナルな何かを作ります.
 このGrove Indoor Environment Kit for Intel Edisonは,for Intel Edisonというくらいですから,Intel Edison Kit for Arduinoにベストマッチです.ピン互換で拡張ボードの上にベースシールドがそのまま載ります.Arduinoのサンプルスケッチライブラリーも提供されていますので,各種センサーやLCDモニターがそのまま使えます.

 

 

【Grove Indoor Environment Kit for Intel Edisonセット内容】
①Base Shield V2 x 1 接続用のベースシールド
②Grove - Temperature & Humidity Sensor x 1  温湿度センサー
③Grove - Moisture Sensor x 1  水分センサー
④Grove - Light Sensor x 1  光センサー
⑤Grove - UV Sensor x 1  UVセンサー
⑥Grove - PIR Motion Sensor x 1  パッシブ型赤外線センサー
⑦Grove - Encoder x 1  ロータリーエンコーダ
⑧Grove - Button x 1  ボタン
⑨Grove - LCD RGB Backlight x 1  RGBバックライト付きモノクロLCD
⑩Grove - Relay x 1  リレー
⑪Grove - Servo x 1  DCサーボモーター
⑫Grove - Buzzer x 1  ブザー
⑬9V to Barrel Jack Adapter x 1
⑭26AWG Grove Cables x 10
⑮USB Cable x 1
⑯User Guide x 1

 

 室内環境測定用センサー,リレー,ブザー,DCサーボモーター,LCDなど,必要なものはすべて揃っています.
 これで,ロボットを作ることは出来ませんが,センサーからの入力で,何かをさせることは出来そうです.

 

 まず,組み立てます.ベースシールドに各種モジュールを接続します.標準ライブラリーを使うためには,決められた位置に接続していきます.

 

コレが,ベースシールド.Intel Ediso kit for Arduino用になっています.

 

指定された位置に,下記モジュールを接続していきます.
Temperature&Humidity Sensor → I2C


Moisture Sensor → A1


Light Sensor → A2


UV Sensor → A3


PIR Motion Sensor → D7


Encoder → D2


Button → UART(D1)


LCD RGB Backlight → I2C


Relay → D5


Servo → D6


Buzzer → D4

 

 すべて接続すると,こんな感じで,ちょっと悲惨です.しかし,ブレッドボードで組むことを考えれば,非常に楽です.特に,LCDモニタは,コネクタ一つで接続完了します.

 Groveの箱を利用して,各モジュールをセットしていけば,こんな事にはならないのですが,今回は時間の関係で,接続優先です.

 

 

 次に,Intel Edison Kit for Arduinoの上に,ベースシールドを載せます.必ず,USBケーブルを抜いて,電源OFFの状態で行ってください.

 

 こんな状態になります.

 

  

①ライブラリーをDLし,zipファイルを展開しておきます.
https://github.com/Seeed-Studio/Grove_Indoor_Environment_Demo

②Arduino IDEを起動します.

③"ツール"⇒"マイコンボード"⇒"Intel Edison"を選択
④"ツール"⇒"シリアルポート"⇒"COM4"(Intel Edisonが接続されたCOMポート番号)を選択
⑤"スケッチ"⇒"Include Library"⇒"Grove_Indoor_Environment_Demo_Master"を選択
⑥"ファイル"⇒"スケッチの例"⇒"Grove_Indoor_Environment_Demo"を選択
⑦”→”アイコンをクリックして,アップロード

 

 まず,何が出来るか見ていきます.
 シリアルモニタを開きます.

 

①温度
②湿度
③明るさ
④UV強度
⑤赤外線センサ
⑥水分センサ
各センサから得られた数値が表示されます.

 

 また,LCDモニターにも同じように表示されています.表示の切り替えは,エンコーダをまわすことで行うことが出来ます.

 

 

 シリアルモニタのテキストボックスに,コマンドを入力し,送信すると,各モジュールを動作できます.センサーからの入力値が,ある条件になったら,リレーを閉動作,ブザーを鳴らす,サーボモーターを指定角度に回転させるなど.

 

 一応,いろいろなことが出来そうだとわかってきました.

 

 さて,何を作りましょうか?

 これらのセンサー値をWi-Fi経由で取得しようかと考えましたが,スケッチを見ると既に書き込まれていました.
 SSIDとPASSWORDを設定し,無事接続できると,LCDモニターにIPアドレスが表示されます.
 このアドレスに対して,PCやタブレットからアクセスすれば,シリアルモニターと同じ表示が可能です.

 

 

 

 同一ネットワーク内のAndroidタブレット(SH-06F)からも確認できます.

 

 

 いや,困りました.何を作りましょうか?

 これだけデモスケッチが充実していると,スケッチを書かなくても,回路構成を考えれば,コマンドだけでもいろいろ出来てしまいます.
・室温が高くなったら,扇風機を回す
コマンド : set temp>25, relay=1
 扇風機の電源ラインに,5pinのリレーを介しておけば,完成
・暗くなったら,ライトを点ける
コマンド : set light<600, servo=90
 A2の光センサーの値が600以下になったら,サーボモーターを90度回転させて,壁SWをONする
・紫外線が強くなったら,ブザーを鳴らす
コマンド : set uv>80,buzzer=1
 A3のUVセンサーの値が80以上になったら,ブザーを鳴らす
・人が近づいたら,ライトを点ける
コマンド : set pir=1, relay=1
 ライトの電源ラインに,5pinのリレーを介しておけば,完成
など,スケッチを書かなくても,実現できてしまいます.

 

 

更新: 2015/08/20

9.オリジナルアナログ温湿度計を作ってみる

 このGrove Indoor Envirroment Kitは,名前の通り室内環境用のキットなので,いろいろなことが出来ます.が,すべてのキットを使って,オリジナル試作機を作るのは難しいです.

 

 そこで,温湿度計アナログとサーボを使って,巨大な温湿度計を作ってみたいと思います.センサーである温湿度計と変更することで,何でも応用が利きます.例えば,紫外線(UV)メーターとか,観葉植物のポットの水分計とか.


 まず,アナログサーボの動作を確認します.
 アナログサーボ(ES08A)とポテンションメーターのみで,ポテンションメーターに同期して,アナログサーボが動くようにしたいと思います.
 他のモジュールも接続されていますが,使用していません.

 

 

 

  スケッチです.


//アナログサーボ デモ

#include <Servo.h>
int potpin = 0; // A0にポテンションメーターを接続
int val; // ポテンションメーターの入力値

Servo myservo;

void setup()
{
myservo.attach(9,500,1900); // 9pinに接続し,500(min)-1900(max)の範囲でパルス出力する
}

void loop()
{
val = analogRead(potpin); // A0に接続されたポテンションメーターの値を読む (0~1023)
val = map(val, 0, 1023, 0, 179); // map関数で,0~1023の入力値を,0~180度に変換
myservo.write(val); // 変換した角度に設定
delay(15);
}

 

 だいたい,0~150度で動くことがわかりました.ただし,サーボの向きが逆.これは,メモリを右から左に降ることで対応します.

 

 ここで,入力を温度センサーに変えると,温度に合わせて,アナログサーボを動かすことが出来ます.

 

 アナログ入力を,以前使用した温度センサー(LM35DZ)にしても良いのですが,キット内にI2C接続の温湿度センサー(TH02:写真左側)がありますので,こちらを使用します.また,タクトスイッチ(写真右側)で,温度計と湿度計を切り替えるようにします.写真手前は,針を付けたサーボモーターです.

 

 

//アナログ温湿度計

#include <Servo.h>
#include <TH02_dev.h>
#include "Arduino.h"
#include "Wire.h"

const int buttonPin = 2;
int buttonState = 0; //デフォルトは温度計
int val; // サーボ値
Servo myservo;

void setup()
{
  myservo.attach(9,500,1900); // 9pinに接続し,500(min)-1900(max)の範囲でパルス出力する

  Serial.begin(9600); // おまじない

  pinMode(buttonPin, INPUT);
  pinMode(12, OUTPUT); //温度用LED
  pinMode(13, OUTPUT); //湿度用LED

  Serial.println("****TH02_dev demo****\n");
  delay(150); //安定時間
  TH02.begin();
  delay(100);
}

void loop()
{
  float temper = TH02.ReadTemperature(); //TH02から,温度を読み込む
  Serial.println("Temperature= ");
  Serial.print(temper);
  Serial.println("C\r\n");

  float humidity = TH02.ReadHumidity(); //TH02から,湿度を読み込む
  Serial.println("Humidity: ");
  Serial.print(humidity);
  Serial.println("%\r\n");

  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW)
  {
    digitalWrite(12, HIGH); // turn LED on:
    //温度でサーボを動かす
    val = map(temper, 0, 59, 0, 179); // map関数で,0~59℃の入力値を,0~180度に変換
    myservo.write(val); // 変換した角度に設定
    Serial.print("servo= ");
    Serial.println(val);
  }
else
  {
    digitalWrite(13, HIGH); // turn LED on:
    //湿度でサーボを動かす
    val = map(humidity, 0, 99, 0, 179); // map関数で,0~59℃の入力値を,0~180度に変換
    myservo.write(val); // 変換した角度に設定
    Serial.print("servo= ");
    Serial.println(val);
  }

  delay(5000);
  digitalWrite(12, LOW); // turn LED off:
  digitalWrite(13, LOW); // turn LED off:
}

 

 後は,0~60℃と0~100%の2重メモリの付いたバックパネルを作れば,完成です.

 

 

 

右上にあるスイッチで切り替えると,湿度計になります.

 

 

 ちょっと見た目はイマイチですが,オリジナルの温湿度計が出来ました.

 

更新: 2015/08/15

10.レビューまとめ

 

更新: 2015/08/20

【おまけ】実用的な人感センサーライトを作ってみた

 Grove Indoor Envioroment Kitを使って,もう一つ作ってみました.

 

 非常にベタですが,発想力がないので,PIRモーションセンサと光センサーを使った人感センサーライトです.

 

 光センサーで周辺の明るさを検知し,暗い場合のみPIRモーションセンサーで人を検知するとLEDライトを点灯させます.点灯時間は,室内用途なので10秒としました.
 動作には不要ですが,モニター用として,LEDを使います.
 LEDライトは,キット内のLEDでは暗くて実用的ではないため,車載用のLEDチップを使います.このため,電源は12Vで,別途ACアダプタから供給し,この12V電源をリレーでON/OFFさせます.
ブレッドボードが上手く書けませんでしたので,実物写真です.使うパーツは,PIRモーションセンサー,リレー,光センサー,モニタ用LED,220Ω抵抗,LEDライトです.

 

 PIRモーションセンサーを7pinに接続し,INPUTモードを指定します.

 モニター用LEDを13pinに接続し,OUTPUTモードを指定し,220Ωの抵抗を介して,GNDに落とします.
 リレーは5pinに接続し,OUTPUTモードを指定し,ACアダプタの+12VとLEDライトを接続します.ACアダプタのGNDは,ブレッドボードのGNDに接続します.

後は,スケッチを書くだけです.モニターLEDがありますが,念のためシリアルモニタにもlog表示させます.

 

スケッチです.

// PIR Motion Sensor + LED-Light
#define PIR_MOTION_SENSOR 7 // 7pinにPIR_Motion_Sensorを接続
#define LED 13 // 13pinにLED+220Ωを接続
#define LEDrelay 5 // 5pinにRelayを接続
const int offTimer=10000; // LED-Lightの点灯時間 (msec)
const int thresholdvalue=10; //明るさのしきい値
float Rsensor;

void setup()
{
pinMode(PIR_MOTION_SENSOR, INPUT);
pinMode(LED,OUTPUT);
pinMode(LEDrelay,OUTPUT);
Serial.begin(9600); //おまじない
}

void loop()
{
if(isPeopleDetected()) //人を検知したら
{
digitalWrite(LED,HIGH); //モニタ用LED点灯
Serial.println("Now! Detects the moving people ");
int sensorValue = analogRead(0); //光センサー値の読み込み
Rsensor=(float)(1023-sensorValue)*10/sensorValue;
Serial.println("the analog read data is ");
Serial.println(sensorValue);
Serial.println("the sensor resistance is ");
Serial.println(Rsensor,DEC);
if(Rsensor<thresholdvalue)
{
digitalWrite(LEDrelay,HIGH);
delay(offTimer);
}
}
digitalWrite(LED,LOW);
digitalWrite(LEDrelay,LOW);
}
/***************************************************************/
boolean isPeopleDetected()
{
int sensorValue = digitalRead(PIR_MOTION_SENSOR);
if(sensorValue == HIGH) //人検出した?
{
return true; //return true
}
else
{
return false; //return false
}
}

 

 明るいときには,PIRモーションセンサーが反応してもLEDライトは点灯しません.
 光センサーを覆うよう(暗くなるように)に手を動かすと,LEDライトが10秒間点灯します.今回,直接リレーを介して+12V接続しているため,フェードアウトが出来ませんでした.5V電源のLEDライトなら,analogアウトでフェードアウト制御できますが,電流容量が心配です.

 

 ワンパッケージで市販されている人感センサー付きLEDライトに比べ,ちょっと大きく,Edison用途としてはもったいないですが,実用的な人感センサーライトが出来ました.

 

 これで,今回のプレミアムレビューIntel Edison Kit for Arduinoは,一旦終了とします.また,面白そうなアイデアが見つかったら,挑戦します.

コメント (15)

  • harmankardonさん

    2015/08/20

    7.オリジナルLEDイルミネーションの作製で使用予定のシリアルLEDモジュール(WS2822S)は,Edisonでは動かないことがわかりました.
    レビュー途中になっていましたが,作製は中止します.

    その分,オマケとして,人感センサーLEDライトを追加しました.

    以上で,プレミアムレビューは,完成です.
  • sorrowさん

    2015/08/21

    ずぶの素人にも分かりやすかったです。有難うございます。

    シリアルLEDに関する互換性の問題はIntelの中の人のブログに書いてありました。地雷だったようですね。Edison IDEがArduino IDEのパクリ(エミュレート)であることに起因するという話です。ライブラリ互換性、シールド・サポート、GPIOスピードが、Galileoの時からの問題であるとも。それが分かってるんなら解決しろよと思いますが。

    http://blog.dimitridiakopoulos.com/2014/09/10/hands-on-in...
  • harmankardonさん

    2015/08/21

    sorrowさん,コメントありがとうございます.

    シリアルLEDに関する情報もありがとうございます.
    なんとWS2822Sは,地雷だったんですね.前モデルのWS2811で動かないという情報があるとは思いもよりませんでした.

    Edison向きだと思ったのですが,残念です.
他12件のコメントを表示

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ6MB)

    画像を選択してください

    ファイルサイズが6MBを超えています

    別の画像を追加

    ほかのユーザーのレビュー

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから