Arduino - Temperatuursensor - Servo Motor

Deze tutorial laat zien hoe u een Arduino en een DS18B20 temperatuursensor gebruikt om een servo motor aan te sturen. Specifiek wordt de Arduino geprogrammeerd om continu de temperatuur te meten met de DS18B20 sensor. Vervolgens wordt de servo motor aangepast volgens de volgende regels:

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0-kabel type A/B
1×DS18B20 Temperatuursensor (MET adapter)
1×DS18B20 Temperatuursensor (ZONDER adapter)
1×Servomotor
1×Jumper draden
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Aankoopadvies: Veel DS18B20-sensoren op de markt zijn van lage kwaliteit. We raden u ten zeerste aan de sensor van het merk DIYables te kopen via de bovenstaande link. We hebben het getest en het werkte goed.

Over Servo Motor en Temperatuursensor

Als u nog niet bekend bent met servo motor en temperatuursensor (zoals pinout, werking en programmeren), leer er dan meer over in de volgende tutorials:

Bedradingsschema

  • Bedradingsschema met breadboard (experimenteerprint)
Arduino DS18B20 servo motor bedrading schema

This image is created using Fritzing. Click to enlarge image

  • Bedradingsschema met adapter (aanbevolen)
Arduino temperatuursensor servo motor bedrading schema

This image is created using Fritzing. Click to enlarge image

We raden aan een DS18B20 sensor met bedradingadapter te gebruiken voor eenvoudige aansluiting. De adapter beschikt over een ingebouwde weerstand, waardoor een aparte weerstand in de bedrading komt te vervallen.

Arduino Code – Temperatuursensor activeert Servo Motor

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

Snelle Stappen

  • Maak de bedrading tussen Arduino, temperatuursensor en servo motor volgens bovenstaand schema
  • Sluit de Arduino met een USB-kabel aan op uw computer
  • Open de Arduino IDE en selecteer het juiste board en de juiste poort
  • Ga naar het pictogram Libraries in de linkerbalk van de Arduino IDE.
  • Zoek op “DallasTemperature”, en vind de DallasTemperature library van Miles Burton.
  • Klik op de Install knop om de DallasTemperature library te installeren.
Arduino Dallas Temperature library
  • U wordt gevraagd om de afhankelijkheid van de library te installeren
  • Klik op Install All om ook de OneWire library te installeren.
Arduino onewire library
  • Kopieer bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Verander de temperatuur rond de temperatuursensor
  • Observeer de beweging van de servo motor
  • Bekijk het resultaat in de Seriële Monitor, het ziet er ongeveer zo uit:
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 – Temperatuursensor activeert Servo Motor met Tolerantie

Tijdens het gebruik kan de temperatuur fluctueren rond de drempel, waardoor de servo motor snel en continu wordt aangepast. Dit kan leiden tot trillingen in plaats van een soepele draaiing naar de gewenste hoek. Om dit te voorkomen kan een tolerantie worden toegevoegd aan de drempelwaarde. De volgende code laat zien hoe u dit doet:

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

De bovenstaande code gebruikt een drempel van 20°C en een tolerantie van 0,5°C. De volgende condities gelden:

  • Als de temperatuur onder de 19,5°C is, wordt de servo motor ingesteld op 0°.
  • Als de temperatuur boven de 20,5°C is, wordt de servo motor ingesteld op 90°.
  • Als de temperatuur tussen 19,5°C en 20,5°C ligt, verandert de servo motor hoek niet.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!