Dosenautomat: Unterschied zwischen den Versionen
Zeile 167: | Zeile 167: | ||
| <div style="width:800px; height:400px; overflow:scroll; border: hidden"> | | <div style="width:800px; height:400px; overflow:scroll; border: hidden"> | ||
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | ||
//Bibliotheken | //Bibliotheken | ||
#include <Servo.h> | #include <Servo.h> //Bibliothek <Servo.h> hinzugefügt | ||
// Initialisierung der Pins | // 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 | // Initialisierung der Servos | ||
Servo servo1; //Servo ist ein servo1 | Servo servo1; //Servo ist ein servo1 | ||
Servo servo2; //Servo ist ein servo2 | Servo servo2; //Servo ist ein servo2 | ||
Servo servo3; //Servo ist ein servo3 | 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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
</small></small> | </small></small> |
Version vom 28. Oktober 2023, 20:06 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
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
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.
-
Abb. 8 Programmablaufplan (wird noch mit OLED-Ausgabe ergänzt).
Programmcode in Bearbeitung.
|
Komponententest
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
Zusammenfassung
Lessons Learned
Projektunterlagen
Projektplan
Projektdurchführung
YouTube Video
Weblinks
Literatur
→ zurück zur Übersicht: WS 22/23: Angewandte Elektrotechnik (BSE)