【SALZ製作日誌】2020.07.21 いまだ霧の中。。。
あともう少しで完成と思いながら、なかなか動作せず、ぐだぐだの製作日誌になって、とてもお恥ずかしいです。
はやく本編が書けるように頑張っていますが、盆栽時間で事を進めてしまうため、のんびり更新となってしまい、申し訳ございません。
前回の日誌「【SALZ製作日誌】2020.07.14 やはり書籍から得られる情報は多い」
で本を読んだため、うまくいかない原因が分かったつもりになって、解決は早いかと思いました。ところが、これがなかなか前へ進まず、いまだなお霧の中にいます。
試したことは下記のとおりです。
まずは外部電源を試しました。
アマゾンで購入したUSBコネクタDIP化キットが届きました。
キットなので、基板とピンをはんだ付けする必要があります。
はんだ付けについては、苦手でできることなら避けて通りたいと思っていましたが、今の時代、はんだ付けに関する膨大な資料がネットで手に入ります。YouTubeでうまい人の解説動画を見ているうちに、次第にできるようになってきました。
私の今の所のコツは次の点です。
・こて台を買いました。
・はんだふき取りスポンジで余分なはんだを取り除き、こて先をきれいに保てるようになりました。一番安い300円ぐらいのものでしたが、効果がありました。
・マスキングテープでパーツの仮止めをします。
・手で押さえながらの作業がなくなり、両手ははんだごてとはんだに集中できるようになりました。
・はんだごてに少しはんだを溶かし、部品にあてがいはんだを乗せる部分を加熱します。
・充分加熱されたら、はんだを当てます。
・はんだを離した後、はんだごてを離します。
適切な道具を用いて、両手をはんだとはんだごてを持ち、狙いを定めて速やかに行うことが大切です。
と言う訳で、救世主のUSBコネクタDIP化キットを追加してみます。
ここでひとつ問題が発生しました。
配線がブレッドボードに収まらなくなりました。
ミニサイズのブレッドボードに配線を行っていましたが、ホールの数が足りなくなってきました。
ブレッドボードをひとまわり大きくして、再度配線を行いました。
これで、電力不足から解消されて、うまく動くはずです。と、思ったのですが、
テスト結果は変わらず。
何が何かさっぱりわかりません。
投げ出したくなる気持ちをグッと抑えてひとつずつのパーツについて、確認していくことにしました。
サーボはこの前あれこれ確認していたので、後回しにして、リレーのテストから始めることにしました。まずは配線の状態を確認します。。。
なんと、配線がでたらめでした。
VCCとINを間違えています。これは、うまく動くはずがありません。がっかりしながらも、少し安堵しました。これだけの原因で直れば、すぐに、次のステップへ進めるからです。
しかし、結果は残念ながら、×。配線を直しても動きませんでした。
赤いLEDが煌煌と灯り、緑のLEDは淡く灯った状態で、目的の動作を行いません。
目的の動作とは、つまり、リレーの動作、プログラムからのスイッチオンの指令で、リレーの回路がつながり、その際に電磁石に引っ張られた接点の発する「カチッ」という音がします。このことを指しています。
ここまでは、外部電源を用いてテストをしていました、PCからプログラムを書き込むたびに、USBの線を抜き差しするのが億劫になってきました。
電源をPCからのtype-C入力に戻しました。
リレーについて、ここまでハマると思っていませんでした。
何か別のことを試す必要があります。
試すことは
・別のリレーを試す。
・M5ATOM Matrix→Arduino Unoで試す。
ここまで考えて、この日は力尽きました。
アマゾンの水やりキットは2セット購入していました。
このため、うちにはもう一つリレーがあります。
まずは別のリレーを使ってテストしてみます。
このリレーが壊れているかもしれないと、疑ってみたのです。
結果は同じ。「カチッ」という音がしません。
ということは、リレーは多分壊れていません。
これは、もう詰んだと思いました。
M5Atom Matrixでは、リレーは扱えないんじゃないか。
マイコンを変える必要があるのではないか。とも考えました。
M5ATOM Matrix→Arduino Unoで試す。
ということも考えましたが、もう少し悪あがきしてみようと思いました。
そこで、私が取った方法とは。。。
ポートスキャンです。
順番にポートに対して、degitalWrite();を行います。
名前だけ聞くとハッカーのような手口ですが、forループで回しているだけです。
for (int i = 10; i < 40; i++) {
Serial.printf("i:%d\n", i);
digitalWrite(i, HIGH);
delay(1000);
digitalWrite(i, LOW);
delay(1000);
}
下手な鉄砲数撃ちゃ当たる。と揶揄されそうな悪手です。とにかく必死です。これで、どこかで「カチッ」と鳴ってくれればよいのですが。
試してみますと、i:23 のとき、かすかに「カチッ」と鳴ってくれました。緑色のLEDもわずかに明るさが変化したように感じられました。
おお!と思いましたが、まだまだです。ポート番号は23で間違いないと思われます。でもおしい。正常な動作はスイッチのONとOFFとで、「カチッ」、「カチッ」と2回鳴るはずです。
なんなんだこれは。もう本当にダメだと思いました。
困り果てて、しばらく考えることをやめました。
ネットで、リレー装置についての情報を探しました。読み込んでいくと、ぼんやりと理由が分かってきました。
リレーには3本の線があります。VCC、GND、INです。
M5Atom Matrixでは、5V、3.3Vが使えます。
素人なので、3.3Vよりも5Vの方が絶対いいに決まっている。
という勝手な思い込みで、5Vをつないでいました。
INとG23をつないでいるのですが、M5ATOM Matrixから出てくるG23の出力が問題になっているようなのです。
慣れない電圧計を使って計ってみると。。。3.3Vを指しています。
ということは、
+側の電圧は3.3Vを用いる必要があることが分かりました。
確信があったわけではないのですが、とにかく試せることは試そうと、やってみました。するとどうでしょう。今まで、淡く灯っていた緑色のLEDが明るく光りました。
digitalWrite(23, HIGH);
delay(1000);
digitalWrite(23, LOW);
delay(1000);
4「カチッ」、「カチッ」と2回音を立てて、リレーが動き出しました。
ようやくです。ここまでが、とてもとても長い道のりでした。
気をよくして、次のテストに移りました。
リレーの先に、モーターを付けます。
これは本来であれば、外部電源で供給した方がよいと言われている所、でも、もうここまで来たら、行けるところまでチャレンジしてみよう。と試してみることにしました。
最初、接触不良でうまく動作していませんでしたが、ちょっと振ってやると、動くようになりました。
ただ、ちょっと挙動がおかしいです。M5ATOM Matrixに通電すると、まず、モーターが動き出します。しばらくして、リレーのテストが始まると、On、Offを繰り返します。
On、Offを入れ替えできないか?検討します。
まずはリレーの端子から。端子には簡体字で「常开」「公共端」「常闭」と書かれています。「公共端」-「常开」か「公共端」-「常闭」かのどちらか。様子を見ながら変えていきます。(すみません。いい加減で。)
SALZ2のソースを見ながら、不思議に思っていたのですが、
void
WsOn(void) {
//給水On
Serial.println("給水On");
digitalWrite(WS_PIN, LOW);
}
void
WsOff(void) {
//給水Off
Serial.println("給水Off");
digitalWrite(WS_PIN, HIGH);
}
給水Onのとき、LOW、給水Offのとき、HIGHにしています。
これが、「公共端」-「常开」との組み合わせで、目的の動作を実現することができました。
調べてみると、「常开」=「N.O.」(Normally Open)=「常開接点」。つまり、常時開いていて、動作時に回路を閉じる接点だそうです。でも、なぜ給水Onで、
digitalWrite(WS_PIN, LOW);
なのか。霧は深いです。
次に試したのが、水分計です。
実はこの部分が、まだ解決しておりません。
現象は以下のとおりです。
シリアルモニタのログです。
給水Off
WsTest() End
排水弁を開く
排水弁を閉じる
給水Off
排水弁を開く
MOISTURE LEVEL:4092.80
ドライ
排水弁を閉じる
給水On
給水:5秒
給水Off
ドブ漬け:5秒
排水弁を開く
待機:10秒
MOISTURE LEVEL:1306.80
待機:10秒
MOISTURE LEVEL:663.80
待機:10秒
MOISTURE LEVEL:254.40
待機:10秒
MOISTURE LEVEL:52.00
待機:10秒
MOISTURE LEVEL:0.00
待機:10秒
MOISTURE LEVEL:0.00
待機:10秒
MOISTURE LEVEL:0.00
待機:10秒
:
MOISTURE LEVELの値が、4092.80、1306.80、663.80、254.40、52.00、0.00、...と、測るたびに数値が減衰していきます。
float v = analogRead(WL_PIN);
これが、うまく動いていないようなのです。
あれこれ試して見るものの、まだ答えは出ていません。
まだまだ霧の中。ただ問題は少し減ったかな。あともう少しがんばります。
さいごに、「自己紹介」ページを書きました。
もしよかったら、ご覧ください。
#盆栽 #Bonsai #自動潅水装置 #電子工作 #SALZ #M5ATOM #M5Stack #Arduino #ESP32 #リレー #DIP化 #水分計