![見出し画像](https://assets.st-note.com/production/uploads/images/109960935/rectangle_large_type_2_21bfc2a9d2f6c95f64ba1b5e7fcbd03d.png?width=1200)
Seeed Studio Grove アクアポニックス制御の個別設定について
先回の記事ではSeeed XIAOをアクアポニックス制御に利用するための概要とサンプルコードについて説明しました。
今回はSeeed Studio Groveについて、センサー個別の活用例について記事にしていきます。内容についてはSeeed Studio公式サイトを参考にした内容となっています。
今回説明する3種類のセンサー
・One Wire Temperature DS18B20(水槽の水温をモニタリングする)
・Grove Temp&Humi Sensor DHT20( 室温と湿度のモニタリング)
・Grove Relay(水槽モーターの電源を制御する)
1.One Wire Temperatureで水槽の水温をモニタリングする
上記公式サイトの通りで水槽の温度を測定できます。
補足すると、"#define ONE_WIRE_BUS 2"で2番のピン(D2)を指定して本体と接続しています。
次に取得した水温をループでモニタリングしていきます。
以下のコードが活用できます。
#include <OneWire.h>
#include <DallasTemperature.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ PIN_WIRE_SCL, /* data=*/ PIN_WIRE_SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display
#define ONE_WIRE_BUS 7 //D7ピンに接続
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned long TIMER = 0;
void setup(){
u8x8.begin();
u8x8.setFlipMode(1);
Serial.begin(115200);
sensors.begin();
}
void loop(){
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
unsigned long now = millis();
if((now - TIMER) > 3000) {
// Check if reading was successful
if(tempC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperature for the device 1 (index 0) is: ");
Serial.println(tempC);
} else {
Serial.println("Error: Could not read temperature data");
}
// one wire temperatureの値をOLEDに3秒毎表示させる
u8x8.clearDisplay();
u8x8.setFont(u8x8_font_amstrad_cpc_extended_r);
u8x8.setCursor(1,0);
u8x8.print("Water ");
u8x8.print(String(tempC,1));
u8x8.print("'C ");
TIMER = now;
}
}
millis()関数を使用してプログラム起動からの経過時間を取得し、
3秒毎に水温をOLEDディスプレイに表示させています。
XIAO expansion boardにはRTC(リアルタイム・クロック)チップが搭載されているので、より正確なタイマーを実装したい時は使うのも手です。
2.Grove Temperature&Humidity Sensor (DHT20)で室温と湿度のモニタリングをする
このセンサーの設定には苦戦しました。
理由は主に以下の2点です。
・販売されている種類(DHT11,DHT20,DHT22,,,)多すぎで複雑。
・ケーブルを抜くとシステムがフリーズする謎のバグがある。
(抜き差ししても止まらないようにしたいのです)
そのため下記のコードの設計としています。
#include <Arduino.h>
#include <Wire.h>
#include <DHT20.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ PIN_WIRE_SCL, /* data=*/ PIN_WIRE_SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display
DHT20 DHT(&Wire);
unsigned long TIMER = 0;
void setup()
{
u8x8.begin();
u8x8.setFlipMode(1);
Serial.begin(115200);
DHT.begin();
Wire.begin();
}
void loop()
{
DHT.readData();
DHT.convert();
float dht20Humidity = DHT.getHumidity();
float dht20Temperature = DHT.getTemperature();
if(dht20Temperature == -50){//未接続では-50を返す為
dht20Temperature = 0;
}
DHT.requestData();
unsigned long now = millis();
if((now - TIMER) > 3000) {
u8x8.clearDisplay();
u8x8.setFont(u8x8_font_amstrad_cpc_extended_r);
// temperature
u8x8.setCursor(1,0);
u8x8.print("Temp ");
u8x8.print(String(dht20Temperature,1));
u8x8.print("'C ");
// humidity
u8x8.setCursor(1,2);
u8x8.print("Humidity ");
u8x8.print(String(dht20Humidity,1));
u8x8.print("% ");
TIMER = now;
}
}
非同期通信にしてケーブルを抜いてもシステムが止まらないようになっています。非同期通信の詳細については下記のサイトが参考になりますのでご覧ください。
3.Grove Relayで水槽モーターの電源を制御する
アクアポニックスシステムでは、野菜栽培地の根腐れを予防する目的で
一定期間栽培地を空気に晒す方法があります。
ベルサイフォンを使ったり、DWCシステムなどの水深が深いシステムではエアレーションを活用する方法もあります。
家庭用では安価で安全なシステムを構築したいので、Relayを使用して
一定期間栽培地への水の流入を止める方法を採用しています。
設定プログラミングはシンプルです。
void setup()
{
pinMode(5, OUTPUT);
}
void loop()
{
digitalWrite(5, HIGH);//電源ON
delay(3000);
digitalWrite(5, LOW);//電源OFF
delay(3000);
}
リレーには種類がありますが、Grove RelayはArduiono(XIAO )がONの時に
リレーがONの仕組みとなっています。なので何らかのトラブルでArduino の電源がOFFになると、リレーが接続されたAC電源はOFFになります。
次にコード線を加工してRelayと接続していきます。
Arduinoでは5V電源を使用していましたが、それよりも大きいAC100V電源を操作します。感電や火災には十分注意して作業を行なってください。
リレー制御は電磁石でスイッチのONとOFFを切り替える電子部品です。
適切な方法で設定を行なえば安全なシステムと考えます。
下記が接続イメージとなります。
作業中は必ず全ての電源をOFFにしてください。感電します。(-ノ-)/Ωチーンです。
モータの電源コードの外皮を剥がします。
電源コードの内部は2本の銅線コードで構成されています。
カッターナイフ等で外皮の中心部あたりに切り込みを入れると銅線を傷つけずに露出する事ができます。
露出した2本の赤青(物により色が違う)どちらでもいいのでカットして銅線を露出させRelayに繋ぎます。
モーターのコードを加工するのはもったいないと思うならば、
短めの延長コードを加工して、モーターと繋げるのも方法としてあります。
![](https://assets.st-note.com/img/1688509479152-0gXy76TqhY.png?width=1200)
実際に銅線をRelayに繋いだ写真です。
メガネドライバー等でネジを緩めて差し込みます。
剥き出しの銅線はホコリ等で漏電の原因となりますので露出はなるべく短くしてください。
以上でRelayの設定は終わりです。
![](https://assets.st-note.com/img/1688510281261-04Y4bJy6Q0.jpg?width=1200)