Khabrovchan prostosergikが投稿したNew Year's Raspberry-HD44780スクリーンをRaspberry Piに固定します 。 私とprostosergikの間のコメントで、これらのタスクにRaspberry Piを使用することの妥当性について紛争が生じました。 prostosergikはコメントで、Raspberry Piの完成した学校通話プロジェクトについてコメントしました。
リモコン付きのRaspberry Piのポストスクールベルは、後に公開されました。 次に、このタスクを実装する番です。
連絡の結果、彼は次のTKを形成しました。
目的:教育機関での学校呼び出しのスケジュールに従って呼び出しを含める
操作のメカニズム:接点リレーの信号「1」に従って呼び出しが行われます。 リレーが閉じると、ベルが鳴ります。
必要条件
- Webインターフェイスを介して通話のスケジュールを変更する機能
- インターネットからのNTPサーバーとの時刻同期
- 「工場」設定へのリセットボタンの存在
- 通話時間は変わらず、常に5秒
- 安全性 システムを制御できるIPアドレスのリストを定義します。 ログイン/パスワードによるログイン(実装されていませんでしたが、技術的には可能です)
- 営業日ごとのタイムスケジュールコール、同じ
- いつでもボタンを呼び出す
実装
Arduino UNO R3の技術的な制限のため、このプロジェクトを完全に実装することは不可能でした。
コントローラーを選択するときは、次のルールに従ってください。
- Arduino互換のシールドと作業方法論。
- あらゆる症状におけるLinuxの欠如
- 手頃な価格
- 業界セグメント向けではありません
タイトルには、偶然ではなくFEZ Dominoが記載されていません。 .NET Micro Frameworkで実行されているマイクロコントローラー間のプログラムコードは、バージョンに応じて、ほとんど変更なしで常に移植可能です。 この場合、FEZ Dominoは、機能を犠牲にすることなく、 NET Duino Plus 2ボードに簡単に交換できます。
使用されるコンポーネントのリスト:
- FEZ Dominoデバッグボードまたは同等のもの
- リレー -電話をかけるため
- LED-通話が行われると点灯します
- ボタン -工場設定にリセットします
- ボタン-手動呼び出し
- LCD 2行 -サービス情報の表示
- SDカード-8 GB
- 接続シールド -接続ボタン、LCD、リレー、LED
- イーサネットシールド -ローカルエリアネットワーク
すべてのコンポーネントは、 Aliexpress.comで購入することができ、かなり安くなります。
FEZ Domino仕様:
- ArduinoとArduino互換ピン
- 72Mhz 32ビットARM7 LPC2388プロセッサー
- USBizi-144チップセット
- 〜148KBの使用可能なフラッシュメモリ
- 〜62KBの使用可能なRAM
- USBホストポート(USBハブ、ジョイスティック、キーボード、マウス、プリンター、CDC、仮想シリアルインターフェイスなど)
- USBクライアントポート(デバッグ用、オプションでキーボード、マウス、またはCDCエミュレーション用)
- MicroSDメモリカードのサポート(SDHCサポート、4ビットSDバス、2GB以上のサポート、microSDHC 8 GBクラス10トランセンドが正常に使用されました)
- RTCリアルタイムクロック
- イーサネットシールド(WIZnet W5100チップ)を使用したTCP / IPサポート
- 30個のプログラム可能なIO
残念ながら、FEZ Dominoは長い間廃止されているため、以下が最も近いアナログです
配線図
デバイスの写真:
平面図
Fez Dominoバンドル、イーサネットシールド、I / O拡張シールド、スタックモード
Fez Dominoバンドル、イーサネットシールド、I / O拡張シールド、スタックモード
デバイスの起動
起動時に、デバイスがフリーズした場合に備えて、WatchDogが20秒間インストールされます。
//Enable Watchdog GHI_LowLevel.Watchdog.Enable(1000 * 20);
リセットカウンター
GHI_LowLevel.Watchdog.ResetCounter();
ボタン割り込みの初期化
// FEZ_Components.Button Button_ManualCall = new FEZ_Components.Button(FEZ_Pin.Interrupt.Di5); // FEZ_Components.Button Button_HardReset = new FEZ_Components.Button(FEZ_Pin.Interrupt.Di6); // Button_ManualCall.ButtonPressEvent += new FEZ_Components.Button.ButtonPressEventHandler(Button_ManualCall_ButtonPressEvent); // Button_HardReset.ButtonPressEvent += new FEZ_Components.Button.ButtonPressEventHandler(Button_HardReset_ButtonPressEvent);
次に、スタンバイモードが5秒に設定され、デフォルト設定がリセットされます。 LEDが点灯し、「Starting ...」画面のテキストが表示されます。
SDメモリーカードからの設定の読み取り
// appset = new AppSettings(); appset.ReadSettings();
ネットワークの初期化
netinter = new netinteface();
RTCから時間を読み取ります。 RTCはチップに統合されています。 クロックの進行を保証するには、v3.3バッテリーを接点に接続する必要があります
Utility.SetLocalTime(RealTimeClock.GetTime());
NTPサーバーとの時刻同期ストリームを開始します。 同期間隔は設定で設定されます。
Thread ThreadUpdateTimeNTP = new Thread(UpdateTimeNTPThread); ThreadUpdateTimeNTP.Start();
コールフローの開始。 現在の時刻と呼び出しの時刻を比較します。 偶然の場合、それは鳴ります。
Thread ThreadTimeBells = new Thread(TimeBells); ThreadTimeBells.Start();
Webサーバーの起動
Webserver server = new Webserver();
. string[] confstr = {appset.SyncTimeDelayMin.ToString(), appset.CurTimeBell[0].ToString("HH:mm"), … appset.CurTimeBell[7].ToString("HH:mm")}; server.StartServer(confstr);
実装機能
Arduino UNOは、次の理由でほぼ即座に放棄されなければなりませんでした。
同時に、ネットワークおよびSDカードの操作はサポートされていません。 Ladyada Arduino Ethernet + SDには実装がありますが、開始できませんでした。
Arduinoは、2つの並列スレッドまたは2つの割り込みをサポートしています。
私の実装では、4つのストリームが判明しました。手動呼び出し配信のボタンの中断、NTPサーバーとの同期、呼び出しが行われた時間を追跡するためのスレッド、httpサーバーのサービスフローです。 Arduino UNOの場合、これは多すぎます。
Raspberry piのプロジェクトと比較して、Watchdogサポートの実装の容易さ。
残念ながら、物理的なイーサネットデータ伝送メディアの存在の監視は機能しません(デバイスがスイッチに接続されているかどうかを判断することは不可能です)。 物理的な中断が発生した場合、ネットワークを初期化する必要があります。 この問題を解決するオプションとして、ネットワーク上のノード(IPアドレス)を定期的にポーリング(ping)します。 応答がない場合は、ネットワークを再初期化します。 しかし、これはFEZ DominoマイクロコントローラーのCLRの欠陥です。
通話時間の追跡は、2番目の精度で行われます。 「不在着信」の状況を解消するために、以前の時間と新しい時間が保存されます。 「コールのスキップ」の状況は、プログラムコードの実行に費やされた時間とストリームの一時停止(1秒)により発生します。
public static void TimeBells() { string NowLocalTime = ""; DateTime NewTime; DateTime OldTime = DateTime.Now.ToLocalTime(); OpredCallZvon ocz; while (true) { // NewTime = DateTime.Now.ToLocalTime(); // NowLocalTime = NewTime.ToString("HH:mm:ss"); // foreach (DateTime dt in appset.CurTimeBell) { ocz=new OpredCallZvon(NewTime,OldTime,dt); if (ocz.isCall) { LCD.setCursor(0, 1); LCD.print("NOW ZVONOK "); RunBell(); } } OldTime = NewTime; Thread.Sleep(1000); } }
呼び出し時、LEDは点灯しています。
RTCは組み込みです。 VBAT INおよびグラウンドピンに電力を供給すれば十分です。
単純化するために、htmlページテンプレートがプロジェクトのリソースに配置されました。
使用されているライブラリ:
- Webサーバー。 Daveの PandaベースのWebサーバー
- NTPサーバーとの時刻同期。 Nicolas3のWiz5100のNTP時間 調整
- 驚きは、Net Micro Frameworkのサブストリング内のストリングの置換の欠如でした。 William String.Replace()ライブラリ
実装には3日x 4時間= 12人時間かかりました。
時々、HTTP要求で、RAMの超過について例外がスローされました(〜62KB)。 このため、新しい設定はオンラインではなく再起動時にのみ適用する必要がありました。
原価見積
いや | 役職 | 数量 | 価格 | 金額、$ |
1 | Netduino Plus 2 | 1 | 59.95 | 59.95 |
2 | リレーモジュール | 1 | 1.74 | 1.74 |
3 | RGB 3色フルカラーLED任意の色 | 1 | 1.99 | 1.99 |
4 | 標準ボタンスイッチセンサーモジュール | 2 | 1.29 | 2,58 |
5 | LCDモジュールブルースクリーンIIC / I2C 2004 5V | 1 | 7.6 | 7.6 |
6 | MicroSDカード | 1 | 3.14 | 3.14 |
7 | 取り付けの基礎、ワイヤー | 1 | 10 | 10 |
合計 | 87 |
ビデオ:
スクリーンショット:
コード:
FEZ_Domino_Zvonok.zip