Dosenautomat: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 358: Zeile 358:


== Zusammenfassung ==
== Zusammenfassung ==
Platzhalter für den Artikel "Zusammenfassung"
Platzhalter für den Artikel <b>"Zusammenfassung"</b>
=== Lessons Learned ===
=== Lessons Learned ===
Platzhalter für den Artikel "Lessons Learned"
Platzhalter für den Artikel <b>"Lessons Learned"</b>


== Projektunterlagen ==
== Projektunterlagen ==

Version vom 29. November 2023, 18:58 Uhr

Autor: Bartos Schwichtenberg & Berta Nissen
Betreuer: Marc Ebmeyer


Einleitung

Das Projekt befasst sich mit der Entwicklung eines "Dosenautomaten mit Dreifachauswahl" im Rahmen des Studiengangs Ba. Mechatronik im 5. Semester. Dieser innovative Automat zeichnet sich durch drei wesentliche Komponenten aus: 1. drei Aktuatoren (Motoren zur Fachauswahl), 2. Sensorik Nr. 1 (Tasteneingabe durch Benutzer), 3. Sensorik Nr. 2 (Beleuchtung für Fachentnahme). Das System funktioniert mit einem(r) Chip/Chipkarte ohne Guthaben und soll der Benutzers erkannt werden. Nach Erkennen wird das Bedienfeld entsperrt. Die Artikelwahl erfolgt über das Bedienfeld des Automaten. Jede Taste ist nur einem Servo zugewiesen und dieser Servo ist nur einem Artikelplatz. Eine Beleuchtung im Ausgabeschacht gibt dem Benutzer den Hinweis, den Artikel aus dem Schacht zu nehmen.

Anforderungen

Tabelle 1: Anforderung an die Komponente
ID Inhalt Ersteller Datum Geprüft von Datum
1 Das Chiplesegerät muss den Chip/Chipkarte erkennen und das Bedienfeld des Automaten entsperren (Benutzererkennung). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
2 Das OLED-Display muss Bereitschaftsbetrieb anzeigen (Begrüßung). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
3 Die Taste 1 steuert nur den Servo 1 an (Artikel von Platz 1). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
4 Die Taste 2 steuert nur den Servo 2 an (Artikel von Platz 2). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
5 Die Taste 3 steuert nur den Servo 3 an (Artikel von Platz 3). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
6 Servo 1 muss zwischen 0° und 90° schwenken (wird vorerst angenommen). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
7 Servo 2 muss zwischen 0° und 90° schwenken (wird vorerst angenommen). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
8 Servo 3 muss zwischen 0° und 90° schwenken (wird vorerst angenommen). Bartos Schwichtenberg 11.10.2023 --- **.10.2023
9 Beleuchtung im Schacht aufblinken/aufleuchten (bis der Artikel entnommen ist). Bartos Schwichtenberg 11.10.2023 --- **.10.2023

Funktionaler Systementwurf/Technischer Systementwurf

Komponentenspezifikation

Tabelle 2: Liste aller Komponenten (in Bearbeitung)
ID Komponente Bezeichnung Abbildung
1 Taster/Tastenfeld in Bearbeitung Beispiel
2 OLED-Display in Bearbeitung Beispiel
3 Status-LED grün in Bearbeitung Beispiel
4 Status-LED rot in Bearbeitung Beispiel
5 Chiplesegerät mit Chip in Bearbeitung Beispiel
6 Plexiglas in Bearbeitung Beispiel
7 Verbrauchsmaterial Holz, Schrauben, Holzleim, Kabel, Lötzinn, Schrumpfschlauch Beispiel

Umsetzung (HW/SW)

Gehäuse

Die Abbildung 4 und 5 zeigt das Gehäuse. Es ist aus Holzplatten zusammen geleimt und verschraubt. Als Schutz dient auf der Vorderseite eine Plexiglasscheibe. Zur einfachen Auffüllung ist auf der Rückseite ein Eingabefach. Die Steuerung der Aktuatoren, Sensoren, Mikrokontroller ist im Gehäuse eingebaut. Die Bedienelektronik befindet sich auf der Vorderseite des Geräts.


Schaltung

Zum Einsatz kommt der Mikrokontroller.

Programmcode

Es wird ein Code in auf den Mikrocontroller geschrieben.

Programmcode in Bearbeitung.

//Bartos Schwichtenberg für Projekt der HSHL, Projektname: Dosenautomat                            
                       //Bibliotheken
#include <Servo.h>          //Bibliothek <Servo.h> hinzugefügt

// Initialisierung der Pins
int blueLed = 6;                    //blaue LED ist auf DigitalPort 6
int redLed = 7;                     //rote LED ist auf DigitalPort 8
int yellowLed = 8;                  //gelbe LED ist auf DigitalPort 8
int greenLed = 9;                   //grüne LED ist auf DigitalPort 9
int motor1 = 10;                    //Servo 1 ist auf DigitalPort 10
int motor2 = 11;                    //Servo 2 ist auf DigitalPort 11
int motor3 = 12;                    //Servo 3 ist auf DigitalPort 12
int button0 = 2;                    //Start-Knopf
int button1 = 3;                    // Taste 1 an Port 3
int button2 = 4;                    // Taste 2 an Port 4
int button3 = 5;                    // Taste 1 an Port 5

// Initialisierung der Servos
Servo servo1;                       //Servo ist ein servo1
Servo servo2;                       //Servo ist ein servo2
Servo servo3;                       //Servo ist ein servo3

                              //void setup Anfang
void setup() {
  pinMode(blueLed, OUTPUT);         //PinMode ist Ausgang
  pinMode(redLed, OUTPUT);          //PinMode ist Ausgang
  pinMode(yellowLed, OUTPUT);       //PinMode ist Ausgang
  pinMode(greenLed, OUTPUT);        //PinMode ist Ausgang
  pinMode(motor1, OUTPUT);          //PinMode ist Ausgang
  pinMode(motor2, OUTPUT);          //PinMode ist Ausgang
  pinMode(motor3, OUTPUT);          //PinMode ist Ausgang
  pinMode(button0, INPUT_PULLUP);   //button0 ist auf PULLUP
  pinMode(button1, INPUT_PULLUP);   //button1 ist auf PULLUP
  pinMode(button2, INPUT_PULLUP);   //button2 ist auf PULLUP
  pinMode(button3, INPUT_PULLUP);   //button3 ist auf PULLUP

  Serial.begin(9600);               //Serial print zur Kontrolle

  digitalWrite(blueLed, HIGH);     //blaue Led ist an
  digitalWrite(redLed, LOW);       //rote Led ist aus
  digitalWrite(yellowLed, LOW);    //gelbe Led ist aus
  digitalWrite(greenLed, LOW);     //grün Led ist aus
  digitalWrite(motor1, LOW);       //motor1 ist aus
  digitalWrite(motor2, LOW);       //motor2 ist aus
  digitalWrite(motor3, LOW);       //motor3 ist aus

  servo1.attach(motor1);           //servo1->motor1
  servo2.attach(motor2);           //servo2->motor2
  servo3.attach(motor3);           //servo3->motor3

  servo1.write(0);                 //motor1 ist auf Position 0
  servo2.write(0);                 //motor2 ist auf Position 0
  servo3.write(0);                 //motor3 ist auf Position 0
}
                              //void setup Ende


                              //void loop Anfang
void loop() {
  if (digitalRead(button1) == LOW) {      //Taste auf LOW prüfen
    if (servo1.read() != 0) {             //servo read !=0
      servo1.write(0);                    //Motor auf 0 stellen
      delay(1000);                        //1000ms = 1Sek Pause
    }
      digitalWrite(motor1, HIGH);         //Motor auf 1 stellen
    digitalWrite(redLed, HIGH);           //LED an
    delay(1000);                          //1000ms = 1Sek Pause
    digitalWrite(motor1, LOW);            //Motor auf 0 stellen
    delay(1000);                          //1000ms = 1Sek Pause
    servo1.write(180);                    //Motor auf 180°
    delay(1000);                          //1000ms = 1Sek Pause
    servo1.write(0);                      //Motor auf 0 stellen
    delay(500);                           //500ms = 0,5Sek Pause
    digitalWrite(redLed, LOW);            //LED aus
    Serial.println("Servo 1 bewegt");     //serial print ob servo/motor sich bewegt
  }
  if (digitalRead(button2) == LOW) {      //Taste auf LOW prüfen
    if (servo2.read() != 0) {             //servo read !=0
      servo2.write(0);                    //Motor auf 0 stellen
      delay(1000);                        //1000ms = 1Sek Pause
    }
    digitalWrite(motor2, HIGH);           //Motor auf 1 stellen
    digitalWrite(yellowLed, HIGH);        //LED an
    delay(1000);                          //1000ms = 1Sek Pause
    digitalWrite(motor2, LOW);            //Motor auf 0 stellen
    delay(1000);                          //1000ms = 1Sek Pause
    servo2.write(180);                    //Motor auf 180°
    delay(1000);                          //1000ms = 1Sek Pause
    servo2.write(0);                      //Motor auf 0 stellen
    delay(500);                           //500ms = 0,5Sek Pause
digitalWrite(yellowLed, LOW);             //LED aus
    Serial.println("Servo 2 bewegt");     //serial print ob servo/motor sich bewegt
  }
  if (digitalRead(button3) == LOW) {      //Taste auf LOW prüfen
    if (servo3.read() != 0) {             //servo read !=0
      servo3.write(0);                    //Motor auf 0 stellen
      delay(1000);                        //1000ms = 1Sek Pause
    }
    digitalWrite(motor3, HIGH);           //Motor auf 1 stellen
    digitalWrite(greenLed, HIGH);         //LED an
    delay(1000);                          //1000ms = 1Sek Pause
    digitalWrite(motor3, LOW);            //Motor auf 0 stellen
    delay(1000);                          //1000ms = 1Sek Pause
    servo3.write(180);                    //Motor auf 180°
    delay(1000);                          //1000ms = 1Sek Pause
    servo3.write(0);                      //Motor auf 0 stellen
    delay(500);                           //500ms = 0,5Sek Pause
    digitalWrite(greenLed, LOW);          //LED aus
    Serial.println("Servo 3 bewegt");     //serial print ob servo/motor sich bewegt
  }

  if (servo1.read() == 0 && servo2.read() == 0 && servo3.read() == 0) {   //servo read ==0 prüfen
    digitalWrite(blueLed, HIGH);      //LED an
    digitalWrite(redLed, LOW);        //LED aus
    digitalWrite(yellowLed, LOW);     //LED aus
    digitalWrite(greenLed, LOW);      //LED aus
  } else {                            //oder
    digitalWrite(blueLed, LOW);       //LED aus
    digitalWrite(redLed, LOW);        //LED aus
    digitalWrite(yellowLed, LOW);     //LED aus
    digitalWrite(greenLed, LOW);      //LED aus
  }
                              // void loop Anfang
}                             // Programmm-Ende

Komponententest

Tabelle 3: Test der Anforderungen (in Bearbeitung)
ID Inhalt Getestet von Datum
1 Der Automat muss mit 5V Spannung versorgt werden. noch offen **.**.2023
2 Die LED soll aufleuchten, damt die Spannungsversorgung angezeigt wird. noch offen **.**.2023
3 OLED-Display muss aufleuchten und vorgegebenen Text ausgeben. noch offen **.**.2023
4 Chiplesegerät muss den korrekten Chip erkennen. noch offen **.**.2023
5 OLED-Display zeigt die Auswahlbereitschaft an. noch offen **.**.2023
6 Durch Tastenauswahl muss tastenabhöngig der richtige Motor (Servo) angesteuert werden. noch offen **.**.2023
7 Informierung des Benutzer zur Entnehmung der Ware (OLED, LED). noch offen **.**.2023

Tabelle 3 zeigt, welche Anforderung vom welchen Bearbeiter getestet wurde. (in Bearbeitung)

Ergebnis

Platzhalter für den Artikel "Ergebnise"

Zusammenfassung

Platzhalter für den Artikel "Zusammenfassung"

Lessons Learned

Platzhalter für den Artikel "Lessons Learned"

Projektunterlagen

Projektplan

Platzhalter für den Artikel "Projektplan"

Projektdurchführung

YouTube Video

Platzhalter für den Artikel "YouTube Video"

Weblinks

Literatur


→ zurück zur Übersicht: WS 22/23: Angewandte Elektrotechnik (BSE)