Arduino - Temperatursensor - Servomotor

Dieses Tutorial zeigt, wie man einen Arduino und einen DS18B20-Temperatursensor verwendet, um einen Servomotor zu steuern. Genauer gesagt wird der Arduino so programmiert, dass er kontinuierlich die Temperatur mit dem DS18B20-Temperatursensor misst. Der Servomotor wird dann gemäß den folgenden Regeln eingestellt:

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×DS18B20 Temperatursensor (mit Adapter)
1×DS18B20 Temperatursensor (ohne Adapter)
1×Servo-Motor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kaufhinweis: Viele DS18B20-Sensoren auf dem Markt sind von geringer Qualität. Wir empfehlen dringend den Kauf des Sensors von der Marke DIYables über den obigen Link. Wir haben ihn getestet und er funktionierte gut.

Über Servomotor und Temperatursensor

Wenn Sie nichts über Servomotoren und Temperatursensoren wissen (Pinbelegung, wie sie funktionieren, wie man sie programmiert ...), informieren Sie sich in den folgenden Tutorials darüber:

Verdrahtungsdiagramm

  • Schaltplan mit Steckbrett
Arduino DS18B20-Servomotor-Verkabelungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

  • Schaltplan mit Adapter (empfohlen)
Schaltplan für Arduino-Temperatursensor und Servomotor

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wir empfehlen den Kauf eines DS18B20-Sensors, der mit einem Verdrahtungsadapter geliefert wird für eine einfache Verbindung. Der Adapter verfügt über einen integrierten Widerstand, wodurch ein separater Widerstand in der Verkabelung nicht mehr benötigt wird.

Arduino-Code – Temperatursensor löst Servomotor aus

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-temperature-sensor-servo-motor */ #include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> const int SERVO_PIN = 5; // Arduino pin connected to Servo Motor's pin const int SENSOR_PIN = 2; // Arduino pin connected to DS18B20 sensor's DATA pin const float TEMPERATURE_THRESHOLD = 20; // °C Servo servo; // create servo object to control a servo OneWire oneWire(SENSOR_PIN); // setup a oneWire instance DallasTemperature sensor(&oneWire); // pass oneWire to DallasTemperature library float temperature; int angle; void setup() { Serial.begin(9600); // initialize serial servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); sensor.begin(); // initialize the sensor } void loop() { sensor.requestTemperatures(); // send the command to get temperatures temperature = sensor.getTempCByIndex(0); // read temperature in Celsius if (temperature > TEMPERATURE_THRESHOLD) angle = 90; // set angle to 90 degree else angle = 0; // set angle to 0 degree servo.write(angle); // rotate servo motor // print to serial Serial.print("Temperature: "); Serial.print(temperature); Serial.print("°C => servo angle: "); Serial.println(angle); }

Schnelle Schritte

  • Schließe die Verkabelung zwischen Arduino, Temperatursensor und Servo-Motor wie im obigen Diagramm.
  • Schließe den Arduino über ein USB-Kabel an den PC an.
  • Öffne die Arduino IDE, wähle das richtige Board und den passenden Port aus.
  • Navigiere zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suche “DallasTemperature”, und finde anschließend die DallasTemperature-Bibliothek von Miles Burton.
  • Klicke auf die Installieren-Schaltfläche, um die DallasTemperature-Bibliothek zu installieren.
Arduino Dallas-Temperatur-Bibliothek
  • Sie werden aufgefordert, die Bibliotheksabhängigkeit zu installieren
  • Klicken Sie auf die Schaltfläche Alle installieren, um die OneWire-Bibliothek zu installieren.
Arduino OneWire-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie in der Arduino-IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino hochzuladen.
  • Passen Sie die Temperatur rund um den Temperatursensor an.
  • Beobachten Sie die Veränderung des Servomotors.
  • Sehen Sie das Ergebnis im seriellen Monitor. Es sieht unten wie folgt aus:
COM6
Send
Temperature: 19.2°C => servo angle: 0 Temperature: 19.5°C => servo angle: 0 Temperature: 19.6°C => servo angle: 0 Temperature: 19.9°C => servo angle: 0 Temperature: 20.2°C => servo angle: 90 Temperature: 20.7°C => servo angle: 90 Temperature: 21.3°C => servo angle: 90
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino-Code – Temperatursensor löst Servomotor mit Toleranz aus

Während des Betriebs kann die Temperatur über oder unter dem Schwellenwert schwanken, was zu schnellen und konstanten Anpassungen am Servomotor führt. Dies kann zu Vibrationen statt einer sanften Drehung auf den gewünschten Winkel führen. Um dieses Problem zu mildern, kann eine Toleranz in den Schwellenwert integriert werden. Der folgende Code veranschaulicht, wie diese Lösung implementiert wird:

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-temperature-sensor-servo-motor */ #include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> const int SERVO_PIN = 5; // Arduino pin connected to Servo Motor's pin const int SENSOR_PIN = 2; // Arduino pin connected to DS18B20 sensor's DATA pin const float TEMPERATURE_THRESHOLD = 20; // °C const float TOLERANCE = 0.5; // °C Servo servo; // create servo object to control a servo OneWire oneWire(SENSOR_PIN); // setup a oneWire instance DallasTemperature sensor(&oneWire); // pass oneWire to DallasTemperature library float temperature; int angle; void setup() { Serial.begin(9600); // initialize serial servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); sensor.begin(); // initialize the sensor } void loop() { sensor.requestTemperatures(); // send the command to get temperatures temperature = sensor.getTempCByIndex(0); // read temperature in Celsius if (temperature > (TEMPERATURE_THRESHOLD + TOLERANCE)) angle = 90; // set angle to 90 degree else if (temperature < (TEMPERATURE_THRESHOLD - TOLERANCE)) angle = 0; // set angle to 0 degree servo.write(angle); // rotate servo motor // print to serial Serial.print("Temperature: "); Serial.print(temperature); Serial.print("°C => servo angle: "); Serial.println(angle); }

Der oben gezeigte Code legt einen Schwellenwert von 20 °C fest und eine Toleranz von 0,5 °C. Die folgenden Bedingungen gelten:

  • Wenn die Temperatur unter 19,5 °C liegt, wird der Servomotorwinkel auf 0° eingestellt.
  • Wenn die Temperatur über 20,5 °C liegt, wird der Servomotorwinkel auf 90° eingestellt.
  • Wenn die Temperatur zwischen 19,5 °C und 20,5 °C liegt, wird der Servomotorwinkel nicht angepasst.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!