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

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Onderdelen en benodigdheden

  • Arduino UNO
  • Servo (180 graden)
  • Adafruit Standaard LCD - 16x2 Wit op Blauw (met I2C-backpack)
  • Drukknop (12 mm, SparkFun)
  • PHPoC Shield voor Arduino (voor netwerkfunctionaliteit, optioneel)
  • IR-afstandssensor
  • Aan/uit-schakelaar (voor batterijvoeding)
  • Breadboard

Benodigde tools

  • Soldeerbout

Apps en online diensten

  • Arduino IDE

Over dit project

Het project

Dit is een eenvoudige manier om een snoepautomaat te bouwen met slechts een IR-sensor, een servo en een drukknop. Het project bestaat uit deze fasen:

  • Arduino Uno R3 klaarmaken
  • Programmeren en configureren
  • Behuizing en mechanische delen maken
  • Elektronica installeren
  • Testen en gebruiken

Hier is een korte demonstratievideo:

Het programmeren was voor mij het lastigste deel omdat ik nog nieuw ben in coderen, maar na meerdere fouten en hulp van meneer Google en vrienden lukte het wel. Het schrijven van de code nam de meest tijd in beslag.

Credits aan de man die me INSPIREERDE tot deze snoepautomaat! Dit is een vereenvoudigde versie van: https://www.hackster.io/gatoninja236/candy-dispenser-with-google-assistant-564724

De doos en mechanische delen maken

Dit was het leukste deel. Het kostte me minstens een hele dag na meerdere pogingen en niet-passende onderdelen.

Stap 1: Componenten uitleggen

Dit ziet er misschien rommelig uit, maar het is de makkelijkste manier om elk component te sorteren en te testen op fouten. Ik gebruikte verschillende kleuren draad voor overzicht. Alles werd op een stuk karton geplaatst.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Stap 2: De doos ontwerpen

Ik maakte een technische tekening van de doos. De meeste onderdelen zijn van karton, sommige van acrylaat. Afmetingen:

  • Voor- en achterkant: 20 cm × 16 cm (achterkant is acrylaat)
  • Zijden: 12 cm × 16 cm
  • Boven- en onderkant: 20 cm × 12 cm
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Stap 3: Samenstellen en uitzagen

Eerst alles vastplakken met masking tape.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Uitzagen voor componenten:

  • LCD: 7,2 cm × 2,5 cm
  • Knoppen: 1,2 cm × 1,2 cm
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Voor het kopje:

  • Lengte × Hoogte: 9 cm × 12 cm
  • Breedte × Diepte: 9 cm × 9 cm
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Vergeet de sensoren niet uit te zagen:

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Ik maakte de dispenser in trapvorm zodat de snoep niet direct valt:

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Stap 4: Breadboard en Arduino monteren

Ik plaatste breadboard en Arduino achter elkaar en bevestigde ze met acrylaat om ruimte te besparen.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Stap 5: Componenten bevestigen

Begin met LCD en knoppen.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Na het bedraden plaats ik alles in het midden van de doos.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Servo bevestigen:

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Achterkant met aan/uit-knop voor batterijvoeding:

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser
Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Stap 6: Het eindresultaat

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Code

Candy Dispenser (Arduino)

//------BIBLIOTHEKEN-----
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//------BIBLIOTHEKEN-----

// LCD-adres 0x27 voor 16 tekens, 2 regels
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;

int pos = 90; // servo startpositie
int buttonCLK = 7; // kloksgewijs knop
int buttonAntiCLK = 6; // tegenkloksgewijs knop
int set = 0;
const int avoidPin = 5; // IR-obstakelsensor op pin 5

void setup() {
  lcd.begin();
  lcd.clear();
  myservo.attach(9); // Servo op digitale pin 9
  pinMode(buttonCLK, INPUT);
  pinMode(buttonAntiCLK, INPUT);
  pinMode(avoidPin, INPUT);
  Serial.begin(9600);
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Welcome to");
  lcd.setCursor(3,1);
  lcd.print("Candy Land");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("How much candy?");
  lcd.setCursor(0,1);
  lcd.print("A Little A Lot");
  delay(5000);
}

void loop() {
  //--- KNOPFUNCTIES ---
  if(digitalRead(buttonCLK) == HIGH) {
    lcd.clear();
    lcd.print("Please Place Cup");
    delay(2000);
    lcd.clear();
    set = set + 1;
  }
  if(digitalRead(buttonAntiCLK) == HIGH) {
    lcd.clear();
    lcd.print("Please Place Cup");
    delay(2000);
    lcd.clear();
    set = set + 2;
  }
  if(set == 1) { IRCLK(); }
  if(set == 2) { IRAntiCLK(); }
  //--- EINDE KNOPFUNCTIES ---
}

void TurnClockwise() {
  Serial.println("Candy 1 Being Dispensed");
  CandyText1();
  for(pos = 90; pos < 180; pos += 1) {
    myservo.write(pos);
    delay(15);
  }
  if(pos == 180) {
    delay(2000);
    ThankYouText();
  }
}

void TurnAntiClockwise() {
  Serial.println("Candy 2 Being Dispensed");
  CandyText2();
  for(pos = 90; pos < 180; pos += 1) {
    myservo.write(pos);
    delay(20);
  }
  if(pos == 180) {
    delay(3000);
    ThankYouText();
  }
}

void IRCLK() {
  delay(1000);
  boolean avoidVal = digitalRead(avoidPin);
  lcd.setCursor(0,0);
  lcd.print("Detecting Cup");
  lcd.setCursor(0,14);
  lcd.print("...");
  if(avoidVal == LOW) {
    lcd.clear();
    lcd.print("Cup Placed");
    delay(2000);
    TurnClockwise();
  }
}

void IRAntiCLK() {
  delay(1000);
  boolean avoidVal = digitalRead(avoidPin);
  lcd.setCursor(0,0);
  lcd.print("Detecting Cup");
  lcd.setCursor(0,14);
  lcd.print("...");
  if(avoidVal == LOW) {
    lcd.clear();
    lcd.print("Cup Placed");
    delay(2000);
    TurnAntiClockwise();
  }
}

void CandyText1() {
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print("Pouring");
  lcd.setCursor(1,1);
  lcd.print("Little Candy");
}

void CandyText2() {
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print("Pouring");
  lcd.setCursor(3,1);
  lcd.print("Lot Candy");
}

void ThankYouText() {
  lcd.clear();
  lcd.setCursor(5,0);
  lcd.print("Thank");
  lcd.setCursor(6,1);
  lcd.print("You");
  delay(15);
  software_Reset();
}

void software_Reset() {
  asm volatile ("jmp 0");
}

Schema

Het schema ziet er ingewikkeld uit, maar volg de kleurcodering van de draden.

Zelf een snoepautomaat bouwen met Arduino: Slimme snackdispenser

Productieproces

  1. Suikerstokje: Geschiedenis, Productie en de Zoete Wetenschap Achter de Klassieke Feestlikker
  2. Snoepkorrels: van traditie tot moderne productie
  3. Jawbreaker: De Geschiedenis, Ingrediënten en Vakmanschap van een Klassieke Harde Snoep
  4. Suikerspin: Van Klassiek Snoepje tot Moderne Productietechnologie
  5. De Zoete Wetenschap van Gummy Snoep: Van Geschiedenis tot Moderne Productie
  6. M&M's®: Van Uitvinding tot Moderne Productie
  7. Arduino-gebaseerd schakelaar- & LED-paneel voor Microsoft Flight Simulator 2020
  8. Bluetooth-gecontroleerde Arduino Spybot bouwen
  9. FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
  10. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  11. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter