じゃあ作ろう
前回までで、だいたいM5StampS3の使い方がわかってきました。
もう、自分が作りたいプログラムができそうな気がしています。
何といってもやりたいことは以下2つ。
- ライトを定時でON/OFF
- Co2のバルブを定時でON/OFF
かんたんすぎる。。。
先ほどまで見ていたサンプルプログラムの方が何倍も難しいです。
もう少し要件を足しましょう。
- インターネットから現在の時刻を取得する
- OTAでプログラム書換できるようにする (Over The Air … 無線LAN経由で書き込みできるらしいです)
これらはすでにちょっと調べて実現可能なことがわかっていますので、現時点でだいたいできるだろうなぁという想像ができてしまっています。
まだちょっと物足りないです。
これを入れましょう。
- ライトの点灯をだんだん明るく/暗くする
一般的にPWMという技を使えばできることは知っています。
ただその実装はやったことがないのでいい機会ですので今回チャレンジしてみます!
とはいえ一回シンプルモデルを作りましょう
作りたいものがカンタンすぎるからPWM案件も入れましょう、ということでしたが、そのカンタン仕様すら実は作れない恐れもあります。
なので、まずは本当にカンタンだったのか、それを確認してみましょう。
どのピンを使おう
ライトもCo2もON/OFFだけなのでGPIOを使えばいいです。たぶんPWMもGPIOポートからの出力になると思います。

上記の絵のうち、穴が大きいのと小さいのがあります。たぶん穴が大きい方が粗いピンヘッダ用なので、穴が大きいピンを選択します。

てきとうに端っこは避けてG3と、間をあけてG7でいいでしょう。
GNDや5Vも後で接続することになるので、こことも距離はあけておきたいです。
何をどうやって接続するのか
ここではいったんLEDをON/OFFさせて狙い通りにポートのON/OFFを操れているのか、という確認にしましょう。
それではLEDを接続します。
GPIOに直接LEDを接続すると壊れてしまうと思うので間に抵抗を挟みます。
今回は300Ωよりちょい小さいくらいでいいでしょう。1kでも光ると思います。
抵抗値の計算はこちらをクリック
LEDは電流が高くなると明るくなります。
経験上、普通のLEDは20mAが上限のことが多いです。
ただそれでも明るすぎるので、インジケータ的な使い方は5mAとかそのレベルでいいです。
LEDは電流を流すと、順電圧(VF)という電圧降下が発生します。
赤で2V切るくらい、青や白だと3V越えくらいです。
そしてGPIOポートから供給される電圧が3.3Vなので、例えば赤で5mA流したい場合は、(3.3-2)/R=5mAという式になります。
V=RIのオームの法則ですね。
そうするとR=260という値になります。
これが青、白だとVFが3.3Vを超すことがあるのですが、まぁ点灯するにはしますのでテスト的に使うなら同じ抵抗値でもいけると思います。
回路図にするとこんな感じです。

3ピンと7ピンに300Ωの抵抗、その先にLEDのアノード、LEDのカソードをM5StampS3のGND(10ピンの下)に接続します。
こうすると3ピンと7ピンがHigh(3.3V)の時にはLEDに電流が流れて点灯する、というふうになります。
じゃあ作ってみよう
カンタンな動作確認ですので回路はブレッドボードで作っていきます

部品をあさっていたらちょうどいい感じの抵抗と3色LEDが出てきました。
・
・
・
なぜ3色LEDという高そうな変な部品がここで出てくるのか。。。
安かったからです。
まず3色LEDというのはRGB(赤緑青)の光の3原色を1個の素子の中に入れたものです。
つまりフルカラーなLEDなんです。すごく高そうです。
一方、単色のLEDは、例えば普通の店でLEDを買おうとすると1個数十円します。100円は切るくらいのイメージでした。
それが、アマゾンで100個1000円で3色LEDが売られているんです。
1個10円です。
衝撃でした。
おかげで我が家には結構な数のLEDストックがあるのですが、これを使うのが一番安い、という意味のわからない状況になっております。
気を取り直して
では作ってみます。
回路図も3色LED寄りにして↓の感じに修正しています。

LEDを3つを1セットにしただけみたいなものですから対して変わりません。
ただ問題があって、こちらデータシートが見つかりません!
ヒントは2つ。
- 商品名にカソードコモンと書いてあるので、カソード側(GND側)が共通
- 虫眼鏡でよくみればどれがカソードかわかる

これでM5StampS3のGNDピンにつなぐべき足はわかりました。
あとは残った3本の足をテキトウに3ピンと7ピンに接続すれば、どの足が何色かわかるはずです。

なんとも味気ない回路になってしまいました。
プログラムを書きましょう
LEDの点灯を切り替えるプログラムを作っていきます。
こんな感じにしてみます。
ピン3 | ピン7 |
○ | × |
× | ○ |
○ | ○ |
× | × |
○が点灯で×が消灯です
これを1秒おきに切り替えます
// 起動時のセットアップをする関数
void setup() {
pinMode(3, OUTPUT);
pinMode(7, OUTPUT);
}
// LEDを点灯させるプログラム
void loop() {
digitalWrite(3, HIGH);
digitalWrite(7, LOW);
delay(1000);
digitalWrite(3, LOW);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(3, HIGH);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(3, LOW);
digitalWrite(7, LOW);
delay(1000);
}
なんの工夫もせずシンプルに書いてみました。なんとも単調です。
とは言え、これでも動かしてみると「動かしてるぜ~」感は十分に感じられると思います。
いざ、点灯
ちゃんと点灯できました。
3ピンが青で7ピンが緑だったみたいです。

同時点灯で混ざると水色みたいになります。
こっちの動画だと同時点灯している様子がわかりやすいです。
さて、目論見どおりに動かすことができました。
それではここから水槽に使えるようにパワーアップしていきましょう
コメント