Schokonussautomat

Schokonüsse sind schon was feines. Das Problem: sie sind immer so schnell aufgegessen. Gut, wenn man da einen Schokonussautomaten hat, der nur alle 4 bis 6 Minuten seinen leckeren Inhalt an die begierigen Mäuler verteilt. Eine rot/grün Anzeige zeigt an, ob man wieder auf eine neue Nuss hoffen kann.

Wer sich diesen Automaten mit den unteren aufgeführten Druckdateien selber basteln möchte, findet hier eine kleine Bastelanleitung.

Hier sind die Dateien für den Druck.

Und hier der Quellcode für eine Programmierung des ESP8266 für das oben gezeigte Board mit passender Erweiterung. Bitte die Pinbelegung beachten.

#include <Servo.h>

Servo einzeln;
Servo ruettler;
int aktPos=90;
int pause = 50;
int gruen = D3;
int rot = D4;
int ruettel = D0;
int einzel = D5;
int schalter = A0;
int auslese=0;
int warten = 12;// 0000; // Startzeit zum Warten
int offen = 100; // Öffnungszeit in Milisekunden
int unten = 240; // Untere Dauer Wartezeit in Sekunden
int oben = 360; // Obere Dauer Wartezeit in Sekunden

void setup() {
Serial.begin(115200);
Serial.println("Start");
ruettler.attach(ruettel,1000,2325);
einzeln.attach(einzel,1000,2325);
pinMode(rot, OUTPUT);
pinMode(gruen, OUTPUT);
pinMode(schalter, INPUT);
digitalWrite(rot, HIGH);
digitalWrite(gruen, LOW);
delay(warten); // Warten nach Einschalten
digitalWrite(rot, LOW);
digitalWrite(gruen, HIGH);
einzeln.write(91);
}

void ruetteln()
{
  digitalWrite(rot, HIGH);
  digitalWrite(gruen, LOW);
  delay(500); //Pause vor dem Rütteln
  for (int i = 90; i<=180; i=i+5){
        ruettler.write(i);
        delay(pause);
      }
  for (int i=0; i < 10; i++)
  {
    ruettler.write(170);
    ruettler.write(180);
  }

  for (int i = 180; i>=90; i=i-5){
        ruettler.write(i);
        delay(pause);
      }
  for (int i=0; i < 10; i++)
  {
    ruettler.write(85);
    ruettler.write(95);
  }

  for (int i = 90; i>=0; i=i-5){
        ruettler.write(i);
        delay(pause);
      }
  for (int i=0; i < 10; i++)
  {
    ruettler.write(10);
    ruettler.write(0);
  }

  for (int i = 0; i<=90; i=i+5){
        ruettler.write(i);
        delay(pause);
      }
  for (int i=0; i < 10; i++)
  {
    ruettler.write(95);
    ruettler.write(85);
  }
}

void ausgabe()
{
  einzeln.write(1);
  delay(offen);
  einzeln.write(91);
  ruetteln();
  warten = random(unten, oben);
  delay(warten*1000);
  digitalWrite(rot, LOW);
  digitalWrite(gruen, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
auslese = analogRead(schalter);
if (auslese > 512)
{
  ausgabe();
}
}