- Windows or Mac
- GR-CITRUS、WA-MIKAN
- マイクロUSBケーブル
- ブレッドボード
- ジャンパワイヤー(オスオス)
- LED
- CDSセル
- 抵抗
- 温湿度センサーモジュール
参加案内に記載していたようようにVisual Studio CodeとプラグインのRubicを利用します。
VS Codeの機能拡張からRubicを選択しインストールします。
Rubicのボードカタログ設定メニューでは以下の画像のようにアコーディオンメニューを選択します。接続テストは失敗との警告がでることがありますが、その場合は接続テストに成功しないままファームウェアを書き込みに進んでください。
環境構築のテストとしてシリアル通信で文字を出力したいと思います。
main.rbに以下ので作成します。
usb = Serial.new(0)
usb.println("Hello World")
GR-Citrusのクラス、メソッド早見表がルネサスのサイトに掲載されているので、以降参考にしてください。
http://gadget.renesas.com/ja/product/citrus_sp1z.html
ファームウェアのソースはgithub上で確認できます。
https://github.com/wakayamarb/wrbb-v2lib-firm
LチカとはLEDチカチカの略です。 電子工作分野におけるHello Worldのようなものです。
ブレッドボードは実験、試作用によく使われる基盤です。
パーツを差し込むだけで使えます。
下部の図のような形で内部はつながっています。
画像引用:https://tool-lab.com/make/macpic-startup-6/
まずはLEDを光らせるための回路を作っていきます。
GR-CITRUSの電源電圧(3.3V)-> 抵抗 -> LED -> GNDになるように回路を作ります。
画像引用:https://tool-lab.com/make/macpic-startup-6/
LEDの足には長い方、短い方があります。図のように+側に長い方、マイナス側に短い方を配置します。
抵抗は220Ωもしくは270Ω。
オームの法則I=E/Rより抵抗値を上げると電流量が小さくなりLEDは暗くなります。
抵抗は色によって数値を判断します。
以下のリンクから確認できます。
http://sec-suzuki.com/newpage337.htm
マイコンの周辺機能として、汎用I/Oポート(GPIO)がありオン、オフのデジタル信号の入出力端子として扱われます。 Lチカに入る前に、GR-CTIRUSのポートの仕様を確認しておきましょう
LEDを操作するにはdigital Write/Readのピンを選択します。今回は12です。
led = 12
pinMode(led, 1)
10.times do
digitalWrite(led, 0)
#delayの単位はミリセカンド
delay(1000)
digitalWrite(led,1)
delay(1000)
end
引用なのでRaspberryPiと書いちゃってますが・・・。
この回路図のようにスイッチの動作をプログラムで制御することでLEDへ電気の流れを作りだします。
LEDの明るさ調整はPWM(Pulse Width Modulation) を利用した以下のコードで可能です。
ごく短い間にON,OFFの出力を素早く交互に行うことでパルス幅に比例した電圧を作りだしています。
画像引用:https://tool-lab.com/make/pic-app-2/
以下にPWMによる明るさ制御のコード例を示します。
pinMode(12, OUTPUT)
val = 0
direction = 1
loop do
pwm(12, val)
#PWMの比率 0~255
val = val + direction
direction = 1 if val == 0
direction = -1 if val == 255
delay (5)
end
CdSセルを使って照度を使った工作をやっていきたいと思います。
CdS(硫化カドミニウム)を主成分とするこのパーツは明るさに応じて抵抗値が変化する特性があります。(明るいと抵抗値が低くなり、暗いと抵抗値が高くなる)
そして、GR-Citrusではピンから入力電圧を計測することができます。
これらを利用して部屋の明るさを判断できる照度センサーを作りたいと思います。
まずは、CdSの動作を理解するために、LEDを使った実験を行います。
蛍光灯が光る明るいオフィスの環境でCdSの抵抗値をテスターで計測すると1.3kΩでした。
この時R2の電圧はR2 / (R1 + R2) に電源電圧3.3Vをかけた式で求めることができます。
R1に2kΩの抵抗を利用すると先ほどの式より、1.3vとなりLEDは点灯しません。
しかし、手で覆うなどしてCdS抵抗値をあげるとLEDにかかる電圧が高くなりLEDが点灯することになります。点灯はしますが電流量が少ないため、ごくわずかに光る程度です。
簡単な実験を経由しましたが、analogReadを使えばGPIOを通じて電圧の変化をリアルタイムに測定して出力することができます。
usb = Serial.new(0)
pinMode(14, 0)
analogReference(2)
100.times do
usb.println(analogRead(14).to_s)
delay(500)
end
では、今日の本題。
温湿度センサーモジュールの使い方を解説します。
まずは、センサーとマイコンでI2C(アイスクエアドシー)を利用して通信しますので簡単に理解する必要があります。
以下のリンク先でI2Cのプロトコルについてざっくりと理解できます。
http://www.picfun.com/c15.html
(日本語) http://akizukidenshi.com/download/ds/sensirion/Sensirion_Humidity_Sensors_SHT3x_DIS_Datasheet_V3_J.pdf (英語) http://akizukidenshi.com/download/ds/sensirion/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital_V4_E.pdf
プロトコルと温湿度センサの仕様を理解したら実際にコーディングしていきます。 以下はサンプルプログラムです。
#スレーブのアドレス
I2C_ADDR = 0x45
#データシートの設定条件より
COMMAND = 0x2400
usb = Serial.new(0)
#引数は初期化する通信ポート(SDA/SCL)
wire = I2c.new(0)
10.times do
#書き込み準備の開始
wire.begin(I2C_ADDR);
#コマンドMSB部
wire.lwrite(COMMAND>>8);
#コマンドLSB部 0xFFにてマスクする。0xFF.to_s(2) => 11111111
wire.lwrite(COMMAND&0xFF);
#I2C通信。wire.endでスレーブに送信する
wire.end
#スレーブからデータを受信する
wire.request(I2C_ADDR,6)
data = []
num = 0
while wire.available != 0 do
data[num] = wire.lread
num += 1
end
#データシートの式から温度と湿度を計算する
temp = -45.0 + (175.0 * ((data[0] * 256.0) + data[1]) / 65535.0)
humidity = (100.0 * ((data[3] * 256.0) + data[4]) / 65535.0)
#コンソールに出力する
usb.println("T : #{temp.to_s}")
usb.println("RH : #{humidity.to_s}")
usb.println("+++++++++++++")
delay(1000)
end
ここからはCdSもしくは照度センサなどで取得したデータを使って自由に自分自身のプロジェクトを作成してください。
準備しているセンサーは以下のものです。(数に限りがあります)
Webと組み合わせると面白いことができるかもしれません。
- CdS
- 温湿度センサ
- 人感センサ SB612A (5個) 参考:http://akizukidenshi.com/catalog/g/gM-08767/
- 加速度センサ KXSC7-2050(2個) 参考:http://gadget.renesas.com/ja/product/citrus_sp1b.html
WA-MIKANを使えばネットワークアクセス、MicroSDカードが使えます。
usb = Serial.new(0)
System.useWiFi
WiFi.setMode 1
WiFi.connect "SSID", "PASS"
usb.println(WiFi.ipconfig)
WiFi.disconnect
WiFiクラスのメソッド確認はルネサスの早見表をご覧ください。
http://gadget.renesas.com/ja/product/citrus_sp1z.html