見出し画像

【SALZ製作日誌】2020.07.21 いまだ霧の中。。。

あともう少しで完成と思いながら、なかなか動作せず、ぐだぐだの製作日誌になって、とてもお恥ずかしいです。
はやく本編が書けるように頑張っていますが、盆栽時間で事を進めてしまうため、のんびり更新となってしまい、申し訳ございません。

前回の日誌「【SALZ製作日誌】2020.07.14 やはり書籍から得られる情報は多い」

で本を読んだため、うまくいかない原因が分かったつもりになって、解決は早いかと思いました。ところが、これがなかなか前へ進まず、いまだなお霧の中にいます。

試したことは下記のとおりです。

まずは外部電源を試しました。

アマゾンで購入したUSBコネクタDIP化キットが届きました。

キットなので、基板とピンをはんだ付けする必要があります。

はんだ付けについては、苦手でできることなら避けて通りたいと思っていましたが、今の時代、はんだ付けに関する膨大な資料がネットで手に入ります。YouTubeでうまい人の解説動画を見ているうちに、次第にできるようになってきました。

私の今の所のコツは次の点です。
・こて台を買いました。
 ・はんだふき取りスポンジで余分なはんだを取り除き、こて先をきれいに保てるようになりました。一番安い300円ぐらいのものでしたが、効果がありました。
・マスキングテープでパーツの仮止めをします。
 ・手で押さえながらの作業がなくなり、両手ははんだごてとはんだに集中できるようになりました。
・はんだごてに少しはんだを溶かし、部品にあてがいはんだを乗せる部分を加熱します。
 ・充分加熱されたら、はんだを当てます。
・はんだを離した後、はんだごてを離します。

適切な道具を用いて、両手をはんだとはんだごてを持ち、狙いを定めて速やかに行うことが大切です。

と言う訳で、救世主のUSBコネクタDIP化キットを追加してみます。

画像1

ここでひとつ問題が発生しました。

配線がブレッドボードに収まらなくなりました。

ミニサイズのブレッドボードに配線を行っていましたが、ホールの数が足りなくなってきました。

ブレッドボードをひとまわり大きくして、再度配線を行いました。

画像2

画像3

これで、電力不足から解消されて、うまく動くはずです。と、思ったのですが、

テスト結果は変わらず。

何が何かさっぱりわかりません。
投げ出したくなる気持ちをグッと抑えてひとつずつのパーツについて、確認していくことにしました。

サーボはこの前あれこれ確認していたので、後回しにして、リレーのテストから始めることにしました。まずは配線の状態を確認します。。。

なんと、配線がでたらめでした。

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が明るく光りました。

画像4

画像5

   digitalWrite(23, HIGH);
   delay(1000);
   digitalWrite(23, LOW);
   delay(1000);

4「カチッ」、「カチッ」と2回音を立てて、リレーが動き出しました。
ようやくです。ここまでが、とてもとても長い道のりでした。

気をよくして、次のテストに移りました。
リレーの先に、モーターを付けます。
これは本来であれば、外部電源で供給した方がよいと言われている所、でも、もうここまで来たら、行けるところまでチャレンジしてみよう。と試してみることにしました。

画像6

最初、接触不良でうまく動作していませんでしたが、ちょっと振ってやると、動くようになりました。

ただ、ちょっと挙動がおかしいです。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秒
排水弁を開く
待機:10MOISTURE LEVEL:1306.80
待機:10MOISTURE LEVEL:663.80
待機:10MOISTURE LEVEL:254.40
待機:10MOISTURE LEVEL:52.00
待機:10MOISTURE LEVEL:0.00
待機:10MOISTURE LEVEL:0.00
待機:10MOISTURE 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化 #水分計

この記事が気に入ったらサポートをしてみませんか?