Projekt 46: FridgeAlert mit Arduino: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(100 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Projekte]]
[[Kategorie:Projekte]]
Autoren:  Cosima Eckert-Ludwig & Oleg Patrusev<br/>
Autoren:  [[Benutzer: Cosima_Eckert-Ludwig| Cosima Eckert-Ludwig]] & [[Benutzer: Oleg_Patrusev|Oleg Patrusev]]<br/>  
Betreuer: [[Benutzer:Ulrich_Schneider| Prof. Schneider]] & [[Benutzer:Mirek_Göbel| Prof. Göbel]]
Betreuer: [[Benutzer:Ulrich_Schneider| Prof. Dr. Ulrich Schneider]] & [[Benutzer:Mirekgoebel| Prof. Dr. Mirek Göbel]]
 
[[Datei:FAHaupt-min.jpg|right|thumb|500px|Abbildung 1: Arduino Fridge Alert auf dem Proto Shield]]
<br/><br/><br/>


== Aufgabe ==
== Aufgabe ==
Erstellung eines Kühlschrankalarmes auf der Arduino UNO Plattform zur Überprüfung, ob die Kühlschranktür geschlossen wurde.
Erstellung eines Kühlschrankalarms auf der Arduino UNO Plattform zur Überprüfung, ob die Kühlschranktür geschlossen wurde.


== Erwartungen an die Projektlösung ==
== Erwartungen an die Projektlösung ==
[[Datei:FridgeAlert.jpg|right|thumb|150px|Abbildung 2: Fridge Alert von Desertcart]]
'''Projektteil 1: Arduino Fridge Alert'''
*Untersuchen Sie einen Fridge Alert SO 208  
*Untersuchen Sie einen Fridge Alert SO 208  
*Erstellen Sie das System als prototypischen Eigenbau auf einem Proto-Shield für einen Arduino Uno
*Erstellen Sie das System als prototypischen Eigenbau auf einem Proto Shield für einen Arduino Uno
*Beschaffen Sie die Bauteile
*Beschaffen Sie die Bauteile
*Realisierung und Erprobung des Aufbaus
*Realisierung und Erprobung des Aufbaus
Zeile 15: Zeile 18:
*Test und wiss. Dokumentation  
*Test und wiss. Dokumentation  
*Live Vorführung während der Abschlusspräsentation
*Live Vorführung während der Abschlusspräsentation
<br/>
'''Projektteil 2: Attiny85 Fridge Alert'''
<br/>
Als weiterführende und auf Eigeninitiative basierende Aufgabe ist entschieden worden einen Prototyp herzustellen, der unabhängig von der Arduino Plattform funktioniert.
<br/><br/>
== Schwierigkeitsgrad ==
'''Projektteil 1: Arduino Fridge Alert''' mittel (**), '''(Erweiterung) Projektteil 2: Attiny85 Fridge Alert''' anspruchsvoll (***)


== Einleitung ==
Das Ziel des Projekts ist die Erstellung eines Kühlschrankalarms. Die Umsetzung soll mittels einer Arduino UNO Plattform (Rev. 3) erfolgen. Zur Prototypherstellung wird ein Proto Shield verwendet. Als Vorgabe durch die Betreuer soll ein funktionsfähiges Modell hergestellt werden, welches im Rahmen einer Abschlussveranstaltung vorzuführen ist. Das Projekt gliedert sich in mehrere Meilensteine, welche dem Projektstrukturplan zu entnehmen sind. Weitere Bestandteile des Projekts sind eine angemessene technische Dokumentation, ein spektakuläres Funktionsvideo und dieser WIKI-Eintrag.


[[Datei:PRojektplan.PNG|center|Abbildung 3: Projektstrukturplan]]


== Schwierigkeitsgrad ==
== Analyse der Ist-Situation ==
Teil 1: mittel (**), Erweiterung Teil 2: anspruchsvoll (***)
Der zu untersuchende Fridge Alert SO208 konnte nicht gefunden und analysiert werden. Nach Rücksprache mit den Betreuern ist entschieden worden auf andere Lösungsmöglichkeiten auszuweichen, die realisierbar sind. Bezogen auf die nachfolgende Fall-Analyse sind daher zwei Sensoren ausgewählt: ein Fotowiderstand und ein Temperatursensor
 
=== Fall-Analyse ===
[[Datei:Fridge Alert Vorgang.jpg|right|thumb|200x|Abbildung 4: Ablaufplan der Fälle]]
'''Fall 1:''' Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert/Lichteinstrahlung (ja) - Temperatur des Kühlschranks sinkt -  Alarm HIGH - Kühlschranktür wird zugemacht (ja) - Status OK
<br/><br/>
'''Fall 2:''' Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert nicht/Lichteinstrahlung (nein) - Temperatur des Kühlschranks sinkt - Alarm (HIGH) - Kühlschranktür wird zugemacht (ja) - Status OK
<br/><br/>
'''Fall 3:''' Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert (nicht)/Lichteinstrahlung (ja/nein) - Temperatur des Kühlschranks sinkt - Alarm (HIGH) - Kühlschranktür wird schlecht zugemacht - Alarm (HIGH) - Kühlschranktür wird richtig zugemacht - Status OK
<br/><br/>
Der rechts stehende Ablaufplan visualisiert die Logik der drei vorliegenden Fälle.
<br/><br/>
 
== Umsetzung ==
Die Umsetzung des Projektes kann in drei Schritte unterteilt werden:
*Schritt 1: Aufbau und Simulation mittels der Autodesk Circuits Software
*Schritt 2: Experimenteller Aufbau auf dem Breedboard
*Schritt 3: Fertigung/Lötung des Prototyps
 
=== Aufbau und Simulation mittels der Autodesk Circuits Software ===
 
In dieser Projektphase wird mit verschiedenen Sensoren und Quelltexten experimentiert, um eine optimal realisierbare Lösung zu erstellen. Die unten abgebildeten Schaltungen zeigen die finale Version des Fridge Alerts. Es werden zunächst Teillösungen erstellt, die  z. B. nur aus einem Sensor bestehen. Die Autodesk Software bietet zudem die Möglichkeit den Code virtuell zu simulieren. Abbildungen 5 und 6 zeigen den Aufbau des ersten Projektteils. Abbildungen 8 und 9 stellen den experimentellen Aufbau für den zweiten Projektteil dar. 
 
<gallery class="center">
Datei:Autodesk1.png|Abbildung 5: Autodesk Skizze Arduino FA
Datei:Autodesk2.png|Abbildung 6: Autodesk Schaltplan Arduino FA
Datei:Autodesk3.PNG|Abbildung 7: Autodesk GUI
Datei:BrennenBootloader.PNG|Abbildung 8: Autodesk Skizze auf Attiny85
Datei:AttinyFridgeAlert.PNG|Abbildung 9: Autodesk Skizze Attiny85 FA
</gallery>
<br/>
'''Nachfolgende Tabelle zeigt die verschiedenen Bauteile, die für Projektteil 1 notwendig sind:'''
{| class="wikitable"
|-
! Bauteil                                          !! Typ                      !! Kennwert/Datenblatt
|-
| Fotowiderstand    || Excelitas A9013 Gehäuseart 5mm          || [[:Datei:DBFotowiderstand.pdf|Datenblatt]]
|-
| Temperatursensor  || LM335                                  || [[:Datei:DBTemperatursensor.pdf|Datenblatt]]
|-
| Summer            || Alcron                                  || [[:Datei:Summer.pdf|Datenblatt]]
|-
| Arduino Proto Shield || Sparkfun Rev3  || Baukasten
|-
| Cermet-Trimmer      || liegend, 10mm, || 100 K-Ohm
|-
| Widerstand          || Metallschicht  || 1 K-Ohm
|-
| LED                  || blau          || [[:Datei:LEDblau.pdf|Datenblatt]]
|-
| LED                  || grün          || [[:Datei:LEDgrün.pdf|Datenblatt]]
|}
 
'''Für Projektteil 2 werden folgende Bauelemente zusätzlich benötigt:'''
 
{| class="wikitable"
|-
! Bauteil                                          !! Typ                      !! Kennwert/Datenblatt
|-
| Mikrocontroller    || Attiny 85          || [[:Datei:DBAttiny85.pdf|Datenblatt]]
|-
| Kondensator        || Subminiatur-Elko          || 10µF/16V
|-
| Batteriehalter      || 3xAA        || n.v.
|}


== Einleitung ==
=== Experimenteller Aufbau auf dem Breedboard ===
Die hier vorgestellte Projektarbeit wurde in Rahmen der Lehrveranstaltung Angewandte Elektrotechnik im Wintersemester 2015/16 im Studiengang Business and Systems Engineering bearbeitet. Dieser HSHL-Wiki-Eintrag erläutert dem Leser das Projekt sowie die Projektergebnisse.
In dieser Projektphase werden die simulierten Schaltungen auf einem Breedboard in die Realität umgesetzt. Abbildungen 12 zeigt den Arduino Fridge Alert und Abbildung 13 zeigt den Fridge Alert mit dem Mikrocontroller Attiny85. Die Programmierung und das Compilieren geschieht mit der Arduino Software IDE. Dies wird im Kapitel Quellcode genauer betrachtet. Die Videos in den folgenden Links (
[https://youtu.be/glKKpO_qUQI Video 1],
[https://youtu.be/wkMGzVvMReI Video 2]) zeigen die Funktionsüberprüfung der Schaltungen.


=== Aufgabenstellung ===
'''Realisierung des Projektteils 1'''<br/>
Die Aufgabe dieser Projektarbeit bestand darin, einen Projektor auf ein Fahrrad zu montieren und eine Animation bzw. einen Text auf der Straße abzuspielen. Die Animation bzw. der Text soll sich in Abhängigkeit der Fahrgeschwindigkeit verändern.
Die Verschaltung erfolgt mit Kupferkabeln. Die Pinbelegung ist dem Schaltplan der Abbildungen 11 zu entnehmen.  
Im Verlauf der Planphase wurde die Aufgabenstellung erweitert. Die Erweiterung bestand darin, dass für die Umsetzung der Projektarbeit ein Raspberry Pi und die Software Simulink eingesetzt werden sollen.
<gallery class="center">
Datei:KomponentenFA.jpg|Abbildung 10: Komponentenbild
Datei:Autodesk2.png|Abbildung 11: Schaltplan Arduino FA
Datei:ArduinoFA.jpg|Abbildung 12: Probeaufbau Arduino FA
</gallery>
<br/>


=== Benötigtes Material ===
'''Realisierung des Projektteils 2'''<br/>
[[Datei:material.jpg|right|thumb|350px|Abbildung 2: Verwendete Bauteile]]
Die Verschaltung erfolgte mit Kupferkabeln. Din Pinbelegung sind den Schaltplänen der Abbildungen 15 und 18 zu entnehmen. Beim Brennen des Bootloaders auf den Attiny85 muss zusätzlich ein 10µF Kondensator eingefügt werden, um die Reset-Funktion des Arduinos zu unterdrücken.
Das zur Lösung der Projektarbeit verwendete Material besteht aus:
<gallery class="center">
* 1 x Malerroller (zur Fahrradsimulation)
Datei:BrennenBootloaderR.jpg|Abbildung 13: Brennen des Bootloaders
* 1 x  Kabelrolle
Datei:BrennenBootloader.PNG|Abbildung 14: Autodesk Brennen des Bootloaders
* 4 x Permanent-Magnete
Datei:BrennenBootloaderSP.PNG|Abbildung 15: Schaltplan Brennen des Bootloaders
* 1 x Hall-Sensor
Datei:attiny85FA.jpg|Abbildung 16: Attiny85 FA
* 1 x DLP Projektor
Datei:AttinyFridgeAlert.PNG|Abbildung 17: Autodesk Attiny85 FA
* 1 x HDMI-Kabel
Datei:AttinyFridgeAlertSP.PNG|Abbildung 18: Schaltplan Attiny85 FA
* 1 x micro SDHC-Karte (min. 8 GB)
* 1 x Powerbox (Akku)
* 1 x Raspberry Pis 2 Model B
* 1 x Flachbandkabel
* 1 x  RJ45-Kabel
* 1 x MicroUSB-Kabel
=== Systemaufbau ===
Das Gesamt-System wird unterteilt in zwei Teilsysteme: Software und Hardware. Die Software wird im Kapitel Matlab/Simulinkmodell vorgestellt und der Hardwareaufbau kann der Abbildung 3 entnommen werden.
<gallery>
Datei:Hardwareaufbau.jpg|Abbildung 3: Hardwareaufbau
</gallery>
</gallery>
<br/>
=== Fertigung/Lötung des Prototyps ===


== Raspberry Pi 2 konfigurieren und verbinden ==
Nach dem Test der Schaltungen wird der Prototyp hergestellt. Die nachfolgenden Bilder zeigen das bestellte Sparkfun Proto Shield, welches zunächst gelötet werden muss. Im weiteren Verlauf wird die Komponenten des Arduino Fridge Alerts auf die Oberfläche gelötet. Dieser funktioniert als ein Steckaufsatz für den Arduino.
Die Anleitung zur Raspberry Pi 2 Konfiguration und Inbetriebnahme kann unter diesem [http://193.175.248.52/wiki/index.php/Projekt_45:_Simulink_Bildverarbeitung#Raspberry_Pi_2_einrichten_und_Verbindung_aufbauen Link] abgerufen werden.
 
== Matlab/Simulinkmodell ==
<gallery class="center">
[[Datei:simulink.jpg|right|thumb|350px|Abbildung 4: Simulinkmodell]]
Datei:KomponentenPS.jpg|Abbildung 19: Komponenten Proto Shield
Zum Starten des Simulinkmodells ist es erforderlich die „start.m“ Matlab-Datei zu öffnen und zu kompilieren. Die „start.m“ Matlab-Datei besteht im Wesentlichen aus drei Befehlen. Der Befehl black = zeros(1184, 624,3); generiert ein schwarzes Bild mit der Größe 1184 px x 624 px. In der Zeile 11 wird der halbe Umfang des Rades bestimmt. Der Aufruf des Simulinkmodells erfolgt in der Zeile 14.
Datei:PS.jpg|Abbildung 20: gelöteter Proto Shield
<gallery>
Datei:PSfertig.jpg|Abbildung 21: Arduino FA mit Proto Shield
Datei:uhr.jpg|Abbildung 5: Bestimmung der verstrichenen Zeit
Datei:subsystem.jpg|Abbildung 6: Berechnung der akt. Geschwindikeit
Datei:bild.jpg|Abbildung 7: Bildausgabe auf den Raspberry Pi
</gallery>
</gallery>
Das Simulinkmodell besteht, wie der Abbildung 4 zu entnehmen ist, aus fünf verschiedenen Blöcken.
<br/>
Dabei ist der Cyan- und Magenta-Block Raspberry PI Blöcke. Der Cyan gefärbte Block ist ein Eingangssignal und der Magenta gefärbte Block ein Ausgangssignal des Raspberry Pi.
 
Die grün, gelb und rot eingefärbten Blöcke entsprechen Unterfunktionen des Simulinkmodells.
== Code ==
Dabei, wie der Abbildung 5 zu entnehmen ist, ist der grün eingefärbte Block lediglich eine Hilfs-Uhr mit der die Zeit bestimmt wird.
===Projektteil 1: Arduino Fridge Alert===
In dem Gelb eingefärbten Block wird die Geschwindigkeit bestimmt (siehe Abbildung 6).
[[Datei:FridgeAlertArduino.jpg|right|thumb|1000x|Abbildung 3: Ablaufplan der Fälle]]
Das rot eingefärbte Subsystem (siege Abbildung 7) generiert aus dem zu Anfang erzeugten schwarzen Bild, ein Bild mit einer textuellen Animation. Bei der textuellen Animation handelt es sich um die im vorherigen Block berechnete Geschwindigkeit.
 
Die Programmierung und das Compilieren des Arduino UNO sowie des Attiny85 erfolgt mittels der Arduino Software IDE. Der Quellcode ist in C++ geschrieben. Abbildung 3 zeigt den Programmablaufplan für das Fridge Alert-Programm. Die genaue Funktionsweise des Codes kann dem folgenden Quelltext entnommen werden. Zusätzlich sind Parameter erklärt, die die Funktionalität des Arduino Fridge Alerts beeinflussen.
<br/><br/>
 
<source lang=c>
//++ Fridge Alert Code ++//
//++ erstellt und bearbeitet von Cosima Eckert Ludwig & Oleg Patrusev ++//
//++ HS Hamm/Lippstadt ++//
//++ Studiengang: Business & Systems Engineering ++//
//++ Modul Angewandte Elektrotechnik ++//
 
 
// Variablendeklarationen
int Summer = 6; //Summer/Piezo Keramik 3V
int TSensor =  A0; //LM 335
int LDRWiderstand = A2; //Fotowiderstand Excelitas A 9013
int Lichtsignal = 8; //LED rot
int Messindikator =2; //LED blau
int variablerWiderstand; //100 kOhm
 
float Betriebsspannung = 5; //Festlegen der Betriebsspannung
float Temperatur; 
float Spannungswert;
float SpannungswertAusgelesen;
float LDRWert;
float Auslöseschwelle = 14.5; //Auslöseschwelle für den Temperatursensor//variabel
float Anpassungswert1 = 1024; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float Anpassungswert2 = 0.01; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float absoluterNullpunkt = 273; ////nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
 
void setup(){
 
  // Deklaration der Ein- und Augänge auf dem Arduino
  Serial.begin(9600);
  pinMode(Messindikator, OUTPUT);
  pinMode(Lichtsignal, OUTPUT);
  pinMode(Summer, OUTPUT);
  pinMode(LDRWiderstand, INPUT); 
  pinMode(TSensor, INPUT);
}
 
void loop(){
  digitalWrite(Messindikator,LOW); //Einleitung Messung - optisches Signal durch die blaue LED
  delay(750); // Regulierung Messfrequenz
  digitalWrite(Messindikator, HIGH);
  delay(500); // Regulierung Messfrequenz
  digitalWrite(Messindikator, LOW);
 
 
  LDRWert=analogRead(LDRWiderstand); //Auslesen des LDR Werts
 
  // Auslösung des audiovisuellen Alamrs durch den LDR Widerstand
  if (LDRWert==0)
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(3500); // Zeitverzögerung beim Öffnen der Kühlschranktür 
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
    delay(500);
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
    delay(500);
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
  }
 
  SpannungswertAusgelesen = analogRead(TSensor); // Auslesen des TS Sensors
  Spannungswert = (SpannungswertAusgelesen*Betriebsspannung)/Anpassungswert1;
 
  Temperatur = (Spannungswert/Anpassungswert2)-absoluterNullpunkt; //Berechnung der tatsächlichen Temperatur
 
  if (Temperatur>Auslöseschwelle)// Festlegung des Temperaturauslösewertes
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(4000);
    digitalWrite(Summer, HIGH);
    delay(2000);
    digitalWrite(Summer, LOW);
  }
 
  if (LDRWert>0) //Ausschalten des Alarms
  {
    digitalWrite(Summer, LOW);
    digitalWrite(Lichtsignal, LOW);
  }
 
  Serial.print("\nDer LDRWert betraegt "); //Ausgabe am SerialMonitor
  Serial.println(LDRWert); 
 
  Serial.print("Die Temperatur betraegt ");// Ausgabe am SerialMonitor
  Serial.println(Temperatur);
 
}
</source>
 
Mit dem Tastenkürzel Strg + Umschalt + M lässt sich in der Arduino Software IDE der serielle Monitor öffnen, der die aktuellen Messwerte in einer bestimmbaren Frequenz ausgibt.
 
===Projektteil 2: Attiny85 Fridge Alert===
Für den Code des Attiny85 müssen einige Änderungen vorgenommen werden. Zum einen funktioniert die Softwareimplementierung mit einer Taktfrequenz von 8Mhz. Aus diesem Grund müssen die Delayzeiten angepasst werden. Weiterhin kann  keine Ausgabe am Serial Monitor erfolgen. Der AttinyFA funktioniert im Gegensatz zu dem Arduino FA (5V) mit einer Spannung von 4,5 V. Für eine möglichst genaue Funktion des Temperatursensors muss dieser Wert entsprechend angepasst werden.
<br/><br/>
<source lang=c>
//++ Fridge Alert Code ++//
//++ erstellt und bearbeitet von Cosima Eckert Ludwig & Oleg Patrusev ++//
//++ HS Hamm/Lippstadt ++//
//++ Studiengang: Business & Systems Engineering ++//
//++ Modul Angewandte Elektrotechnik ++//
 
 
// Variablendeklarationen
int Summer = 0; //Summer/Piezo Keramik 3V
int TSensor =  A3; //LM 335
int LDRWiderstand = A2; //Fotowiderstand Excelitas A 9013
int Lichtsignal = 1; //LED rot
int Messindikator = 2; //LED blau
float Betriebsspannung = 4.34; //Festlegen der Betriebsspannung
float Temperatur; 
float Spannungswert;
float SpannungswertAusgelesen;
float LDRWert;
float Auslöseschwelle = 14.5; //Auslöseschwelle für den Temperatursensor//variabel
float Anpassungswert1 = 1024; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float Anpassungswert2 = 0.01; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float absoluterNullpunkt = 273; ////nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
 
 
void setup(){
 
  // Deklaration der Ein- und Ausgänge auf dem Arduino
 
  pinMode(Messindikator, OUTPUT);
  pinMode(Lichtsignal, OUTPUT);
  pinMode(Summer, OUTPUT);
  pinMode(LDRWiderstand, INPUT); 
  pinMode(TSensor, INPUT);
}
 
void loop(){
  digitalWrite(Messindikator,LOW); //Einleitung Messung - optisches Signal durch die blaue LED
  delay(100); // Regulierung Messfrequenz
  digitalWrite(Messindikator, HIGH);
  delay(80); // Regulierung Messfrequenz
  digitalWrite(Messindikator, LOW);
 
 
  LDRWert=analogRead(LDRWiderstand); //Auslesen des LDR Werts
 
  // Auslösung des audiovisuellen Alarms durch den LDR Widerstand
  if (LDRWert==0)
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(1000); // Zeitverzögerung beim Öffnen der Kühlschranktür 
    digitalWrite(Summer, HIGH);
    delay(100);
    digitalWrite(Summer, LOW);
    delay(100);
    digitalWrite(Summer, LOW);
    delay(100);
    digitalWrite(Summer, LOW);
  }
 
  SpannungswertAusgelesen = analogRead(TSensor); // Auslesen des TS Sensors
  Spannungswert = (SpannungswertAusgelesen*Betriebsspannung)/Anpassungswert1;
 
  Temperatur = (Spannungswert/Anpassungswert2)-absoluterNullpunkt; //Berechnung der tatsächlichen Temperatur
 
  if (Temperatur>Auslöseschwelle)// Festlegung des Temperaturauslösewerts
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(1000);
    digitalWrite(Summer, HIGH);
    delay(300);
    digitalWrite(Summer, LOW);
  }
 
  if (LDRWert>0 && Temperatur<36) //Ausschalten des Alarms
  {
    digitalWrite(Summer, LOW);
    digitalWrite(Lichtsignal, LOW);
  }
}
</source>
 
== Fazit und Ausblick ==
== Fazit und Ausblick ==
Das im Rahmen der Veranstaltung durchgeführte Projekt erfüllt die gestellten Anforderungen. Die Schwierigkeit des Projektes würde sich erhöhen, wenn statt dem Raspberry Pi ein handelsübliches Smartphone verwendet werden soll. Dabei liegt die Herausforderung bei der Erweiterung des Projektes, indem statt einer einfachen Animation, der Projektor zur Signalisierung der Fahrtrichtung bzw. Navigation dienen würde.
Das Projekt konnte erfolgreich umgesetzt werden. Mögliche Verbesserungsvorschläge sind:
*Verwendung eines empfindlicheren Temperatursensors
*Einberechnung der kleineren Leitfähigkeit bei niedrigen Temperaturen
 
Projektteil 2 wurde zum überwiegenden Teil umgesetzt. Mögliche weitere Schritte wären das Zusammenlöten (auf einer Lochrasterplatine) oder die Erstellung einer Platine mittels des Fräsbohrplotters. Weiterhin könnte ein Gehäuse mit einem 3D Drucker erstellt werden, das die Komponenten Energiequelle und Platine vereint. Aus zeitlichen Gründen konnten diese Schritte nicht umgesetzt werden.
 
== Youtube-Video ==
== Youtube-Video ==
Das für dieses Projekt entstandene Video kann unter der folgenden URL abgerufen werden.
Das spektakuläre Video, welches für dieses Projekt gedreht werden sollte, befindet sich in der hinterlegten URL. Die Beschreibung der Funktionalität ist in dem Feld Beschreibung hinterlegt.
[https://youtu.be/AR56oK7fYB8 YouTube-Link]
[https://youtu.be/ieyU6nwY4QY YouTube-Video]
 
== Lessons learned ==
*Eine gute Planung ist essentiell für das erfolgreiche Umsetzen eines Projektes
*Eine Simulationssoftware ermöglicht es, die Kosten und den Arbeitsaufwand zu minimieren
*Basiswissen über Mikrocontroller
*Auslegung von einfachen Prototypen


== Weiterführende Links ==
== Weiterführende Links ==
* [http://makezine.com/projects/cycle-chaser/ Originalartikel auf makezine.com]
* [https://circuits.io/circuits/2846643-the-unnamed-circuit#settings AutodeskCircuits]
* [https://www.youtube.com/watch?t=8&v=jTVK2V4RGng YouTube: Implementierungsbeispiel]
* [http://www.instructables.com/id/Fridge-Door-Detector-Alarm/ Umsetzungsbeispiel Fridge Alert]
* [http://www.instructables.com/id/Using-the-LM335-Temperature-Sensor/ Temperatursensor]
* [https://www.youtube.com/watch?v=i9WOwDrpRKs Brennen des Bootloaders]






----
----
→ zurück zum Hauptartikel: [[Angewandte_Elektrotechnik_(WS_15/16)|Angewandte Elektrotechnik (WS 15/16)]]
→ zurück zum Hauptartikel: [[Angewandte_Elektrotechnik_(WS_16/17)|Angewandte Elektrotechnik (WS 16/17)]]

Aktuelle Version vom 18. Januar 2017, 21:06 Uhr

Autoren: Cosima Eckert-Ludwig & Oleg Patrusev
Betreuer: Prof. Dr. Ulrich Schneider & Prof. Dr. Mirek Göbel

Abbildung 1: Arduino Fridge Alert auf dem Proto Shield




Aufgabe

Erstellung eines Kühlschrankalarms auf der Arduino UNO Plattform zur Überprüfung, ob die Kühlschranktür geschlossen wurde.

Erwartungen an die Projektlösung

Abbildung 2: Fridge Alert von Desertcart

Projektteil 1: Arduino Fridge Alert

  • Untersuchen Sie einen Fridge Alert SO 208
  • Erstellen Sie das System als prototypischen Eigenbau auf einem Proto Shield für einen Arduino Uno
  • Beschaffen Sie die Bauteile
  • Realisierung und Erprobung des Aufbaus
  • Machen Sie ein spektakuläres Video, welches die Funktion visualisiert.
  • Test und wiss. Dokumentation
  • Live Vorführung während der Abschlusspräsentation


Projektteil 2: Attiny85 Fridge Alert
Als weiterführende und auf Eigeninitiative basierende Aufgabe ist entschieden worden einen Prototyp herzustellen, der unabhängig von der Arduino Plattform funktioniert.

Schwierigkeitsgrad

Projektteil 1: Arduino Fridge Alert mittel (**), (Erweiterung) Projektteil 2: Attiny85 Fridge Alert anspruchsvoll (***)

Einleitung

Das Ziel des Projekts ist die Erstellung eines Kühlschrankalarms. Die Umsetzung soll mittels einer Arduino UNO Plattform (Rev. 3) erfolgen. Zur Prototypherstellung wird ein Proto Shield verwendet. Als Vorgabe durch die Betreuer soll ein funktionsfähiges Modell hergestellt werden, welches im Rahmen einer Abschlussveranstaltung vorzuführen ist. Das Projekt gliedert sich in mehrere Meilensteine, welche dem Projektstrukturplan zu entnehmen sind. Weitere Bestandteile des Projekts sind eine angemessene technische Dokumentation, ein spektakuläres Funktionsvideo und dieser WIKI-Eintrag.

Abbildung 3: Projektstrukturplan
Abbildung 3: Projektstrukturplan

Analyse der Ist-Situation

Der zu untersuchende Fridge Alert SO208 konnte nicht gefunden und analysiert werden. Nach Rücksprache mit den Betreuern ist entschieden worden auf andere Lösungsmöglichkeiten auszuweichen, die realisierbar sind. Bezogen auf die nachfolgende Fall-Analyse sind daher zwei Sensoren ausgewählt: ein Fotowiderstand und ein Temperatursensor

Fall-Analyse

Abbildung 4: Ablaufplan der Fälle

Fall 1: Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert/Lichteinstrahlung (ja) - Temperatur des Kühlschranks sinkt - Alarm HIGH - Kühlschranktür wird zugemacht (ja) - Status OK

Fall 2: Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert nicht/Lichteinstrahlung (nein) - Temperatur des Kühlschranks sinkt - Alarm (HIGH) - Kühlschranktür wird zugemacht (ja) - Status OK

Fall 3: Die Kühlschranktür wird geöffnet - Lichtquelle des Kühlschranks funktioniert (nicht)/Lichteinstrahlung (ja/nein) - Temperatur des Kühlschranks sinkt - Alarm (HIGH) - Kühlschranktür wird schlecht zugemacht - Alarm (HIGH) - Kühlschranktür wird richtig zugemacht - Status OK

Der rechts stehende Ablaufplan visualisiert die Logik der drei vorliegenden Fälle.

Umsetzung

Die Umsetzung des Projektes kann in drei Schritte unterteilt werden:

  • Schritt 1: Aufbau und Simulation mittels der Autodesk Circuits Software
  • Schritt 2: Experimenteller Aufbau auf dem Breedboard
  • Schritt 3: Fertigung/Lötung des Prototyps

Aufbau und Simulation mittels der Autodesk Circuits Software

In dieser Projektphase wird mit verschiedenen Sensoren und Quelltexten experimentiert, um eine optimal realisierbare Lösung zu erstellen. Die unten abgebildeten Schaltungen zeigen die finale Version des Fridge Alerts. Es werden zunächst Teillösungen erstellt, die z. B. nur aus einem Sensor bestehen. Die Autodesk Software bietet zudem die Möglichkeit den Code virtuell zu simulieren. Abbildungen 5 und 6 zeigen den Aufbau des ersten Projektteils. Abbildungen 8 und 9 stellen den experimentellen Aufbau für den zweiten Projektteil dar.


Nachfolgende Tabelle zeigt die verschiedenen Bauteile, die für Projektteil 1 notwendig sind:

Bauteil Typ Kennwert/Datenblatt
Fotowiderstand Excelitas A9013 Gehäuseart 5mm Datenblatt
Temperatursensor LM335 Datenblatt
Summer Alcron Datenblatt
Arduino Proto Shield Sparkfun Rev3 Baukasten
Cermet-Trimmer liegend, 10mm, 100 K-Ohm
Widerstand Metallschicht 1 K-Ohm
LED blau Datenblatt
LED grün Datenblatt

Für Projektteil 2 werden folgende Bauelemente zusätzlich benötigt:

Bauteil Typ Kennwert/Datenblatt
Mikrocontroller Attiny 85 Datenblatt
Kondensator Subminiatur-Elko 10µF/16V
Batteriehalter 3xAA n.v.

Experimenteller Aufbau auf dem Breedboard

In dieser Projektphase werden die simulierten Schaltungen auf einem Breedboard in die Realität umgesetzt. Abbildungen 12 zeigt den Arduino Fridge Alert und Abbildung 13 zeigt den Fridge Alert mit dem Mikrocontroller Attiny85. Die Programmierung und das Compilieren geschieht mit der Arduino Software IDE. Dies wird im Kapitel Quellcode genauer betrachtet. Die Videos in den folgenden Links ( Video 1, Video 2) zeigen die Funktionsüberprüfung der Schaltungen.

Realisierung des Projektteils 1
Die Verschaltung erfolgt mit Kupferkabeln. Die Pinbelegung ist dem Schaltplan der Abbildungen 11 zu entnehmen.


Realisierung des Projektteils 2
Die Verschaltung erfolgte mit Kupferkabeln. Din Pinbelegung sind den Schaltplänen der Abbildungen 15 und 18 zu entnehmen. Beim Brennen des Bootloaders auf den Attiny85 muss zusätzlich ein 10µF Kondensator eingefügt werden, um die Reset-Funktion des Arduinos zu unterdrücken.


Fertigung/Lötung des Prototyps

Nach dem Test der Schaltungen wird der Prototyp hergestellt. Die nachfolgenden Bilder zeigen das bestellte Sparkfun Proto Shield, welches zunächst gelötet werden muss. Im weiteren Verlauf wird die Komponenten des Arduino Fridge Alerts auf die Oberfläche gelötet. Dieser funktioniert als ein Steckaufsatz für den Arduino.


Code

Projektteil 1: Arduino Fridge Alert

Abbildung 3: Ablaufplan der Fälle

Die Programmierung und das Compilieren des Arduino UNO sowie des Attiny85 erfolgt mittels der Arduino Software IDE. Der Quellcode ist in C++ geschrieben. Abbildung 3 zeigt den Programmablaufplan für das Fridge Alert-Programm. Die genaue Funktionsweise des Codes kann dem folgenden Quelltext entnommen werden. Zusätzlich sind Parameter erklärt, die die Funktionalität des Arduino Fridge Alerts beeinflussen.

//++ Fridge Alert Code ++//
//++ erstellt und bearbeitet von Cosima Eckert Ludwig & Oleg Patrusev ++//
//++ HS Hamm/Lippstadt ++//
//++ Studiengang: Business & Systems Engineering ++//
//++ Modul Angewandte Elektrotechnik ++//


// Variablendeklarationen
int Summer = 6; //Summer/Piezo Keramik 3V
int TSensor =  A0; //LM 335
int LDRWiderstand = A2; //Fotowiderstand Excelitas A 9013
int Lichtsignal = 8; //LED rot
int Messindikator =2; //LED blau
int variablerWiderstand; //100 kOhm 

float Betriebsspannung = 5; //Festlegen der Betriebsspannung
float Temperatur;  
float Spannungswert;
float SpannungswertAusgelesen;
float LDRWert;
float Auslöseschwelle = 14.5; //Auslöseschwelle für den Temperatursensor//variabel
float Anpassungswert1 = 1024; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float Anpassungswert2 = 0.01; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float absoluterNullpunkt = 273; ////nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur

void setup(){

  // Deklaration der Ein- und Augänge auf dem Arduino
  Serial.begin(9600);
  pinMode(Messindikator, OUTPUT);
  pinMode(Lichtsignal, OUTPUT);
  pinMode(Summer, OUTPUT);
  pinMode(LDRWiderstand, INPUT);  
  pinMode(TSensor, INPUT);
}

void loop(){
  digitalWrite(Messindikator,LOW); //Einleitung Messung - optisches Signal durch die blaue LED
  delay(750); // Regulierung Messfrequenz
  digitalWrite(Messindikator, HIGH);
  delay(500); // Regulierung Messfrequenz
  digitalWrite(Messindikator, LOW);
  

  LDRWert=analogRead(LDRWiderstand); //Auslesen des LDR Werts

  // Auslösung des audiovisuellen Alamrs durch den LDR Widerstand
  if (LDRWert==0)
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(3500); // Zeitverzögerung beim Öffnen der Kühlschranktür  
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
    delay(500);
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
    delay(500);
    digitalWrite(Summer, HIGH);
    delay(250);
    digitalWrite(Summer, LOW);
  }

  SpannungswertAusgelesen = analogRead(TSensor); // Auslesen des TS Sensors
  Spannungswert = (SpannungswertAusgelesen*Betriebsspannung)/Anpassungswert1;

  Temperatur = (Spannungswert/Anpassungswert2)-absoluterNullpunkt; //Berechnung der tatsächlichen Temperatur

  if (Temperatur>Auslöseschwelle)// Festlegung des Temperaturauslösewertes
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(4000);
    digitalWrite(Summer, HIGH); 
    delay(2000);
    digitalWrite(Summer, LOW);
  }
  
  if (LDRWert>0) //Ausschalten des Alarms
  {
    digitalWrite(Summer, LOW);
    digitalWrite(Lichtsignal, LOW);
  } 

  Serial.print("\nDer LDRWert betraegt "); //Ausgabe am SerialMonitor
  Serial.println(LDRWert);  

  Serial.print("Die Temperatur betraegt ");// Ausgabe am SerialMonitor
  Serial.println(Temperatur);

}

Mit dem Tastenkürzel Strg + Umschalt + M lässt sich in der Arduino Software IDE der serielle Monitor öffnen, der die aktuellen Messwerte in einer bestimmbaren Frequenz ausgibt.

Projektteil 2: Attiny85 Fridge Alert

Für den Code des Attiny85 müssen einige Änderungen vorgenommen werden. Zum einen funktioniert die Softwareimplementierung mit einer Taktfrequenz von 8Mhz. Aus diesem Grund müssen die Delayzeiten angepasst werden. Weiterhin kann keine Ausgabe am Serial Monitor erfolgen. Der AttinyFA funktioniert im Gegensatz zu dem Arduino FA (5V) mit einer Spannung von 4,5 V. Für eine möglichst genaue Funktion des Temperatursensors muss dieser Wert entsprechend angepasst werden.

//++ Fridge Alert Code ++//
//++ erstellt und bearbeitet von Cosima Eckert Ludwig & Oleg Patrusev ++//
//++ HS Hamm/Lippstadt ++//
//++ Studiengang: Business & Systems Engineering ++//
//++ Modul Angewandte Elektrotechnik ++//


// Variablendeklarationen
int Summer = 0; //Summer/Piezo Keramik 3V
int TSensor =  A3; //LM 335
int LDRWiderstand = A2; //Fotowiderstand Excelitas A 9013
int Lichtsignal = 1; //LED rot
int Messindikator = 2; //LED blau
 
float Betriebsspannung = 4.34; //Festlegen der Betriebsspannung
float Temperatur;  
float Spannungswert;
float SpannungswertAusgelesen;
float LDRWert;
float Auslöseschwelle = 14.5; //Auslöseschwelle für den Temperatursensor//variabel
float Anpassungswert1 = 1024; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float Anpassungswert2 = 0.01; //nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur
float absoluterNullpunkt = 273; ////nicht verändern//Anpassungswert für die Berechnung der richtigen Temperatur


void setup(){

  // Deklaration der Ein- und Ausgänge auf dem Arduino

  pinMode(Messindikator, OUTPUT);
  pinMode(Lichtsignal, OUTPUT);
  pinMode(Summer, OUTPUT);
  pinMode(LDRWiderstand, INPUT);  
  pinMode(TSensor, INPUT);
}

void loop(){
  digitalWrite(Messindikator,LOW); //Einleitung Messung - optisches Signal durch die blaue LED
  delay(100); // Regulierung Messfrequenz
  digitalWrite(Messindikator, HIGH);
  delay(80); // Regulierung Messfrequenz
  digitalWrite(Messindikator, LOW);
  

  LDRWert=analogRead(LDRWiderstand); //Auslesen des LDR Werts

  // Auslösung des audiovisuellen Alarms durch den LDR Widerstand
  if (LDRWert==0)
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(1000); // Zeitverzögerung beim Öffnen der Kühlschranktür  
    digitalWrite(Summer, HIGH);
    delay(100);
    digitalWrite(Summer, LOW);
    delay(100);
    digitalWrite(Summer, LOW);
    delay(100);
    digitalWrite(Summer, LOW);
  }

  SpannungswertAusgelesen = analogRead(TSensor); // Auslesen des TS Sensors
  Spannungswert = (SpannungswertAusgelesen*Betriebsspannung)/Anpassungswert1;

  Temperatur = (Spannungswert/Anpassungswert2)-absoluterNullpunkt; //Berechnung der tatsächlichen Temperatur

  if (Temperatur>Auslöseschwelle)// Festlegung des Temperaturauslösewerts
  {
    digitalWrite(Lichtsignal, HIGH);
    delay(1000);
    digitalWrite(Summer, HIGH); 
    delay(300);
    digitalWrite(Summer, LOW);
  }
  
  if (LDRWert>0 && Temperatur<36) //Ausschalten des Alarms
  {
    digitalWrite(Summer, LOW);
    digitalWrite(Lichtsignal, LOW);
  } 
}

Fazit und Ausblick

Das Projekt konnte erfolgreich umgesetzt werden. Mögliche Verbesserungsvorschläge sind:

  • Verwendung eines empfindlicheren Temperatursensors
  • Einberechnung der kleineren Leitfähigkeit bei niedrigen Temperaturen

Projektteil 2 wurde zum überwiegenden Teil umgesetzt. Mögliche weitere Schritte wären das Zusammenlöten (auf einer Lochrasterplatine) oder die Erstellung einer Platine mittels des Fräsbohrplotters. Weiterhin könnte ein Gehäuse mit einem 3D Drucker erstellt werden, das die Komponenten Energiequelle und Platine vereint. Aus zeitlichen Gründen konnten diese Schritte nicht umgesetzt werden.

Youtube-Video

Das spektakuläre Video, welches für dieses Projekt gedreht werden sollte, befindet sich in der hinterlegten URL. Die Beschreibung der Funktionalität ist in dem Feld Beschreibung hinterlegt. YouTube-Video

Lessons learned

  • Eine gute Planung ist essentiell für das erfolgreiche Umsetzen eines Projektes
  • Eine Simulationssoftware ermöglicht es, die Kosten und den Arbeitsaufwand zu minimieren
  • Basiswissen über Mikrocontroller
  • Auslegung von einfachen Prototypen

Weiterführende Links



→ zurück zum Hauptartikel: Angewandte Elektrotechnik (WS 16/17)