工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

パブロフ猫

コンポーネントと消耗品

>
Arduino MKRIoTバンドル
× 1

アプリとオンラインサービス

テレグラム

このプロジェクトについて

注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。

あなたが猫を訓練しようとしたことがあるなら、あなたはそれがどれほど難しいか知っています。猫は彼ら自身のマスターですが、今ではこのIoT対応デバイスを使用して猫に入札を任せることができます。

パブロフの猫実験へようこそ!

このプロジェクトでは、MKR IoTバンドルのコンポーネントといくつかの段ボールだけを使用して、夕食の時間である(そしてそうでない)ときに猫に教える方法を学びます。

そして、猫はすでに段ボール箱を愛していることを私たちは皆知っています!

猫は特定のメロディーを聞くたびに餌を受け取ります。光センサーが猫の存在を検出します。別のメロディーは何もしません。これがどのように機能するか見てみましょう。

あなたは時間の経過とともにあなたの猫の進行を監視し、あなたの電話から食物分配率を設定することができるでしょう。満足のいく統計に達したら、センサーをウェアラブルに転用します。あなたがそのビープ音を鳴らしたら、あなたの猫はそれ以降あなたに従うべきです。

免責事項:この実験の開発で猫が怪我をしたことはありません。また、猫が食べ物を食べるという保証はありませんが、あなたは写真を手に入れますよね?

一言で言えば

これらの簡単なステップバイステップの手順に従うことで、独自のフードディスペンサーを構築することができます。ディスペンサーは基本的に、いくつかの段ボールと、Arduinoの魔法が追加されたサーボモーターです。

Telegramと呼ばれるメッセージングサービスを使用して、分配する食品の量を設定し、ブザーで演奏されるメロディーをトリガーすることができます。

光センサーは、猫がメロディーに反応して食べ物に到達したかどうかを検出するために使用されます。

上級者向けのヒント: MKR1000でWebページをホストし、収集したデータを便利なテーブルに表示できます。

コンポーネント

  • サーボモーター
  • フォトトランジスタ
  • 220オームの抵抗器
  • ブザー
<図>

学習目標

この実験では、次の方法を学習します。

  • カスタムキーボードを使用してテレグラムボットを管理する
  • MKR1000自体からWebサーバー機能をセットアップおよび管理します。 #ProTip

プロのヒント 便利ですが、プロジェクトに複雑さの層を追加する厳密に必要な手順ではありません。

もっと知りたいですか?

このチュートリアルは、MKR1000とIoTに慣れるための一連の実験の一部です。すべての実験は、MKRIoTバンドルに含まれるコンポーネントを使用して構築できます。

  • I Love You Pillow
  • パズルボックス
  • パブロフの猫
  • オタク
  • プラントコミュニケーター

電報とArduino

Telegramは、モバイルとデスクトップの両方で人気のあるメッセージングアプリです。友達とチャットできるだけでなく、便利で強力なチャットボットを作成することもできます!

Arduino用のTelegramBotライブラリは、チャットボットの背後にあるロジックを実装する簡単な方法を提供します。

ボットの作成方法と基本的な機能の管理方法については、I Love YouPillowチュートリアルをご覧ください。

カスタムキーボードを作成する

Telegramを使用すると、高速応答用のカスタムキーボードを作成できます。これは、ボットと話すときに、デフォルトのキーボードの代わりに特定のボタンの選択が表示されることを意味します。これらのボタンを簡単にカスタマイズして、デバイスのユーザーエクスペリエンスを向上させることができます。

カスタムキーボードは次のようになります:

<図>

最初の列のボタンを使用してメロディーを再生し、食べ物を分配します。2列目のボタンを使用して、サーボモーターの速度を設定し、したがって、分配する食物の量を設定します。

カスタムキーボードを作成するには、最初にそれを宣言する必要があります:

  TelegramKeyboardkeyboard_one;  

次に、行を定義します:

  const char * row_one [] ={MusicAndFood、MusicNoFood}; const char * row_two [] ={OnePortion、TwoPortion、ThreePortion};  

最後に、行をキーボードに割り当てます:

  Keyboard_one.addRow(row_one、2); // 1つ以上のキーボードに行を割り当てますkeyboard_one.addRow(row_two、3); // 2番目の引数は行の長さです 

絵文字はUNICODEを使用して送信する必要があることに注意してください。たとえば、ハートの絵文字を送信するには、 \ U00002764 を使用します。

ここでUnicode絵文字コードの完全なリストを見ることができます。これは、ボタンを定義するためにこれを使用することを意味します:

  const char * MusicAndFood ="\ U0001F3B6 + \ U0001F36A"; //注+ Cookie const char * MusicNoFood ="\ U0001F3B6 NO \ U0001F36A"; // Cookieがないことに注意してくださいconstchar * OnePortion ="\ U0001F408"; // CAT const char * TwoPortion ="\ U0001F408 \ U0001F408"; // 2 CATS const char * ThreePortion ="\ U0001F408 \ U0001F408 \ U0001F408"; // 3つのCATS  

完全なスケッチは次のとおりです:

  #include  #include  #include  const char * ssid =SECRET_SSID; //ネットワークSSID(名前)const char * password =SECRET_PSWD; //ネットワークパスワードconstchar BotToken [] =SECRET_BOT_TOKEN; WiFiSSLClientクライアント; TelegramBotボット(BotToken、クライアント); TelegramKeyboardkeyboard_one;文字列OldChatId =""; void setup(){Serial.begin(115200); delay(3000); // Wifiネットワークへの接続を試みます:Serial.print( "Connecting Wifi:"); Serial.println(ssid); while(WiFi.begin(ssid、password)!=WL_CONNECTED){Serial.print( "。"); delay(500); } Serial.println( ""); Serial.println( "WiFi接続"); // UNICODEを使用して好きな絵文字を選択します//リストは次のとおりですhttps://unicode.org/emoji/charts/full-emoji-list.htmlconst char * MusicAndFood ="\ U0001F3B6 + \ U0001F36A"; //注+ Cookie const char * MusicNoFood ="\ U0001F3B6 NO \ U0001F36A"; // Cookieがないことに注意してくださいconstchar * OnePortion ="\ U0001F408"; // CAT const char * TwoPortion ="\ U0001F408 \ U0001F408"; // 2 CATS const char * ThreePortion ="\ U0001F408 \ U0001F408 \ U0001F408"; // 3 CATS //行のconstchar *を定義しますrow_one [] ={MusicAndFood、MusicNoFood}; const char * row_two [] ={OnePortion、TwoPortion、ThreePortion}; Keyboard_one.addRow(row_one、2); // 1つ以上のキーボードに行を割り当てますkeyboard_one.addRow(row_two、3); // 2番目の引数は行の長さですbot.begin(); } void loop(){メッセージm =bot.getUpdates(); //新しいメッセージを読みますif(m.chat_id!=0){//更新があるかどうかを確認しますOldChatId =m.chat_id; Serial.println(m.text); bot.sendMessage(m.chat_id、 "Hello!"、keyboard_one); } delay(1000); }  

残念ながら、ボットが絵文字を送信する方法は、絵文字を受信するために使用される方法とは異なります。 EchoBotの例を使用すると、ボットが絵文字を受け取る方法を簡単に確認できます。

たとえば、使用する絵文字は次のように受信されます:

  ud83cudfb6 //メロディud83cudf6a // Cookieud83dudc08 //猫 

猫を探せ!

猫の存在を検出するために、光の強度を測定できるフォトトランジスタを使用します。これにより、誰かが猫の近くを通過したかどうかを測定できます。

<図>

220オームの抵抗を使用したことに注意してください。

センサーから値を読み取るには、 analogRead(A6)。のみが必要です。

猫の存在をメロディーの後でのみ検出することに関心があるため、一定の時間だけ、次のロジックを使用できます。

  unsigned long timer; bool startDetecting =true; int threshold =200; //任意の値voidsetup(){timer =millis()Serial.begin(9600);} void loop(){if(startDetecting){int value =analogRead(A6); if(value  120000){Serial.println( "過去2分間に猫が検出されませんでした"); startDetecting =false; }}}  

使用することに注意してください millis() タイマーを設定する関数 Millis() ボードが稼働してからの時間をミリ秒単位で示します。これを使用して、タイマーを設定し、一定時間後にイベントをトリガーできます。

しきい値も使用します 猫が検出されたかどうかを判断します。そのしきい値は任意であり、光の状態に応じて設定できます。

曲を再生する

曲を再生するには、ブザーと tone()を使用します 機能。

<図>

標準の例 toneMelodyのわずかに変更されたバージョンを使用します。 ドロップダウンメニューで見つけることができます:

 例>デジタル> toneMelody。 

サーボモーターを追加する

サーボは箱を開けて食べ物を届けるために使用されます。

変数 int PortionAmount =1; を使用していることに注意してください サーボを90度回転させたままにする時間を設定します。 Telegramを介してその値を変更できるようになります。

サーボをピン7に取り付け、このスケッチをアップロードして、動作を確認します。

  #include  Servo myservo; //サーボオブジェクトを作成してサーボを制御しますintpos =0; //サーボ位置を格納する変数intPortionAmount =1; //デフォルトの食物量を1つの部分に設定しますvoidsetup(){myservo.attach(7); //ピン6のサーボをサーボオブジェクトに接続します} void loop(){moveServo(); delay(2000); } void moveServo(){Serial.println( "movingservo"); for(pos =0; pos <=90; pos + =1){// 0度から90度になりますmyservo.write(pos); //サーボに変数 'pos' delay(15);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します} delay(PortionAmount * 300); //配達したい食べ物の量に基づいて、一定時間ボックスを開いたままにします(pos =90; pos> =0; pos- =1){// 90度から0度になりますmyservo.write( pos); /サーボに変数 'pos' delay(15);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します}}  

#ProTip:Webサーバーを追加する

MKR1000の最も強力な機能の1つは、アクセスポイントモードです。

ボードのIPアドレスを使用して同じネットワークに接続することでアクセスできるMKR1000上のWebページをホストできます

このツールを使用して、フードディスペンサーによって収集されたデータを印刷します。

<図>

この手順には、HTMLとCSSの基本的な知識が必要です (または、スケッチの例には多くの信頼があります。基本的なWebサーバーの例は次の場所で確認できます:

 >例> WiFi101> AP_SimpleWebServer  

特定の単語を送信することでアクセスポイントモードをトリガーします テレグラムボットに送信します。テレグラムボットは、 Webページにアクセスするためのリンクを返信します。 次に、テレグラムクライアントが切断され、 Webサーバーが起動します。

  else if(m.text =="Server"){IPAddress ip =WiFi.localIP(); web_server_mode =true; String message ="Webページを表示するには、http://にアクセスしてください" + IpToString(ip); bot.sendMessage(m.chat_id、message、keyboard_one); telegram_client.stop(); delay(1000); server.begin(); //ポート80でWebサーバーを起動します}  

Webページには、Webサーバーモードをオフにしてテレグラムクライアントとして戻るボタンが含まれています:

  if(currentLine.endsWith( "GET / BACKBUTTON")){//ボタンが押された場合web_server_mode =false; client.stop(); delay(1000); bot.begin(); bot.sendMessage(OldChatId、 "Back online!"、keyboard_one); }  

猫の検出が終了するたびに、テーブルの新しいセルが追加されます 収集されたデータを使用:餌が配達された場合、猫が2分以内に現れた場合、およびディスペンサーに到達するまでにどのくらいの時間がかかりましたか。

  AddTableCell(food / noFood、Yes / No、TimeValue);  

次に、すべてのテーブルセルを含む文字列が更新され、残りのメインHTMLに統合されます。

  table_cells + =cell; //新しいセルを追加しますhtml =html_1 + table_cells + html_2; //メインのHTMLにセルを追加します 

これらの新しい機能をすべて統合する方法については、Proの最後の例を確認してください。

ヒント: ボードのリセット後もデータを存続させたい場合は、フラッシュストレージライブラリを確認するか、Nerdプロジェクトを確認してください。

コード

完全なスケッチ
#ProTips完全なスケッチ

カスタムパーツとエンクロージャー

2mm段ボール pavlovcase_ShVm1OJRIF.dxf

回路図


製造プロセス

  1. 冷凍野菜
  2. テレビディナー
  3. CATスキャナー
  4. 猫のトイレ
  5. フリーズドライ食品
  6. ペットフード
  7. 食品産業における金属検出可能プラスチック
  8. Shop.Cat.Com のガイド
  9. My.Cat.com を開始する
  10. 自動食品自動販売機 – 製品の多様性
  11. 食べ物が速くなった