Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Pavlovs Cat

Komponenten und Verbrauchsmaterialien

Arduino MKR IoT Bundle
× 1

Apps und Onlinedienste

Telegramm

Über dieses Projekt

Hinweis:Dieses Tutorial könnte veraltet sein, bitte gehen Sie hier für eine aktuellere Version.

Wenn Sie jemals versucht haben, eine Katze zu erziehen, wissen Sie, wie schwer es ist. Katzen sind ihre eigenen Herren, aber jetzt haben Sie die Möglichkeit, die Katzen mit diesem IoT-fähigen Gerät Ihre Gebote abgeben zu lassen.

Willkommen bei Pavlovs Katzenexperiment!

In diesem Projekt lernen Sie, wie Sie Ihrer Katze beibringen können, wann (und nicht) Essenszeit ist

Und wir alle wissen, dass Katzen Kartons bereits lieben!

Jedes Mal, wenn die Katze eine bestimmte Melodie hört, bekommt sie Futter. Ein Lichtsensor erkennt die Anwesenheit einer Katze. Eine andere Melodie tut nichts. Sehen Sie, wie das funktioniert?

Sie können die Entwicklung Ihrer Katze im Laufe der Zeit überwachen und die Futterausgaberate über Ihr Telefon einstellen. Sobald Sie zufriedenstellende Statistiken erreicht haben, ist es an der Zeit, den Sensor in ein Wearable umzuwandeln. Ihre Katze sollte Ihnen von nun an folgen, wenn Sie dieses Piepsen machen.

Haftungsausschluss:Bei der Entwicklung dieses Experiments wurden keine Katzen verletzt. Auch keine Garantie, dass die Katze das Futter frisst, aber Sie bekommen das Bild, oder?

Kurz und bündig

Sie können Ihren eigenen Lebensmittelspender bauen, indem Sie diese einfache Schritt-für-Schritt-Anleitung befolgen. Der Spender besteht im Grunde nur aus Pappe und einem Servomotor mit etwas zusätzlicher Arduino-Magie.

Mit einem Nachrichtendienst namens Telegram können Sie die Menge der auszugebenden Speisen einstellen und die Melodien auslösen, die mit dem Summer abgespielt werden.

Ein Lichtsensor wird verwendet, um zu erkennen, ob die Katze auf die Melodie reagiert hat und zum Futter gelangt ist.

Profi-Tipp: Sie können eine Webseite auf dem MKR1000 hosten und die gesammelten Daten in einer praktischen Tabelle anzeigen.

Komponenten

  • Servomotor
  • Fototransistor
  • 220 Ohm Widerstand
  • Summer

Lernziele

In diesem Experiment lernst du:

  • Verwalten Sie Telegramm-Bots mit einer benutzerdefinierten Tastatur
  • Einrichten und Verwalten der Webserver-Funktionalität vom MKR1000 aus. #ProTipp

Profi-Tipps sind nützliche, aber nicht unbedingt notwendige Schritte, die das Projekt noch komplexer machen.

Möchten Sie mehr wissen?

Dieses Tutorial ist Teil einer Reihe von Experimenten, die Sie mit dem MKR1000 und dem IoT vertraut machen. Alle Experimente können mit den im MKR IoT Bundle enthaltenen Komponenten erstellt werden.

  • Ich liebe dich Kissen
  • Puzzle-Box
  • Pavlovs Katze
  • Der Nerd
  • Pflanzenkommunikator

Telegramm und Arduino

Telegram ist eine beliebte Messaging-App für Mobilgeräte und Desktops. Abgesehen davon, dass wir mit unseren Freunden chatten können, können wir damit auch praktische und leistungsstarke Chat-Bots erstellen!

Die TelegramBot-Bibliothek für Arduino bietet uns eine einfache Möglichkeit, die Logik hinter dem Chat-Bot zu implementieren.

Um zu erfahren, wie man einen Bot erstellt und grundlegende Funktionen verwaltet, werfen Sie einen Blick auf das I Love You Pillow-Tutorial.

Erstellen Sie Ihre benutzerdefinierte Tastatur

Telegram ermöglicht es uns, eine benutzerdefinierte Tastatur für schnelle Antworten zu erstellen. Das bedeutet, dass beim Sprechen mit einem Bot eine bestimmte Auswahl von Schaltflächen anstelle der Standardtastatur angezeigt wird. Sie können diese Schaltflächen ganz einfach anpassen und die Benutzererfahrung Ihres Geräts verbessern.

Unsere benutzerdefinierte Tastatur sieht so aus:

Mit der ersten Tastenreihe spielen wir die Melodie und geben die Speisen aus, mit der zweiten Tastenreihe stellen wir die Geschwindigkeit des Servomotors und damit die auszugebende Speisenmenge ein.

Um eine benutzerdefinierte Tastatur zu erstellen, müssen wir sie zuerst deklarieren:

TelegrammTastatur keyboard_one;  

Dann definieren Sie die Zeilen:

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

Und zum Schluss die Zeilen der Tastatur zuweisen:

keyboard_one.addRow(row_one, 2); // einer oder mehreren Tastaturen eine Zeile zuweisen keyboard_one.addRow(row_two, 3); // zweites Argument ist die Länge der Zeile  

Denken Sie daran, dass ein Emoji mit UNICODE gesendet werden muss. Um beispielsweise ein Herz-Emoji zu senden, verwenden wir:\U00002764

Die vollständige Liste der Unicode-Emoji-Codes finden Sie hier. Das bedeutet, dass wir zum Definieren unserer Schaltflächen Folgendes verwenden:

 const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Hinweis + Cookie const char* MusicNoFood ="\U0001F3B6 NEIN \U0001F36A"; // Hinweis KEIN Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 KATZEN  

Hier ist die vollständige Skizze:

#include  #include  #include  const char* ssid =SECRET_SSID; // Ihre Netzwerk-SSID (Name) const char* password =SECRET_PSWD; // Ihr Netzwerkpasswort const char BotToken[] =SECRET_BOT_TOKEN; WiFiSSLClient-Client; TelegramBot-Bot (BotToken, Client); TelegramKeyboard keyboard_one; String OldChatId =""; Void setup () { Serial.begin (115200); Verzögerung (3000); // Versuch, eine Verbindung zum Wifi-Netzwerk herzustellen:Serial.print ("Connecting Wifi:"); Serial.println (ssid); while (WiFi.begin(ssid, passwort) !=WL_CONNECTED) { Serial.print("."); Verzögerung (500); } Serial.println(""); Serial.println ("WiFi verbunden"); // Wählen Sie das gewünschte Emoji mit UNICODE // hier ist die Liste https://unicode.org/emoji/charts/full-emoji-list.html const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Hinweis + Cookie const char* MusicNoFood ="\U0001F3B6 NEIN \U0001F36A"; // Hinweis KEIN Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 CATS // Definiere das const char deiner Zeile* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion}; keyboard_one.addRow(row_one, 2); // Zuordnen einer Zeile zu einer oder mehreren Tastaturen keyboard_one.addRow(row_two, 3); // zweites Argument ist die Länge der Zeile bot.begin(); aufrechtzuerhalten. Void Schleife () { Nachricht m =bot.getUpdates (); // Neue Nachrichten lesen if ( m.chat_id !=0 ) { // Prüft, ob Updates vorhanden sind OldChatId =m.chat_id; Serial.println (m.text); bot.sendMessage(m.chat_id, "Hallo !", keyboard_one); } Verzögerung (1000); }  

Leider ist die Art und Weise, wie der Bot die Emojis sendet, nicht die gleiche, mit der sie empfangen werden. Die Verwendung des EchoBot-Beispiels ist eine einfache Möglichkeit zu sehen, wie Bots Emojis empfangen.

Zum Beispiel werden die von uns verwendeten Emojis wie folgt empfangen:

ud83cudfb6 // Melodie ud83cudf6a // Cookieud83dudc08 // Katze 

Entdecke die Katze!

Um die Anwesenheit der Katze zu erkennen, verwenden wir einen Fototransistor, der in der Lage ist, die Lichtintensität und damit zu messen, ob jemand in der Nähe der Katze vorbeigekommen ist.

Beachten Sie, dass wir einen 220-Ohm-Widerstand verwendet haben.

Zum Auslesen der Werte vom Sensor benötigen wir nur einen analogRead(A6).

Da wir daran interessiert sind, die Anwesenheit der Katze erst nach der Melodie zu erkennen, und nur für eine bestimmte Zeit, können wir die folgende Logik verwenden:

unsigned long timer;bool startDetecting =true;intthreshold=200; // willkürlicher Wertvoid setup () {timer =millis () Serial.begin (9600);} void loop () {if (startDetecting) { int value =analogRead (A6); if (Wert  120000) { Serial.println ( "keine Katze in den letzten zwei Minuten erkannt"); startDetecting =false; } } } 

Beachten Sie, dass wir die millis() Funktion zum Einstellen eines Timers . Millis() gibt uns die Zeit in Millisekunden an, seit das Board in Betrieb war. Wir können damit Timer einstellen und Ereignisse nach einer bestimmten Zeit auslösen.

Wir verwenden auch einen Schwellenwert um festzustellen, ob die Katze entdeckt wurde. Dieser Schwellenwert ist willkürlich, Sie können ihn entsprechend Ihren Lichtverhältnissen einstellen.

Spiel das Lied

Um das Lied abzuspielen, verwenden wir den Summer und den tone() Funktion.

Wir verwenden eine leicht modifizierte Version des Standardbeispiels toneMelody. Sie finden es im Dropdown-Menü:

Beispiele> Digital> ToneMelody. 

Fügen Sie den Servomotor hinzu

Das Servo wird verwendet, um die Box zu öffnen und Essen zu liefern.

Beachten Sie, dass wir eine Variable verwenden int PortionAmount =1; um einzustellen, wie lange das Servo um 90 Grad gedreht bleiben soll. Wir können seinen Wert über Telegram ändern.

Schließen Sie das Servo an Pin 7 an und laden Sie diese Skizze hoch, um zu sehen, wie es funktioniert.

#include  Servo-Myservo; // Servo-Objekt erstellen, um ein Servo zu steuern Int pos =0; // Variable zum Speichern der Servoposition Int PortionAmount =1; // Standardmenge an Essen auf 1 Portion setzen void setup () { myservo.attach (7); // verbindet das Servo an Pin 6 mit dem Servoobjekt aufrechtzuerhalten. Void loop () { moveServo (); Verzögerung (2000); aufrechtzuerhalten. Void moveServo () {Serial.println ( "bewegtes Servo"); for (pos =0; pos <=90; pos +=1) {// geht von 0 Grad auf 90 Grad myservo.write(pos); // dem Servo sagen, dass es in der Variablen 'pos' delay (15) zur Position gehen soll; // wartet 15 ms, bis das Servo die Position erreicht hat} Verzögerung (PortionAmount * 300); // die Box für ein Zeitintervall offen halten, basierend auf der Menge an Essen, die Sie liefern möchten (pos =90; pos>=0; pos -=1) { // geht von 90 Grad auf 0 Grad myservo.write( pos); / dem Servo sagen, dass es in der Variablen 'pos' delay (15) in die Position gehen soll; // wartet 15ms, bis das Servo die Position erreicht hat}}  

#ProTip:Webserver hinzufügen

Eine der leistungsstärksten Funktionen des MKR1000 ist der Access Point Mode.

Es ermöglicht uns, eine Webseite auf dem MKR1000 zu hosten, auf die wir zugreifen können, indem wir die IP-Adresse des Boards verwenden und mit demselben Netzwerk verbunden sind .

Wir werden dieses Tool verwenden, um die vom Lebensmittelspender gesammelten Daten auszudrucken.

Dieser Schritt erfordert Grundkenntnisse in HTML und CSS (oder viel Vertrauen in die Beispielskizze. Sie können das grundlegende Webserver-Beispiel überprüfen unter:

> Beispiel> WiFi101> AP_SimpleWebServer 

Wir werden den Zugriffspunktmodus auslösen, indem wir ein bestimmtes Wort senden an unseren Telegram Bot, der mit dem Link antwortet, um auf die Webseite zu gelangen. Dann wird der Telegrammclient getrennt und der Webserver gestartet.

else if(m.text =="Server"){ IPAddress ip =WiFi.localIP(); web_server_mode=true; String message ="Um die Webseite anzuzeigen, gehen Sie zu http://"+IpToString(ip); bot.sendMessage(m.chat_id, message, keyboard_one); telegram_client.stop(); Verzögerung (1000); server.begin(); // starte den Webserver auf Port 80 }  

Die Webseite enthält eine Schaltfläche, die den Webserver-Modus deaktiviert und als Telegramm-Client zurückkehrt:

if (currentLine.endsWith("GET /BACKBUTTON")) { // if button gedrückt web_server_mode=false; client.stop(); Verzögerung (1000); bot.begin(); bot.sendMessage(OldChatId, "Zurück online !", keyboard_one); }  

Jedes Mal, wenn die Katzenerkennung beendet ist, wird eine neue Zelle der Tabelle hinzugefügt mit den gesammelten Daten:ob Futter geliefert wurde, ob die Katze innerhalb von zwei Minuten aufgetaucht ist und wie lange es gedauert hat, um den Spender zu erreichen.

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

Dann wird der String mit allen Tabellenzellen aktualisiert und in den Rest des Haupt-HTML integriert.

 table_cells+=cell; // neue Zelle hinzufügen html =html_1 + table_cells + html_2; // Zellen zum Haupt-HTML hinzufügen 

Sehen Sie sich das letzte Pro-Beispiel an, um zu sehen, wie Sie all diese neuen Funktionen integrieren können!

Tipp: Wenn Sie möchten, dass Ihre Daten einen Reset des Boards überstehen, schauen Sie in die Flash-Storage-Bibliothek oder schauen Sie sich das Nerd-Projekt an!

Code

Vollständige Skizze
#ProTips komplette Skizze

Kundenspezifische Teile und Gehäuse

2 mm Karton pavlovcase_ShVm1OJRIF.dxf

Schaltpläne


Herstellungsprozess

  1. Gefrorenes Gemüse
  2. TV-Dinner
  3. CAT-Scanner
  4. Katzenstreu
  5. Gefriergetrocknete Lebensmittel
  6. Haustierfutter
  7. Ihr Leitfaden zu Shop.Cat.Com
  8. Erste Schritte mit My.Cat.com
  9. Lebensmittelautomaten – Produktvielfalt
  10. Essen ist jetzt noch schneller