PWM, FET, DHT11 + ventilator.

Arduino specifieke Software
Berichten: 4
Geregistreerd: 08 Okt 2020, 11:06
Woonplaats: Roermond

PWM, FET, DHT11 + ventilator.

Berichtdoor Pascal100 » 19 Okt 2020, 09:33

Hallo allemaal. Ik ben met het volgende bezig: ik heb een opstelling gemaakt waarbij ik een PWM, een FET en een DHT11 gebruik. Tevens heb ik een mini-ventilator aangesloten. De bedoeling is dat de ventilator vanaf 20 oCelsius op halve snelheid, en vanaf 25 oCelsius op volle snelheid gaat draaien. Inmiddels heb ik een sketch:

Code: Alles selecteren
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
DHT11 dht11

/*PWM_motorregeling_FET via LM35-aansturing.
  Potentiometer uitlezen op seriële monitor
*/

const int analogInPin = A0;     //potentiometer op pin A0
const int pwmOutPin1 = 11;      //analoge PWM-output op pin 11
const int dht11OutPin2 = 9;     //analoge DHT11-output op pin 9

int sensorValue = 0;            //Variabele voor potmeter
int pwmValue1 = 0;              //variabele voor PWM-signaal
int dht11Value2 = 0;            //Variabele voor LM35-signaal
int temp = (temp - 32) / 1.8;
int tempMin = 20;               //starttemperatuur ventilator halve snelheid
int tempMax = 25;               //starttemperatuur ventilator volle snelheid
int fanSpeed = 1;
float tempC;

void setup () {
  //start Seriele communicatie op 9600 baud:
  Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(A0);                 //leest de sensorwaarde van de potmeter
  pwmValue1 = map(sensorValue, 0, 1023, 0, 255);         //map regelbereik van potmeter 0...1023 naar PWM-signaal 0...255
  dht11Value2 = map(sensorValue, 0, 1023, 255, 0);       //map regelbereik van LM35 0...1023 naar DHT11-signaal 0...255

  analogWrite(pwmOutPin1, pwmValue1);                    //schrijft PWM-signaal naar pin D11
  Serial.print ("sensor =");                             //print waarden naar seriele monitor
  Serial.print ("\t sensor");
  Serial.println(pwmValue1);

  analogWrite(dht11OutPin2, dht11Value2);                //schrijft DHT11-waarde naar pin D9
  Serial.print ("temperatuur =  oC");                    //print waarden naar seriele monitor
  tempC = analogRead(dht11OutPin2);
  tempC = (5.0 * tempC * 100.0) / 1024.0;
  Serial.print("\t temperatuur");
  Serial.println(dht11Value2);

  if (digitalRead(fanSpeed)) {
    if (tempMin < 20) {
      fanSpeed = fanSpeed * 0;
    }
    delay(200);
    if (tempMin > 20) {
      fanSpeed = fanSpeed / 2;
    }
    delay(200);
  }
  if (tempMax > 25) {
    fanSpeed = fanSpeed * 1;
  }
  delay(200);
}


Wanneer ik deze sketch verifieer, wordt er aangegeven: fout bij het compileren voor board Arduino Uno. Nu kom ik er niet achter wat er fout is in deze sketch, (misschien de libraries welke worden gebruikt?).
Wellicht dat iemand ziet waar de foutmelding door veroorzaakt wordt. Reacties zie ik graag verschijnen.

Met vriendelijke groet,
Pascal.

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: PWM, FET, DHT11 + ventilator.

Berichtdoor Koepel » 19 Okt 2020, 10:11

Hallo Pascal, is het mogelijk om opnieuw te beginnen ?

Welk Arduino board heb je ?
Kun je een schema laten zien ? Een foto van een tekening mag ook.

De DHT11 is geen goede sensor. De luchtvochtigheid is zo onnauwkeurig, daar heb je weinig aan. De temperatuur is ook niet heel nauwkeurig.
Een echte DS18B20 is beter, maar helaas zijn er veel namaak.

Kun je eerst proberen de DHT11 sensor aan de praat te krijgen ?
Er zijn allerlei libraries voor de DHT11.
Heb je naast de Adafruit libraries nog meer DHT libraries geinstalleerd ? Dan komt dat in de war met de Adafruit libraries.

Je kunt de Adafruit libraries gewoon gebruiken of op de "unified" manier. Jouw sketch lijkt echter niet op de voorbeelden van Adafruit.

Waarom zou je een PWM signaal naar de DHT11 sensor sturen ? Daar heb ik nog nooit van gehoord.
Je gebruikt de fanSpeed variabele niet. Ik neem aan dat die de ventilator zou moeten regelen.

Berichten: 4
Geregistreerd: 08 Okt 2020, 11:06
Woonplaats: Roermond

Re: PWM, FET, DHT11 + ventilator.

Berichtdoor Pascal100 » 19 Okt 2020, 12:29

Alvast bedankt voor de reactie. Eerst even wat informatie: ik gebruik een pc met Windows 10, en een Arduino Uno, beide softwarematig up-to-date. In de sketch heb ik een aanpassing gemaakt, deze geeft geen foutmelding meer en laat zich uploaden. Terzijde, wat betreft de DHT11: ik volg momenteel via een onderwijsinstelling een thuis-cursus Arduino programmeren. Bij deze cursus krijg je in het kader van 'huiswerk' op een gegeven moment een 'thuisproject' aangereikt. In dit geval het in elkaar zetten van een bouwwerk waarbij onder andere een potmeter, een FET, de DHT11 en een ventilator wordt gebruikt. Dit alles samen om er mee te leren werken. Een website zoals deze bezoek ik geregeld om informatie te vinden betreffende hardware/software-vraagstukken. Voor wat betreft de DHT11, deze zit in het startpakket welke ik ontvangen heb, inmiddels heb ik een DHT22 in bestelling. De genoemde sensor in de reactie, daar zal ik eens naar kijken.

Code: Alles selecteren
#include <Adafruit_Sensor.h>

/*PWM_motorregeling_FET via DHT11-aansturing.
  Potentiometer uitlezen op seriële monitor
*/

const int analogInPin = A0;     //potentiometer op pin A0
const int pwmOutPin1 = 11;      //analoge PWM-output op pin 11
const int dht11OutPin2 = 9;     //analoge DHT11-output op pin 9

int sensorValue = 0;            //Variabele voor potmeter
int pwmValue1 = 0;              //variabele voor PWM-signaal
int dht11Value2 = 0;            //Variabele voor DHT11-signaal
int temp = (temp - 32) / 1.8;
int tempMin = 20;               //starttemperatuur ventilator halve snelheid
int tempMax = 25;               //starttemperatuur ventilator volle snelheid
int fanSpeed = 1;
float tempC;

void setup () {
  //start Seriele communicatie op 9600 baud:
  Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(A0);                 //leest de sensorwaarde van de potmeter
  pwmValue1 = map(sensorValue, 0, 1023, 0, 255);         //map regelbereik van potmeter 0...1023 naar PWM-signaal 0...255
  dht11Value2 = map(sensorValue, 0, 1023, 255, 0);       //map regelbereik van LM35 0...1023 naar DHT11-signaal 0...255

  analogWrite(pwmOutPin1, pwmValue1);                    //schrijft PWM-signaal naar pin D11
  Serial.print ("sensor =");                             //print waarden naar seriele monitor
  Serial.print ("\t sensor");
  Serial.println(pwmValue1);

  analogWrite(dht11OutPin2, dht11Value2);                //schrijft DHT11-waarde naar pin D9
  Serial.print ("temperatuur =  oC");                    //print waarden naar seriele monitor
  tempC = analogRead(dht11OutPin2);
  tempC = (5.0 * tempC * 100.0) / 1024.0;
  Serial.print("\t temperatuur");
  Serial.println(dht11Value2);

  if (digitalRead(fanSpeed)) {
    if (tempMin < 20) {
      fanSpeed = fanSpeed * 0;
    }
    delay(200);
    if (tempMin > 20) {
      fanSpeed = fanSpeed / 2;
    }
    delay(200);
  }
  if (tempMax > 25) {
    fanSpeed = fanSpeed * 1;
  }
  delay(200);
}


Het is niet gelukt om een foto/tekening bij deze reactie te plaatsen, dit moet ik nog uitzoeken hoe dit gaat. Tot slot de variabele instellen, hiervoor kan ik wel een hint gebruiken.

Bij voorbaat dank voor reacties,
Pascal.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: PWM, FET, DHT11 + ventilator.

Berichtdoor Koepel » 19 Okt 2020, 13:55

Kun je eerst proberen de DHT11 sensor aan de praat te krijgen ?
Kun je opnieuw beginnen ?
Daarvoor kun je het best een nieuwe sketch maken.

De DHT11 communiceert met de Arduino via een reeks van digitale pulsen.
Het is onmogelijk om zelf die pulsen te maken en lezen, daarvoor heb je een library nodig.

De DHT11 heeft dus geen analoge output en geen analoge input en kan geen PWM signaal verdragen. Mogelijk is jouw DHT11 daardoor stuk gegaan, maar meestal valt het mee en is hij niet meteen stuk bij een kortsluiting op het data-signaal.

Stel dat je de library van Adafruit installeert, dan zitten daar ook voorbeelden bij.
Ga in de Arduino IDE in het menu naar de voorbeelden, en dan even goed zoeken. Dan zou je die kunnen vinden.
Probeer het eenvoudigste voorbeeld: https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino.

Heb je naast de Adafruit libraries nog meer DHT libraries geinstalleerd ? Dan komt dat in de war met de Adafruit libraries.

Loop ook door de tutorial van Adafruit: https://learn.adafruit.com/dht.

Misschien lukt het daarmee om de temperatuur te lezen.

Als je die temperatuur hebt, dan kun je misschien de PWM output aan je sketch gaan toevoegen.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: eroninejikata en 10 gasten