みなさんは覚えていますでしょうか?近所でどんちゃん騒ぎする外国人のことを。。
愚痴っぽくなっちゃいますが、生活を邪魔されてるので何度も通報して注意してもらってたんですが一向に改善されない。
ということで引っ越しを決心しており、ついに引っ越し先が決まりました!
このコロナ禍で生活拠点を変えるというのは決して褒められた話ではないんですが、このまま住み続けてたらメンタル持っていかれそうな雰囲気が出ていたので苦肉の策です。
無事引っ越しが終わりましたら勝手に報告すると思いますが、引っ越しに伴い荷物整理やら手続きやらでバタバタするので一時的に作業が停滞するかもしれません。
お許しを。。
こんにちは、ポニ丸です。
今回はとりあえずブレッドボードに組んだハードが動くことを目的にしたファームを組んで動作確認をおこなってゆきます。
ソフト仕様
ざっくりしたソフト仕様が以下です。
- トグルスイッチに接続されたピンのレベルをチェックし、回転方向を検出する。
(19pinが正回転、21pinが逆回転のスイッチとし、HighがON状態とする。) - どちらかに回転する状態であれば半固定抵抗が接続されたA/Dピンに入力されたアナログ値をPWM信号のonDutyに変換する。
- モータ出力ピンの回転方向側のピンへPWM信号を、逆方向側のピンへLowを出力し、モータドライバを介してモータを回転させる。
- 1~3をループする。
やること自体はそんな複雑なことはやってません。
最終的にはBLEやら入ってくるんですが、まずは回路が正しく動作するかのチェックなのでこれでOK!
開発環境
開発環境はざっくりこんな感じです。
項目 | 名称 | バージョン |
---|---|---|
IDE/エディタ | Arduino IDE | 1.8.13 |
言語 | C++ | – |
コンパイラ | AVR-GCC | 7.3.0 |
比較的簡単に開発できそうなArduino IDEを使うことにしました。
言語は色んなものに対応して要るっぽいんですが、今回はC++を使って各機能をクラス化することでこの先のプロジェクトでも流用しやすくしようと考えてます。
ソースコード
ちゃちゃっと進めちゃいますが、今回作ったソースコードがこれです!
「xxx_module」と名付けているのがクラスを定義したパーツです。
今回はスイッチ、A/D、モータの3つをクラス化し、メインプログラムとなるsmart_curtain.inoにてインスタンス化してloop()関数で処理させるっていう感じにしてます。
ソースが縦にバーって表示されてしまって見づらいと思います。すみません。
上の方にタブが出てきて選択したファイルだけ見られるようにしたいなと思ったんですが、まだ技術が足りておらず。。
今後勉強して改善していきますが、どなたか助言をいただけると非常に助かります。
動作チェック
さてさて目的の動作チェックのお時間です。
書き込みボードを接続してhexを書き込んだのち、電源ONした際の動画がこちらです!!
やったー!動きましたー!
とりあえず大丈夫そうだということでブレッドボードを卒業してユニバーサル基板に半田付けをやっていこうと思うのですが、運用であったりを考えて多少回路のお直しが入ります。
- ENピン、IO0ピンそれぞれにプッシュスイッチを取りつけ、RESETやモード切替を基板単体で行えるようにする。(アクティブLow)
- トグルスイッチはボード上についていると回路がある場所(カーテンの回転軸想定)まで手を伸ばす必要があり使い勝手が悪いため、ケーブルを出してての届きやすい場所に来るようにする。
- BLE等のデバッグ用に一つLEDを追加する。
あと、ファームを書き込むために書き込みボードを毎回つけ外しするのが面倒というのがあるのでスペースに余裕があればUSB-シリアル変換ボードも載せてしまってUSBケーブルだけさせばOKにした方がいいかも。。とも思っています。
次回は、回路修正と半田付けをやっていきます!
ここだけの話、動画でお見せしているファームを書きこんだ後、消費電流の関係から書き込み回路(USB)からの電源供給ではなくACアダプタからの供給に変えないといけないんですが、うっかりそのままモータを回してしまい書き込みボードが天に召されました。やってもたー。。
そのへんの対策も考えておきます。
ではでは。
コメント