SmartWay
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
概要
親はいつも子供たちのことを心配しています。親は、子供たちが時間通りに学校に到着し、割り当てられた道をたどって時間通りに家に帰ることを望んでいます。
SmartWayは、親の日常生活からこの心配を取り除くことを目的としています。 SmartWayは、お子様が学校に出入りするときにお子様を監視し、お子様が目的地である学校に到着するために常に適切な経路をたどることを確認します。
SWayは、GPSを使用してお子様のジオロケーションを監視し、お子様が割り当てられたパスから逸脱した場合、すぐに保護者に電子メールを送信します。 SmartWayはまた、子供が家に到着したとき、または学校に到着したときに親に電子メールを送信し、子供が遅れているかどうかを通知します。このようにして、親は子供が学校や家に無事に到着することを知って、座ってコーヒーを楽しむことができます。
機能性
SmartWayは、お子様が目覚めたときから帰宅したときまで、お子様の地理的位置を継続的に監視します。このデバイスには、RGB LEDと振動モーターも装備されており、子供が学校に正しく進まない場合や遅刻した場合に警告し、子供が学校に到着したときに祝福します。
このデバイスは、お子様の安全を確保するために多くの機能を実行します。
- 最初のループ
if(off track)
子が割り当てられたパスから逸脱したかどうかを検出します。デバイスには、これが発生した回数を検出するシステムがあります。お子さんが初めてコースから外れた場合、デバイスはLEDを赤くしてモーターを振動させることで警告を発し、その後2分でコースに戻ります。子供がさらに2分間コースから外れた場合、親は子供がコースから外れたことを警告する電子メールとその地理的位置を受け取ります。この電子メールは、子供が到着するまで2分間隔で受信的に送信されます。自宅または学校で。 -
if(学校の時間)
およびif(home time)
ループは学校と家の時間かどうかを検出し、デバイスは子供が学校または家に到着したかどうかをチェックします。子供が時間内に到着した場合、LEDは緑色に変わり、デバイスは親にそのことを知らせる電子メールを送信します。子供は到着時間と一緒に目的地に到着しました。それ以外の場合、学校が始まる時間であり、子供が学校にいない場合も、
デバイスは12バイの情報しか送信できないため、送信時にはコンパクトなパケットが必要です。その他の変数は、SigFoxバックエンドで構成されます。
デバイスが送信できるパケットは4つあります
- 子供はコース外です-(「コース外」)
- 子供が家に到着しました-(「家に」)
- 子供が学校に到着しました-(「学校で」)
- 子供が遅れている-(「遅い」)
警告システム
デバイスを身に付けている子供は、学校に到着したとき、家に到着したとき、目的地に到着するのが遅れたとき、またはコースから外れたときはいつでも警告を受けます
動作中のデバイス
メリット
このデバイスを使用している保護者のメリットは次のとおりです。
- 子供が学校に安全に出入りできるようにする
- 子供がこれらの場所に時間厳守で到着することを確認してください
- もちろん子供が逸脱しないようにする
- 省エネと低コスト-長持ちするバッテリー
プロジェクトの構築
ステップ1:必要な装置
プロジェクトの作成を開始するには、資料を収集する必要があります。このプロジェクトには、次のものが必要です。
- ジャンパー線
- 1、NPNトランジスタ
- 1、セラミックコンデンサ(0.1µF)
- 3、抵抗器(220Ω)
- 1、抵抗(1KΩ)
- 1、RGB LED
- 1、GPSモジュール
- 1、振動モーターセル
- 1、ArduinoMKR1200フォックス
- 1、2x AAA / AAバッテリーボックス
- 2、単三電池
ステップ2:回路を接続する
次のステップは回路を接続することです。以下のフリッツ画像は、これがどのように行われるかを示しています。配線には複数の部分があるため、異なる画像に分割されます。
ステップ3:コードの確認
コードは複数の関数で構成されており、各関数はプロジェクトの構成において特定の役割を果たします。
- 警告システム
- GPSを取得
- 同期RTC
- プロセスの場所
- パッケージを送信
- アクションを実行する
これらのセクションについては、以下で説明します。
- 警告システム
void setOutputs(){pinMode(R、OUTPUT); pinMode(G、OUTPUT); pinMode(B、OUTPUT); pinMode(motorPin、OUTPUT);} void vibrateMotor()//モーターセルを振動させる{digitalWrite(motorPin、HIGH); delay(1000); digitalWrite(motorPin、LOW);} void ledGreen()// LED、Green {analogWrite(R、0); analogWrite(G、255); analogWrite(B、0);} void ledOrange()// LED、オレンジ{analogWrite(R、255); analogWrite(G、45); analogWrite(B、0);} void ledRed()// LED、赤{analogWrite(R、255); analogWrite(G、0); analogWrite(B、0);} void resetLED()// LEDをオフにします{analogWrite(R、0); analogWrite(G、0); analogWrite(B、0);}
コードのこのセクションは、 functions.h
にあります。 ファイル。コードは、現在の状態でデバイスを着用している子供に通知します。全体として、これらのループはRGBLEDと振動するモーターセルを制御します。
- GPSを取得
bool getGPS(int run){while(Serial1.available()> 0){if(gps.encode(Serial1.read())){if(run ==1){processData(); } else if(run ==2){synchRTC(); } if(gps.location.isValid()&&gps.time.isValid()&&gps.date.isValid()){trueを返す; } else {falseを返す; }}} if(millis()> 10000 &&gps.charsProcessed()<10){Serial.println( "エラー-GPSモジュールがエラーで応答しました"); Serial.println( "終了コード"); Serial.println( "________________________________________"); while(1){}; }}
これは、GPSモジュールから位置と時刻を受信するためのループです。このループが行うことは3つあり、 setup loop
で使用されます。 GPSを同期するために、オンボードRTCをGPSに同期するために使用され、メインループでデバイスのジオロケーションを取得するために使用されます。
- 同期RTC
void synchRTC(){Serial.println( "Synching RTC"); Serial.println( "________________________________________"); Serial.println( "OK-RTCの初期化"); rtc.begin(); Serial.println( "OK-同期時間"); //変数の最初の2桁をトリミングする必要があります(2018-> 18)uint16_t yearRAW =gps.date.year();文字列yearString =String(yearRAW); yearString.remove(0,1); uint16_t year =yearString.toInt(); rtc.setTime(gps.time.hour()、gps.time.minute()、gps.time.second()); rtc.setDate(gps.date.day()、gps.date.month()、year); Serial.println( "成功-RTC同期"); Serial.println( "________________________________________"); Serial.println( ""); Serial.println( ""); Serial.println( "");}
コードのこのセクションは、オンボードRTCをGPSモジュールから受信した時間に同期し、最初にGPSモジュールからデータを読み取り、次にそれを処理します。次に、ループはオンボードRTCの現在の時刻を受信した時刻に設定し、RTCを開始します。
- プロセス 場所
bool processData(){if(gps.location.isValid()){緯度=gps.location.lat();経度=gps.location.lng();緯度=53.355504;経度=-6.258452; if(check.isOut()){if(check.track()){Serial.println( "OUT OF BOUNDS"); warn.offTrackLoop(); }} if(check.isHomeTime()&&ArrivedSchool){if(check.isHome()){Serial.println( "AT HOME"); warn.arrivedHomeLoop(); } else {Serial.println( "LATE-> HOME"); warn.lateLoop(); }} else if(check.isSchoolTime()&&arrivedHome){Serial.println( "。"); if(check.isSchool()){Serial.println( "AT SCHOOL"); warn.arrivedSchoolLoop(); } else {Serial.println( "LATE-> SCHOOL"); warn.lateLoop(); }} else {Serial.println( "ON WAY"); }}}
このループは、デバイスの場所を処理し、それを現在の時刻と比較して、この時点で子がどこにあるべきかを確認します。その後、結果に基づいて適切なアクションを実行します。
- 行う アクション
struct Do {void offTrackLoop(){if(offTrackVar){parseData(0); } vibrateMotor(); ledRed(); delay(1000); vibrateMotor(); resetLED(); offTrackVar =true; delay(120000); } void lateLoop(){if(!lateVar){parseData(1); } vibrateMotor(); ledOrange(); delay(1000); resetLED(); lateVar =true; } voidarrivedHomeLoop(){lateVar =false; offTrackVar =false; vibrateMotor(); ledGreen(); delay(1000); resetLED(); parseData(2);到着したホーム=true;到着した学校=false; } voidarrivaldSchoolLoop(){lateVar =false; offTrackVar =false; vibrateMotor(); ledGreen(); delay(1000); resetLED(); parseData(3);到着したホーム=false;到着した学校=true; }};
この構造体は、プロセスの場所によって指定された応答に対してアクションを実行するために呼び出されます。 RGBLEDと振動するモーターセルを切り替えることを子供に警告します。また、必要に応じてパッケージをSigFoxに送信します。
- 送信 パッケージ
void parseData(int state){SigFox.beginPacket(); //メッセージ送信プロセスを開始しますif(state ==0)//オフトラック{SigFox.print( "off track"); //メッセージを送信します} else if(state ==1)// late {SigFox.print( "late"); //メッセージを送信します} else if(state ==2)//ホームに到着しました{SigFox.print( "at home"); //メッセージを送信します} else //学校に到着しました{SigFox.print( "at school"); //メッセージを送信します} SigFox.endPacket();}
この関数はデータをSigFoxに送信し、パケット送信が開始されてから、適切な値が解析されます。
変数の設定
コードには複数の変数が含まれ、その後にコメントとしてTODOが記述されます。これらの変数はクライアントに合わせてカスタマイズする必要があり、クライアントはセットアップを求められます
- 学校の時間
- 子供が旅行するのにかかる時間
- 学校が終了する時間
- デバッグしますか?
- 学校のジオロケーション(LAT、LNG);
- ホームジオロケーション(LAT、LNG);
以下のガイドでは、変数の設定について説明しています。
ライブラリ
SigFox-copyright(c)2016 Arduino LLC GNU Lesser General PublicLicenseこのライブラリはパブリックドメインにあります
ctype-copyright(c)GNU General PublicLicenceに基づく2006Free Software Foundation、このライブラリはパブリックドメインにあります
RTCZero-copyright(c)2015 Arduino LLCは、GNU劣等一般公衆利用許諾契約書に基づいており、このライブラリはパブリックドメインにあります
文字列-copyright(c)2009-10 Hernando Barragan、copyright(c)2011 Paul Stoffrengen under the GNU Lesser General Public Licence、this library is in the public domain
TinyGPS ++-copyright(c)2008-13 GNU Lesser General PublicLicenceに基づくMikalHart、このライブラリはパブリックドメインにあります
セットアップ
回路が正しく配線されていることを確認してください。 MKR foxの設定の詳細については、ここをクリックしてArduinoチュートリアルを参照してください。 Arduino SigFoxライブラリについて詳しく知りたい場合は、ここをクリックしてください。
バックエンドプログラム
バックエンドをプログラムするには、Arduino MKR1200foxが登録されている必要があります。
- ステップ1
SigFoxバックエンドを開き、SigFoxアカウントにサインインします。
- ステップ2
ページ上部のドロップダウンメニューで[デバイスタイプ]をクリックします
- ステップ3:
Arduino MKRfoxを選択し、[編集]をクリックします
- ステップ4:
左側のメニューからコールバックを選択し、右上隅の[新規]ボタンに移動します。
- ステップ5:
[新規]をクリックすると、いくつかのコールバック構成オプションが表示されます。[カスタムコールバック]をクリックします
次にウィンドウが開きます。コールバックを作成するには、指定されたフォームに入力する必要があります
最後に、メッセージは次のようになります。
[OK]をクリックすると、すべて設定されます。
最終
最後に行う必要があるのは、以下のコードをアップロードして、「TODO」とマークされた変数を好みに合わせてカスタマイズしたことを確認し、GOSモジュールの青いライトが点滅するのを待ってから、マイクロコントローラーをコンピューターから切断します。バッテリーボックスにバッテリーを入れます。これで準備は完了です。
デバイスを安全に保ち、魅力的に見えるようにエンクロージャーを設計しました。2枚のアクリルを使用し、90度に湾曲したエッジを溶かしました。すべての回路を内部に配置し、バッテリーボックスをその下に配置してから、2本のケーブルタイを使用してプラスチック片をストラップで固定しました。
最後に、上部の一部(透明なカバー)を覆って、すべてのワイヤーを見えなくし、プロジェクトの頭脳だけが見えるようにしました。
背景
私は個人的に、子供を学校に通わせるという単純なタスクを実行することがどれほどストレスになるかを知っています。子供が学校に行くときに起こりうるすべてのことについて、誰もが心配しています。
このプロジェクトは、子供を学校に通わせるときにストレスを感じるすべての人々を対象としています。 SWayを使用すると、お子様が安全に学校に到着することを知って、リラックスすることができます。
コード
SmartWay
完全なコード カスタムパーツとエンクロージャー
デフォルトではFritzingに含まれていません 回路図
全体的な_WZeRYkIUCF.fzz 製造プロセス