Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino MKR IoT Bundle 1

Apps en Online Services

  • Blynk

Over dit Project

Let op: Deze tutorial kan verouderd zijn. Ga hier voor een actueelere versie.

Waardevolle spullen veilig houden is soms lastig, tenzij je een grote kluis hebt... maar wie heeft daar ruimte voor?

Maak in plaats daarvan je eigen puzzeldoos met componenten uit de MKR IoT Bundle en wat karton! We garanderen niet de veiligheid van je spullen, maar het is een leuke afschrikking voor potentiële dieven. Natuurlijk raden we aan om je snoep erin te stoppen... geen echte waardevols.

In een Notendop

Om de doos te openen (gesloten door een servomotor), moet je de potentiometers draaien tot je de juiste combinatie hebt. De combinatie stel je in via de Blynk-app. Een RGB LED geeft kleurfeedback: hoe dichter bij de juiste waarde, hoe "warmer" de kleur (blauw → cyaan → geel → rood).

Bij de juiste combinatie speelt de buzzer een liedje (Star Wars thema) en opent de servo de doos.

Benodigde componenten uit de bundle:

  • Buzzer
  • RGB LED
  • 3x Potentiometer
  • LCD scherm
  • Servomotor
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

Leerdoelen

  • Kennismaken met Blynk IoT-platform
  • Aansluiten en gebruiken van LCD-scherm
  • Star Wars thema spelen met buzzer

Meer Willen Weten?

Deze tutorial is deel van een reeks experimenten om vertrouwd te raken met de MKR1000 en IoT. Alle experimenten kunnen met de MKR IoT Bundle worden gebouwd:

  • I Love You Pillow
  • Puzzle Box
  • Pavlov's Cat
  • The Nerd
  • Plant Communicator

Kennismaken met Blynk

Blynk is een populaire mobiele app voor IoT, waarmee je je internet-verbonden Arduino van overal kunt besturen. Opgericht via Kickstarter, snel een van de meest gebruikte apps door goede documentatie en simpliciteit.

Aan de slag met Blynk

Nieuw project aanmaken is eenvoudig – volg de stappen of bekijk de officiële handleiding.

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

Na succesvol aanmaken ontvang je per e-mail de Auth Token – unieke identifier om je hardware met je smartphone te verbinden. Elk nieuw project heeft zijn eigen token.

Installeer de Blynk-bibliotheek (in Arduino Web Editor automatisch bij include, anders via Library Manager).

Upload deze sketch en speel met de sliders:

#include <WiFi101.h>
#include <BlynkSimpleWiFiShield101.h>

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
char auth[] = SECRET_TOKEN;

int SliderValueOne = 1;
int SliderValueTwo = 1;
int SliderValueThree = 1;

BLYNK_WRITE(V1) { SliderValueOne = param.asInt(); }
BLYNK_WRITE(V2) { SliderValueTwo = param.asInt(); }
BLYNK_WRITE(V3) { SliderValueThree = param.asInt(); }

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, password);
}

void loop() {
  int Temp_Slider_One_value = SliderValueOne;
  int Temp_Slider_Two_value = SliderValueTwo;
  int Temp_Slider_Three_value = SliderValueThree;
  Blynk.run();

  if(Temp_Slider_One_value != SliderValueOne || Temp_Slider_Two_value != SliderValueTwo || Temp_Slider_Three_value != SliderValueThree){
    Serial.print("New combination: ");
    Serial.print(SliderValueOne); Serial.print(" ");
    Serial.print(SliderValueTwo); Serial.print(" ");
    Serial.println(SliderValueThree);
  }
}
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

LCD Scherm Gebruiken

Het LCD-scherm is eenvoudig maar vereist veel draden – geduld!

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

We gebruiken 5V voeding en een 220Ω weerstand. Helderheid regelen via analoog pin 3 (0-255, waar 0 maximaal is): analogWrite(A3, 0);

Test met voorbeeldcode:

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  analogWrite(A3, 0);
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis() / 1000);
}

Potentiometers Toevoegen

Waarden lezen via analogRead() op pinnen A0, A1, A2.

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

Waarden lopen 0-1023 – te groot om te raden. Mappen naar 0-9 met map():

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

Voorbeeldcode om waarden op LCD te tonen:

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  analogWrite(A3, 0);
  Serial.begin(9600);
  lcd.begin(16, 2);
}

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);
}

RGB LED Toevoegen

RGB LED geeft feedback: hoe dichter bij combinatie, hoe warmer de kleur (blauw → cyaan → geel → rood).

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
int redPin = 6, greenPin = 8, bluePin = 7;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  setColor(0, 0, 255); delay(1000); // blauw
  setColor(0, 255, 255); delay(1000); // cyaan
  setColor(255, 255, 0); delay(1000); // geel
  setColor(255, 0, 0); delay(1000);   // rood
}

void setColor(int red, int green, int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}

Koppelen met Blynk

Nu alles combineren: board aan Blynk koppelen, potentiometers aan LCD, LED knippert groen bij juiste combinatie.

  • Functie giveColorFeedback() stelt LED-kleur in op basis van afstand tot combinatie.
  • Variabelen SliderValueOne/Two/Three opslaan combinatie (standaard 1 1 1).
  • Boolean start detecteert of combinatie al geraden is (voorkomt herhaald openen).

Upload deze sketch:

#include <LiquidCrystal.h>
#include <SPI.h>
#include <WiFi101.h>
#include <BlynkSimpleWiFiShield101.h>

int redPin = 6, greenPin = 8, bluePin = 7;
const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
char auth[] = SECRET_TOKEN;

const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
bool start = true;
int SliderValueOne = 1, SliderValueTwo = 1, SliderValueThree = 1;

BLYNK_WRITE(V1) { SliderValueOne = param.asInt(); }
BLYNK_WRITE(V2) { SliderValueTwo = param.asInt(); }
BLYNK_WRITE(V3) { SliderValueThree = param.asInt(); }

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT);
  analogWrite(A3, 0);
  Serial.begin(9600);
  lcd.begin(16, 2);
  Blynk.begin(auth, ssid, password);
}

void loop() {
  int Temp_Slider_One_value = SliderValueOne;
  int Temp_Slider_Two_value = SliderValueTwo;
  int Temp_Slider_Three_value = SliderValueThree;
  Blynk.run();

  if(Temp_Slider_One_value != SliderValueOne || Temp_Slider_Two_value != SliderValueTwo || Temp_Slider_Three_value != SliderValueThree){
    Serial.print("New combination: ");
    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 = false;
    }
  }
  if(!start) {
    if(PotOne == 0 && PotTwo == 0 && PotThree == 0) start = true;
  }
}

void giveColorFeedback(int PotOne, int PotTwo, int PotThree) {
  if (abs(PotOne - SliderValueOne) <= 1 && abs(PotTwo - SliderValueTwo) <= 1 && abs(PotThree - SliderValueThree) <= 1) {
    setColor(255, 0, 0); // Rood
  } else if (abs(PotOne - SliderValueOne) <= 3 && abs(PotTwo - SliderValueTwo) <= 3 && abs(PotThree - SliderValueThree) <= 3) {
    setColor(255, 255, 0); // Geel
  } else if (abs(PotOne - SliderValueOne) <= 4 && abs(PotTwo - SliderValueTwo) <= 4 && abs(PotThree - SliderValueThree) <= 4) {
    setColor(0, 255, 255); // Cyaan
  } else {
    setColor(0, 0, 255); // Blauw
  }
}

void blinkGreenLed() {
  for (int a = 0; a < 2; a++) {
    for (int b = 0; b <= 255; b += 5) { setColor(0, b, 0); delay(5); }
    for (int b = 255; b >= 0; b -= 5) { setColor(0, b, 0); delay(5); }
  }
  for (int b = 0; b <= 255; b += 5) { setColor(0, b, 0); delay(5); }
}

void setColor(int red, int green, int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}

Buzzer Toevoegen

Buzzer speelt een melodie bij openen: het Star Wars thema!

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
const int c = 261, d = 294, e = 329, f = 349, g = 391, gS = 415, a = 440, aS = 455, b = 466;
const int cH = 523, cSH = 554, dH = 587, dSH = 622, eH = 659, fH = 698, fSH = 740, gH = 784, gSH = 830, aH = 880;
int counter = 0;
#define buzzerPin 1

void setup() { pinMode(buzzerPin, OUTPUT); Serial.begin(9600); }
void loop() { play_jingle(); delay(3000); }

void play_jingle() {
  beep(a, 500); beep(a, 500); beep(a, 500);
  beep(f, 350); beep(cH, 150); beep(a, 500);
  beep(f, 350); beep(cH, 150); beep(a, 650); delay(500);
  beep(eH, 500); beep(eH, 500); beep(eH, 500);
  beep(fH, 350); beep(cH, 150); beep(gS, 500);
  beep(f, 350); beep(cH, 150); beep(a, 650); delay(500);
}

void beep(int note, int duration) {
  tone(buzzerPin, note, duration);
  noTone(buzzerPin);
  delay(50);
  counter++;
}

Servomotor Toevoegen

De servo is het slot van de doos. Bij juiste combinatie draait hij 90° en opent de doos.

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding
#include <Servo.h>
int pos = 0;
Servo myservo;

void setup() {
  myservo.attach(9);
  myservo.write(pos);
}

void loop() {
  open_the_box(); delay(2000);
  close_the_box(); delay(2000);
}

void open_the_box() {
  for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); delay(15); }
}
void close_the_box() {
  for (pos = 90; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); }
}

Let op: om de doos weer te sluiten, zet alle potentiometers op 0.

Bouw Je Puzzeldoos

Een doos hoort bij een doos. Download het behuizingsbestand hieronder als gids.

We gebruikten 2mm karton.

Code

Complete Sketch

De volledige geïntegreerde code is beschikbaar in de GitHub repository van het project.

Aangepaste Onderdelen en Behuizingen

2mm karton

Bestand: box_E5j7tnFdNC.dxf

Schema's

Bouw een Veilige IoT Puzzeldoos met Arduino MKR Bundle – Stap-voor-Stap Handleiding

Productieproces

  1. Geïntegreerde Schakelingen (IC's): Compacte, Krachtige Chips die Moderne Elektronica Aandrijven
  2. TI SensorTag integreren met Blynk via Node-RED op Raspberry Pi Zero
  3. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  4. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
  5. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  6. MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
  7. MOSMusic Project Kit: MOSFET, Arduino en meer
  8. Essentiële Onderdelen van een Boormachine: Een Uitgebreid Overzicht
  9. Belangrijkste Componenten van een Interne Verbrandingsmotor
  10. SPICE Netlist Syntaxis Beheersen: Componentnamen, Passieve & Actieve Elementen, en Brondefinities
  11. Micro-elektronica: de wetenschap van miniatuur elektronica