Projekt 46: FridgeAlert mit Arduino: Unterschied zwischen den Versionen

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


== Einleitung ==
== Einleitung ==
Das Ziel des Projekts ist die Erstellung eines Kühlschrankalarms. Die Umsetzung sollte mittels einer Arduino UNO Plattform (Rev. 3) erfolgen. Zur Prototypenherstellung wurde ein Proto-Shield verwendet. Als Vorgabe durch die Betreuer sollte 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.
Das Ziel des Projekts ist die Erstellung eines Kühlschrankalarms. Die Umsetzung soll mittels einer Arduino UNO Plattform (Rev. 3) erfolgen. Zur Prototypenherstellung 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]]
[[Datei:PRojektplan.PNG|center|Abbildung 3: Projektstrukturplan]]

Version vom 7. Januar 2017, 19:40 Uhr

Autoren: Cosima Eckert-Ludwig & Oleg Patrusev
Betreuer: Prof. Schneider & Prof. 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 Prototypen 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 Prototypenherstellung 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 wurden 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 ist wurde 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 wurden 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
Temeperatursensor 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 wurden die simulierten Schaltungen auf einem Breedboard in die Realität umgesetzt. Abbildungen x,y zeigen den Arduino Fridge Alert und Abilldungen x,y zeigen den Fridge Alert mit dem Microkontroller Attiny85. Die Programmierung und das Compilen wurden mit der Arduino Software IDE, welche im Kapitel Quellcode genauer betrachtet wird. Die Videos im folgenden Link zeigen die Funktionsüberprüfung der Schaltungen.

Realisierung des Projektteils 1
Die Verschaltung erfolgte mit Kupferkabeln. Din Pinbelegung ist den Schaltplänen zu entnehmen.


Realisierung des Projektteils 2
Die Verschaltung erfolgte mit Kupferkabeln. Din Pinbelegung ist den Schaltplänen zu entnehmen. Beim Brennen des Bootloaders auf den Attiny85 musste 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 musste der Prototyp hergestellt werden. Die nachfolgenden Bilder zeigen den bestellten Sparkfun Proto-Shield, der zunächst gelötet werden musste. Im weiteren Verlauf wurden 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 Compilen des Arduino UNO sowie des Attiny85 erfolgte mittels der Arduino Software IDE. Der Quellcode ist in C++ geschrieben. Abbildung x zeigt den Programmablauplan für das Fridge Alert Programm. Die genaue Funktionsweise des Codes kann dem untenstehenden Quelltext entnommen werden. Zusätzlich sind Parameter erklärt, die die Funktionalität des Arduino Fridge Alerts beinflussen.

//++ 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;

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)/1024.0;

  Temperatur = (Spannungswert/0.01)-272.15; //Berechnug der tatsächlichen Temeperatur

  if (Temperatur>14.5)// 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 für den Attiny85 mussten einige Änderungen vorgenommen werden. Zu einem funktioniert die Softwareimplementierung mit einer Taktfrequenz von 8Mhz. Aus diesem Grund mussten die Delayzeiten angepasst werden. Weiterhin kann 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 musste 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;

void setup(){

  // Deklaration der Ein- und Augä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 Alamrs 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(200);
  digitalWrite(Summer, HIGH);
  delay(100);
  digitalWrite(Summer, LOW);
  delay(200);
  digitalWrite(Summer, HIGH);
  delay(100);
  digitalWrite(Summer, LOW);
  }

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

  Temperatur = (Spannungswert/0.01)-272.15; //Berechnug der tatsächlichen Temeperatur

  if (Temperatur>36)// FEstlegung des Temperaturauslösewertes
  {
  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
  • Miteinberechnnung 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, der die Komponeneten 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
  • 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)