Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik WU_Info Arduino 2019-20 Porth, Florian Arduino Projektvorstellung Seifen-/Desinfektionsspender (Arduino - Projekt)

Seifen-/Desinfektionsspender (Arduino - Projekt)

Bei der Suche nach interessanten Projekten im World Wide Web bin ich auf diesen Seifen- oder Desinfektionsspender gestoßen, der thematisch ja ziemlich gut zur aktuellen Situation passt ;-)


Material:

  1. Arduino Genuino UNO
  2. Sharp Abstands-Infrarotsensor
  3. Servomotor mit Kreuz
  4. Seil
  5. Seifen- oder Desinfekionsspender mit Pumpe

Beschreibung:

Das Grundprinzip ist eigentlich ziemlich simpel. Ein gespanntes Seil, welches auf einer Seite an einem Servomotor befestigt wurde, kann ein Hebel eines Seifen- oder Desinfektionsmittelspender nach unten gezogen werden. Gesteuert wird das ganze über einen Arduino UNO; die Auslösung erfolgt über einen Infrarot - Entfernungssensor, der registriert, ob sich eine Hand dem Spender nähert.

Das Gesamtpaket besteht aus zwei Teilschaltungen: Zum einen den Infrarotsensor, der über +5V und GND angeschlossen wird und den Servomotor - ebenfalls über +5V und GND versorgt.

Pinzuteilung:

Arduino-Pin Anschluss Bauteil
+5V Infr.S: +5V
GND1 Infr.S: GND
A0 Infr.S: Signal
   
+5V Servo: +5V
GND2 Servo: GND
D7 Servo: Signal


Verkabelung - grafische Darstellung des Aufbaus:

Aufbau_Seifenspender

Quelle: https://starthardware.org/wp-content/uploads/2020/03/arduino-seifenspender.jpg
 

Einrichtung der Positionen; Ermittlung der Werte:

Der Sensor reagiert in einem Messbereich von ca. 10-30 cm. Am besten macht man zuerst einen "Trockentest" um die benötigten Messwerte zu ermittlen:

Wenn die Werte korrekt ermittelt wurden (hierfür ist vermutlich etwas Geduld gefragt), können sie an den entsprechenden Stellen im Sketch eingearbeitet werden. Für das Ablesen der Werte eignet sich der serielle Monitor (s.u.), wenn man die Baud-Rate auf 115200 gestellt hat

Info_serialMonitor

Info_baudrate

 

 

 

 

 

 

 

 

 

 


 


Programmcode:

Unter "Download" ist der Sketch im .ino - Format für die Verwendung mit der Arduino IDE - Software verlinkt:

Code                                                                              Download: Arduino_Seifenspender_ino


/*Sketch zur Steuerung eines berührungslosen Seifen-/Desinfektionsmittelspenders
 * Achtung: Vor Inbetriebnahme müssen die Variablen 1-3 überprüft und ggf angepasst  werden,
 * da es sonst zu Beschädigungen am Servomotor oder anderen Bauteilen kommen kann
 * Quelle Idee+Sketch: https://starthardware.org/beruehrungsloser-seifenspender-mit-arduino/
 * Ausarbeitung/Anmerkungen: Florian Porth (letzte Änderung: 30.05.20)
 */
#include

int servoPin = 7;
int irPin = 0;

Servo myServo;                        // erstellt Servo-Objekt

int servoPositionPumpen = 30;         // Variable 1: Position, in der die Pumpe des Spenders heruntergedrückt ist
int servoPositionNichtPumpen = 120;   // Variable 2: Position, in der die Pumpe des Spenders nicht heruntergerückt ist
int irThreshold = 300;                // Variable 3: Abstand, ab dem der Sensor auslösen soll

int lastState = -1;                   // -1 = Pumpe nicht gedrückt
int state = -1;

void setup() {
  Serial.begin(115200);               // starte seriellen Monitor; Einstellen der Baud - Rate auf 115200
  myServo.attach(servoPin);           // Intitialisierung Servomotor

 
  myServo.write(servoPositionNichtPumpen);  // Bei Start, soll der Spender in den Normalzustand fahren
  delay(1000);                              // 1 Skeunde warten...
}


void loop() {
  Serial.println(analogRead(irPin));                // gib Sensorwert an Seriellen Monitor

/*Im folgenden wird der Messwert des Sensors ausgelesen und geprüft*/

 if (analogRead(irPin)>irThreshold) state = 1;      // Hand o.ä. Objekt erkannt
  else state = -1;                                  // keine Hand o.ä Objekt erkannt
 
  if ((state==1)&&(lastState!=1)){                  // Diese Zeile verhindert dauerhaftes Auslösen
    myServo.write(servoPositionPumpen);             // Pumpe drücken
    delay(1000);                                    // 1 Sekunde warten
    myServo.write(servoPositionNichtPumpen);        // Pumpe entspannen
    delay(1000);                                    // 1 Sekunde warten
  }
  lastState=state;                                  // letzer Zustand wird als aktueller Zusrand gespeichert                             
  delay(20);                                        // 20ms warten, dann von vorne beginnen
}
 

 

Anmerkungen:

Erstellt: Florian Porth (30.05.2020) Letzte Änderung: Florian Porth (25.06.2020)