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

PuzzleBox

Komponenten und Verbrauchsmaterialien

Arduino MKR IoT-Bundle
× 1

Apps und Onlinedienste

Blynk

Über dieses Projekt

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

Wertvolle Gegenstände vor neugierigen Blicken zu schützen kann manchmal schwierig sein, es sei denn, Sie legen sie in einen großen Safe oder ähnliches... aber wer hat dafür Platz?

Erstelle stattdessen deine eigene Puzzlebox mit den Komponenten aus dem MKR IoT Bundle und etwas Karton! Wir können die Sicherheit Ihrer Sachen nicht garantieren, aber zumindest wird es eine lustige Abschreckung für potenzielle Diebe sein.

Natürlich raten wir Ihnen, Süßigkeiten darin zu verstauen ... keine echten Wertsachen.

Kurz und bündig

Um die mit einem Servomotor geschlossen gehaltene Box zu öffnen, müssen Sie an den Potentiometern drehen, bis Sie die richtige Kombination erhalten. Die Kombination kann über die Online-App Blynk eingestellt werden. Eine LED hilft Ihnen beim Erraten und gibt Ihnen Farb-Feedbacks:Je näher Sie sind, desto wärmer ist die Farbe.

Wenn die richtige Kombination erraten ist, beginnt der Summer ein Lied zu spielen, während das Servo die Box öffnet.

Um unsere Puzzlebox zu erstellen, benötigen wir folgende Komponenten:

  • Summer
  • RGB-LED
  • 3 Potentiometer
  • LCD-Bildschirm
  • Servomotor

Lernziele

  • Einführung der Internetplattform Blynk
  • Verkabelung und Verwendung des LCD-Bildschirms
  • Star Wars-Thema mit dem Summer abspielen

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

Wir stellen Blynk vor

Blynk ist eine beliebte mobile App für das Internet der Dinge, mit der wir unser mit dem Internet verbundenes Arduino jederzeit und überall einfach steuern können.

Es wurde auf Kickstarter gegründet und wurde dank seiner großartigen Dokumentation und seiner Einfachheit schnell zu einer der am häufigsten verwendeten Apps in diesem Bereich.

Erste Schritte mit Blynk

Ein neues Projekt zu erstellen ist ganz einfach, befolgen Sie einfach diese wenigen einfachen Schritte oder werfen Sie einen Blick auf die offiziellen ersten Schritte von Blynk.

Nachdem Sie erfolgreich ein neues Projekt erstellt haben, sollten Sie auch das Auth Token per E-Mail erhalten. Es ist eine eindeutige Kennung, die benötigt wird, um Ihre Hardware mit Ihrem Smartphone zu verbinden. Jedes neue Projekt, das Sie erstellen, hat ein eigenes Auth-Token.

Um das Arduino mit der App zu verbinden, müssen wir die Blynk-Bibliothek installieren. Wenn Sie den Arduino Web Editor verwenden, wird die Bibliothek automatisch heruntergeladen, wenn Sie sie in den Sketch einfügen, andernfalls können Sie sie vom Bibliotheksmanager herunterladen.

Jetzt sind wir startklar. Diese Skizze hochladen und spielen Sie mit den Schiebereglern, um das Ergebnis zu sehen:

#include  #include  const char* ssid =SECRET_SSID; // Ihre Netzwerk-SSID (Name) const char* password =SECRET_PSWD; // Ihr Netzwerkpasswort char auth[] =SECRET_TOKEN; // Ihr Blynk-API-Token // Variablen zum Speichern des Kombinationswerts // Setzen Sie die anfängliche Kombination auf ( 1 1 1 ) int SliderValueOne =1; int SliderValueTwo =1; int SliderValueThree =1; // Blynk-Funktionen zum Abrufen von Werten BLYNK_WRITE(V1) { SliderValueOne =param.asInt(); // Zuweisen des eingehenden Werts von Pin V1 zu einer Variablen} BLYNK_WRITE (V2) { SliderValueTwo =param.asInt (); // Zuweisen des eingehenden Werts von Pin V1 zu einer Variablen} BLYNK_WRITE (V3) { SliderValueThree =param.asInt (); // Zuweisen des eingehenden Werts von Pin V1 zu einer Variablen aufrechtzuerhalten. Void setup () { Serial.begin (9600); Blynk.begin(auth, ssid, passwort); // Blynk-Funktionalitäten starten und mit WiFi verbinden} void loop() { // Variablen um die Kombination temporär zu speichern int Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); // neue Kombinationswerte aus der Online-App abfragen // prüfen, ob Kombinationswerte geändert wurden und auf der Konsole ausgeben if(Temp_Slider_One_value !=SliderValueOne || Temp_Slider_Two_value !=SliderValueTwo || Temp_Slider_Three_value !=SliderValueThree){ Serial.print("New Kombination:"); Serial.print (SliderValueOne); Serial.print ( " "); Serial.print (SliderValueTwo); Serial.print ( " "); Serial.println (SliderValueThree); } }  

Verwenden des LCD-Bildschirms

Zeit, den Bildschirm anzuschließen!

Der LCD-Bildschirm ist einfach zu bedienen, erfordert jedoch viele Kabel, also seien Sie bereit, Ihre Geduld zu beweisen.

Beachten Sie, dass wir das 5V-Netzteil und einen 220-Ohm-Widerstand verwenden.

Die Helligkeit kann reguliert werden, indem der Ausgangswert des Analog-Pins 3 von 0 auf 255 geändert wird, wobei 0 der Maximalwert ist.

analogWrite(A3, 0);  

Jetzt können wir die Beispielskizze hochladen und sehen, ob alles gut funktioniert.

// fügen Sie den Bibliothekscode ein:#include  // Initialisieren Sie die Bibliothek, indem Sie jeden benötigten LCD-Schnittstellenpin verknüpfen // mit der Arduino-Pinnummer, die mit const int rs =12, en . verbunden ist =11, d4 =2, d5 =3, d6 =4, d7 =5; Flüssigkristallanzeige (rs, en, d4, d5, d6, d7); Void setup () { AnalogWrite (A3, 0); // Stellen Sie die Helligkeit auf den maximalen Wert // Stellen Sie die Anzahl der Spalten und Zeilen des LCDs ein:lcd.begin (16, 2); // Eine Nachricht auf dem LCD ausgeben. lcd.print("Hallo Welt!"); } void loop() { // setze den Cursor auf Spalte 0, Zeile 1 // (Hinweis:Zeile 1 ist die zweite Zeile, da das Zählen mit 0 beginnt):lcd.setCursor(0, 1); // die Anzahl der Sekunden seit dem Zurücksetzen ausgeben:lcd.print (millis () / 1000); }  

Potentiometer hinzufügen

Um den Wert der Potentiometer auszulesen benötigen wir nur ein analogRead() am richtigen Stift. Wir verbinden sie mit dem analogen Pin 0 , 1 , 2.

Beachten Sie, dass der Wert eines Potentiometers von 0 bis 1023 reicht, wodurch die Kombination unmöglich zu erraten ist. Um diese Werte von 0 bis 9 abzubilden, verwenden wir die map() Funktion,

 int PotOne =map(analogRead(A0), 0, 1023, 0, 9);  

Mit diesem Beispielcode können Sie die Werte der Potentiometer auf dem LCD-Bildschirm ausdrucken.

#include  // LCD-Bildschirmstifte const int rs =12, en =11, d4 =2, d5 =3, d6 =4, d7 =5; Flüssigkristallanzeige (rs, en, d4, d5, d6, d7); Void setup () { AnalogWrite (A3, 0); // die Helligkeit des LCD-Bildschirms auf den maximalen Wert einstellen Serial.begin (9600); lcd.begin(16, 2); // LCD-Bildschirm mit 16 Spalten und 2 Zeilen beginnen aufrechtzuerhalten. Void loop () { Int PotOne =map (analogRead (A0), 0, 1023, 0, 9); int PotTwo =map(analogRead(A1), 0, 1023, 0, 9); int PotThree =map(analogRead(A2), 0, 1023, 0, 9); lcd.setCursor(0, 0); lcd.print (PotOne); lcd.setCursor(2, 0); lcd.print (PotTwo); lcd.setCursor(4, 0); lcd.print (PotThree); }  

Fügen Sie die RGB-LED hinzu

Wir werden die RGB-LED als Feedback verwenden, um den Leuten beim Erraten der Kombination zu helfen. Je näher sie dem richtigen Wert kommen, desto wärmer ist die Farbe der LED, die von Blau, Aqua, Gelb und Rot reicht.

Sie können diese Beispielskizze verwenden, um das RGB in Aktion zu sehen!

// RGB-LED-Pins int redPin =6; int grünPin =8; int bluePin =7; Void setup () { PinMode (redPin, OUTPUT); pinMode (grüner Pin, AUSGANG); pinMode (bluePin, AUSGANG); Serial.begin (9600); aufrechtzuerhalten. Void Schleife () { setColor (0, 0, 255); // blaue Verzögerung (1000); setColor (0, 255, 255); // Aqua-Verzögerung (1000); setColor(255, 255, 0); // gelbe Verzögerung (1000); setColor(255, 0, 0); // Rote Verzögerung (1000); } // RGB-Werte an die LED-Pins senden void setColor (int red, int green, int blue) {analogWrite (redPin, red); analogWrite (grünPin, grün); analogWrite (bluePin, blau); }  

Verbinden Sie es mit Blynk

Jetzt können wir alles zusammensetzen:Verbinden Sie die Platine mit Blynk, das Potentiometer mit dem LCD-Bildschirm und lassen Sie die LED grün blinken, wenn die Kombination richtig ist.

  • Beachten Sie, dass wir die Funktion giveColorFeedback() . verwenden um die Farbe der LED einzustellen, wenn der Absolutwert jedes Potentiometers näher als ein bestimmter Schwellenwert an der richtigen Kombination liegt.
void giveColorFeedback(int PotOne, int PotTwo, int PotThree){...} 
  • Wir werden diese Variable auch verwenden, um die von der App gesendeten Werte und damit die Kombination zu speichern.
int SliderValueOne =1; int SliderValueTwo =1; int SliderValueThree =1;  

Beachten Sie, dass der Anfangswert auf 1 gesetzt ist. Er ändert sich nur, wenn Sie die Werte der Schieberegler in der App ändern. Wenn Sie das Board zurücksetzen, wird die Kombination auf den Standardwert zurückgesetzt.

  • Eine boolesche Variable bool start =true; wird verwendet, um zu erkennen, wann die Kombination bereits erraten wurde, um zu vermeiden, dass die Box bei jeder Schleife erneut geöffnet wird.

Laden Sie diese Beispielskizze hoch, um sie in Aktion zu sehen:

#include  #include  #include  #include  // RGB-LED-Pins int redPin =6; int grünPin =8; int bluePin =7; const char* ssid =SECRET_SSID; // Ihre Netzwerk-SSID (Name) const char* password =SECRET_PSWD; // Ihr Netzwerkpasswort char auth[] =SECRET_TOKEN; // Ihr Blynk-API-Token // LCD-Bildschirmstifte const int rs =12, en =11, d4 =2, d5 =3, d6 =4, d7 =5; bool start =true; // Variablen zum Speichern des Kombinationswerts // Setze die Anfangskombination auf ( 1 1 1 ) int SliderValueOne =1; int SliderValueTwo =1; int SliderValueThree =1; // Blynk-Funktionen zum Abrufen von Werten BLYNK_WRITE(V1) { SliderValueOne =param.asInt(); // Zuweisen des eingehenden Werts von Pin V1 zu einer Variablen} BLYNK_WRITE (V2) { SliderValueTwo =param.asInt (); // Zuweisen des eingehenden Werts von Pin V1 zu einer Variablen} BLYNK_WRITE (V3) { SliderValueThree =param.asInt (); // Zuweisen eines eingehenden Werts von Pin V1 zu einer Variablen} LiquidCrystal lcd(rs, en, d4, d5, d6, d7); Void setup () { PinMode (redPin, OUTPUT); pinMode (grüner Pin, AUSGANG); pinMode (bluePin, AUSGANG); analogWrite (A3, 0); // die Helligkeit des LCD-Bildschirms auf den maximalen Wert einstellen Serial.begin (9600); lcd.begin(16, 2); // LCD-Bildschirm mit 16 Spalten und 2 Zeilen beginnen Blynk.begin(auth, ssid, password); // Blynk-Funktionalitäten starten } void loop() { // Variablen um die Kombination temporär zu speichern int Temp_Slider_One_value =SliderValueOne; int Temp_Slider_Two_value =SliderValueTwo; int Temp_Slider_Three_value =SliderValueThree; Blynk.run(); // neue Kombinationswerte aus der Online-App abfragen // prüfen, ob Kombinationswerte geändert wurden und auf der Konsole ausgeben if(Temp_Slider_One_value !=SliderValueOne || Temp_Slider_Two_value !=SliderValueTwo || Temp_Slider_Three_value !=SliderValueThree){ Serial.print("New Kombination:"); Serial.print (SliderValueOne); Serial.print ( " "); Serial.print (SliderValueTwo); Serial.print ( " "); Serial.println (SliderValueThree); } int PotOne =map(analogRead(A0), 0, 1023, 0, 9); int PotTwo =map(analogRead(A1), 0, 1023, 0, 9); int PotThree =map(analogRead(A2), 0, 1023, 0, 9); lcd.setCursor(0, 0); lcd.print (PotOne); lcd.setCursor(2, 0); lcd.print (PotTwo); lcd.setCursor(4, 0); lcd.print (PotThree); if (start) { giveColorFeedback (PotOne, PotTwo, PotThree); if (PotOne ==SliderValueOne &&PotTwo ==SliderValueTwo &&PotThree ==SliderValueThree) { blinkGreenLed(); start =falsch; }} if(!start) { if(PotOne ==0 &&PotTwo ==0 &&PotThree ==0){ start =true; } } } // Feedback geben basierend darauf, wie nah das Potentiometer am Kombinationswert ist // Je näher es ist, desto wärmer ist die Farbe der LED void giveColorFeedback(int PotOne, int PotTwo, int PotThree) { if (abs(PotOne - SliderValueOne) <=1 &&abs(PotTwo - SliderValueTwo) <=1 &&abs(PotThree - SliderValueThree) <=1 ) {// Rot setColor(255, 0, 0); } else if (abs(PotOne - SliderValueOne) <=3 &&abs(PotTwo - SliderValueTwo) <=3 &&abs(PotThree - SliderValueThree) <=3 ) {// gelb setColor(255, 255, 0); } else if (abs(PotOne - SliderValueOne) <=4 &&abs(PotTwo - SliderValueTwo) <=4 &&abs(PotThree - SliderValueThree) <=4 ) {// aqua setColor (0, 255, 255); aufrechtzuerhalten. Sonst {// blau setColor (0, 0, 255); aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. Verzögerung(5); } für (int b =255; b>=0; b -=5) { setColor (0, b, 0); Verzögerung(5); }} für (int b =0; b <=255; b + =5) { setColor (0, b, 0); Verzögerung(5); } } // RGB-Werte an die LED-Pins senden void setColor (int red, int green, int blue) {analogWrite (redPin, red); analogWrite (grünPin, grün); analogWrite (bluePin, blau); }  

Summer hinzufügen

Wir werden den Summer verwenden, um eine Melodie zu spielen, wenn die Box geöffnet wird. Genauer gesagt spielen wir den Star Wars Titelsong!

Das Anschließen des Summers ist einfach:

Laden Sie diesen Beispielcode hoch und hören Sie zu:

const int c =261; const int d =294; const int e =329; const int f =349; const int g =391; const int gS =415; const int a =440; const int aS =455; const int b =466; const int cH =523; const int cSH =554; const int dH =587; const int dSH =622; const int eH =659; const int fH =698; const int fSH =740; const int gH =784; const int gSH =830; const int aH =880; int-Zähler =0; #define BuzzerPin 1 Void setup () { PinMode (BuzzerPin, OUTPUT); Serial.begin (9600); aufrechtzuerhalten. Void Schleife () {play_jingle (); Verzögerung (3000); aufrechtzuerhalten. Void play_jingle () { beep (a, 500); Signalton (a, 500); Signalton (a, 500); Signalton (f, 350); Piepton (cH, 150); Signalton (a, 500); Signalton (f, 350); Piepton (cH, 150); Signalton (a, 650); Verzögerung (500); Signalton (eH, 500); Signalton (eH, 500); Signalton (eH, 500); Signalton (fH, 350); Piepton (cH, 150); Signalton (gS, 500); Signalton (f, 350); Piepton (cH, 150); Signalton (a, 650); Verzögerung (500); aufrechtzuerhalten. Void Beep (int Note, int Dauer) {// Ton auf BuzzerPin Ton abspielen (BuzzerPin, Note, Dauer); // Ton auf SummerPin stoppen noTone (buzzerPin); Verzögerung (50); // Zähler Zähler inkrementieren++; }  

Fügen Sie den Servomotor hinzu

Der Servomotor ist das Schloss unserer Box, wir müssen ihn um 90 Grad drehen, wenn die Kombination richtig ist, damit sich die Box öffnet.

Zum Anschließen des Servos sind nur drei Drähte erforderlich.

Um es um 90 Grad zu drehen, verwenden wir die folgenden Funktionen:

#include  int pos =0; // Variable zum Speichern der Servoposition Servo myservo; // Servo-Objekt erstellen, um ein Servo zu steuern Void setup () { myservo.attach (9); // verbindet das Servo an Pin 9 mit dem Servo-Objekt myservo.write (pos); // setze das Servo in Position 0} Void loop () { open_the_box (); Verzögerung (2000); close_the_box(); Verzögerung (2000); aufrechtzuerhalten. aufrechtzuerhalten. Void open_the_box () { 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) in die Position gehen soll; // wartet 15ms, bis das Servo die Position erreicht hat}} void close_the_box(){ for (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}}  

Beachten Sie, dass Sie zum Zurückdrehen des Servos und Schließen der Box nur alle Potentiometer auf 0 drehen müssen.

Baue deine Puzzle-Box

Es wäre keine Box ohne eine Box, also lade die Falldatei unten herunter und verwende sie als Anleitung, um deine eigene zu bauen.

Beachten Sie, dass wir einen 2 mm Karton verwendet haben.

Code

Vollständige Skizze

Kundenspezifische Teile und Gehäuse

2 mm Karton box_E5j7tnFdNC.dxf

Schaltpläne


Herstellungsprozess

  1. Schaltungskomponenten
  2. Integrierter Schaltkreis
  3. SensorTag zu Blynk mit Node-RED
  4. Arduino Digital Dice
  5. Multi-Temperatursensor
  6. Arduino-Gamecontroller
  7. MOSMusic
  8. Was ist Mikroelektronik?
  9. Komponenten der Bohrmaschine
  10. Komponenten des Verbrennungsmotors