Close

RHT 03 – měření teploty a vlhkosti vzduchu

Úvodní stránka Fórum Hardware Senzory RHT 03 – měření teploty a vlhkosti vzduchu

Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (z celkem 16)
  • Autor
    Příspěvky
  • #2644
    Profilový obrázektom.vitek
    Účastník

    Dobrý den,
    postupoval sme podle tohoto zapojení : při nahrávání programu do Arduina mega 2560 se mi ukáže tato chyba: dht_test.ino:11:17: fatal error: dht.h: No such file or directory
    compilation terminated.
    Chyba kompilace.

    Myslím si že to bude nějaká prkotina ale nemůžu na to přijít. Díky za každou radu. Tom V.

    #2645
    Profilový obrázektom.vitek
    Účastník
    #2647
    Zbyšek VodaZbyšek Voda
    Správce

    Dobrý den,

    myslím, že to bude tím že nemáte staženou, nebo správně přidanou knihovnu. V návodu máte odkaz přímo v prvním odstavci. Kdyžtak návod, jak přidat knihovnu najdete zde: https://arduino.cz/jak-importovat-knihovnu-do-arduino-ide/:)

    #2649
    Profilový obrázektom.vitek
    Účastník

    jo, měl jste pravdu bylo to knihovnou. Díky moc už to měří jak má :)

    #2650
    Profilový obrázektom.vitek
    Účastník

    ještě dotaz: co kdybych tyto čidla měl 2 a chtěl bych jejich hodnoty průměrovat… máte s tím zkušenosti ?

    #2651
    Zbyšek VodaZbyšek Voda
    Správce

    Tomu se věnují třeba tady: http://diy-scib.org/blog/multiple-dht-humidity-sensors-arduino
    Sám jsem to ale ještě nezkoušel.

    #2699
    Profilový obrázektom.vitek
    Účastník

    Ahoj, ještě bych tu měl jeden problém :

    chci pomocí teploty ovládávat relé na který je napojen větrák

    když je teplota => 25°C tak sepni větrák (relé)
    když je teplota =< 20°C tak vypni větrák (relé)

    program:
    if (dht1.readTemperature => „25.0“)
    {
    digitalWrite(relePin1, LOW);
    if (dht1.readTemperature =< „20.0“)
    {
    digitalWrite(relePin1, HIGH);
    }
    }

    napsal sem to nějak takhle, ale program mi nebere ty hodnoty
    chyba říka:
    celek_pokus_vetrak.ino: In function ‚void loop()‘:
    celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ token
    celek_pokus_vetrak.ino:56:30: error: expected primary-expression before ‚<‚ token
    Chyba kompilace.

    program je vytržen z celého programu zde:
    //Projekt Inteligentní skleník Vítek Tomáš
    #include <DHT.h> // knihovna dht teploty
    #define DHT1PIN 7 //teplota
    #define DHT2PIN 6 // teplota 2
    #define DHT1TYPE DHT22 //definuje typ senzoru
    #define DHT2TYPE DHT22 //definuje typ senzoru
    DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
    DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
    int temt6000Pin = A0; // senzor svetla
    int dirpin = 8; // motorek dir
    int steppin = 9; // motorek step

    byte sensorInterrupt = 0; // 0 = digital pin 2 //zacatek prutokomer
    byte sensorPin = 2;
    float calibrationFactor = 4.5;
    volatile byte pulseCount;
    float flowRate;
    unsigned int flowMilliLitres;
    unsigned long totalMilliLitres;
    unsigned long oldTime; // konec prutokomer
    //———————-POKUS ovladani vetraku —————————–
    const int buttonPin1 = 50; // kam je připojeno tlačítko
    const int relePin1 = 30; // kam je připojeno rele
    int buttonState = 0;
    //————————————————————–
    void setup() {
    Serial.begin(9600);
    pinMode(relePin1, OUTPUT); // POKUS rele jako vystup na pin
    pinMode(buttonPin1,INPUT); //POKUS tlačítka jako vstup:
    pinMode(dirpin, OUTPUT); // motorek
    pinMode(steppin, OUTPUT); // motorek
    pinMode(sensorPin, INPUT); //zacatek prutokomer
    digitalWrite(sensorPin, HIGH);

    pulseCount = 0;
    flowRate = 0.0;
    flowMilliLitres = 0;
    totalMilliLitres = 0;
    oldTime = 0;
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING); // konec prutokomer
    dht1.begin(); // zacni merit teplotu 1
    dht2.begin(); // zacni merit teplotu 2
    }

    void loop() {
    //ovládání relé 1 pomocí tlačítka —————–
    void vetrak1();
    buttonState = digitalRead(buttonPin1);
    if (buttonState == HIGH) { // zapneme relé:
    digitalWrite(relePin1, LOW);
    }else {
    digitalWrite(relePin1, HIGH); } // vypneme rele
    //ovládání větráku pomocí teploty POKUS ————–
    if (dht1.readTemperature => „25.0“)
    {
    digitalWrite(relePin1, LOW);
    if (dht1.readTemperature =< „20.0“)
    {
    digitalWrite(relePin1, HIGH);
    }
    }

    //——————–prutokomer——————————————–
    if((millis() – oldTime) > 1000) // Only process counters once per second
    {
    detachInterrupt(sensorInterrupt);
    flowRate = ((1000.0 / (millis() – oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    flowMilliLitres = (flowRate / 60) * 1000;
    totalMilliLitres += flowMilliLitres;
    unsigned int frac;
    pulseCount = 0;
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
    }
    //———————-lcd——————————-
    clearLCD();
    backlightOn();
    unsigned int frac; // deklarace promere frac pro prutokomer
    //————————————————
    selectLineOne();
    delay(100);
    Serial.print(„T1:“);
    Serial.print(dht1.readTemperature(),1);
    Serial.print((char)223); // vypíše znak ° na displej
    Serial.print(„C „);
    Serial.print(„T2:“);
    Serial.print(dht2.readTemperature(),1);
    Serial.print((char)223); // vypíše znak ° na displej
    Serial.print(„C“);
    delay(500);
    //————————————————
    selectLineTwo();
    delay(100);
    Serial.print(„Vl:“);
    Serial.print(dht1.readHumidity(),1);
    Serial.print(„% „);
    Serial.print(„V2:“);
    Serial.print(dht2.readHumidity(),1);
    Serial.print(„%“);
    delay(500);
    //————————————————
    selectLineThree();
    delay(100);
    Serial.print(„VP:“);
    Serial.print(analogRead(A1)/11,1);
    Serial.print(„% „);
    Serial.print(„S:“);
    Serial.print(analogRead(temt6000Pin)/11,1);
    Serial.print(„%“);
    delay(500);
    //———————————————
    selectLineFour();
    delay(100);
    Serial.print(„P:“);
    Serial.print(int(flowRate)); // Print the integer part of the variable
    Serial.print(„.“); // Print the decimal point
    frac = (flowRate – int(flowRate)) * 10;
    Serial.print(frac, DEC) ; // Print the fractional part of the variable
    Serial.print(„L/min“);
    Serial.print(„Pc“); // Output separator
    Serial.print(totalMilliLitres);
    Serial.println(„mL“);
    delay(5000);
    //——————————————–
    }
    //SerialLCD Functions
    void selectLineOne(){ //puts the cursor at line 0 char 0.
    Serial.write(0xFE); //command flag
    Serial.write(128); //position
    }
    void selectLineTwo(){ //puts the cursor at line 2 char 0.
    Serial.write(0xFE); //command flag
    Serial.write(192); //position
    }
    void selectLineThree(){ //puts the cursor at line 3 char 0.
    Serial.write(0xFE); //command flag
    Serial.write(148); //position
    }
    void selectLineFour(){ //puts the cursor at line 4 char 0.
    Serial.write(0xFE); //command flag
    Serial.write(212); //position
    }
    void goTo(int position) { //position = line 1: 0-19, line 2: 20-39, etc, 79+ defaults back to 0
    if (position<20){ Serial.write(0xFE); //command flag
    Serial.write((position+128)); //position
    }else if (position<40){Serial.write(0xFE); //command flag
    Serial.write((position+128+64-20)); //position
    }else if (position<60){Serial.write(0xFE); //command flag
    Serial.write((position+128+20-40)); //position
    }else if (position<80){Serial.write(0xFE); //command flag
    Serial.write((position+128+84-60)); //position
    } else { goTo(0); }
    }
    void clearLCD(){
    Serial.write(0xFE); //command flag
    Serial.write(0x01); //clear command.
    }
    void backlightOn(){ //turns on the backlight
    Serial.write(0x7C); //command flag for backlight stuff
    Serial.write(157); //light level.
    }
    void backlightOff(){ //turns off the backlight
    Serial.write(0x7C); //command flag for backlight stuff
    Serial.write(128); //light level for off.
    }
    void backlight50(){ //sets the backlight at 50% brightness
    Serial.write(0x7C); //command flag for backlight stuff
    Serial.write(143); //light level for off.
    }
    void serCommand(){ //a general function to call the command flag for issuing all other commands
    Serial.write(0xFE);
    }
    //————–motorek1————————–
    void motor1(){
    int i;
    digitalWrite(dirpin, LOW); // Nastaveni smeru
    delay(100);
    for (i = 0; i<4000; i++) // otočení o 4000 kroků
    {
    digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
    digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
    delayMicroseconds(500); // rychlost otáček
    }
    digitalWrite(dirpin, HIGH); // Nastaveni smeru
    delay(10000);
    for (i = 0; i<4000; i++) // otočení o 4000 kroků
    {
    digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the
    digitalWrite(steppin, HIGH); // „Rising Edge“ so the easydriver knows to when to step.
    delayMicroseconds(500); // This delay time is close to top speed for this
    }
    }
    // particular motor. Any faster the motor stalls.
    //————motorek2——————————–
    //————motorek3———————————
    //————vetrak1——————————-
    //————-vetrak2——————————-
    //———————topeni———————-
    //——————–LED-paska——————–
    // —————-senzor-světla——————-
    void svetlo(){
    int value = analogRead(temt6000Pin);
    }
    //—————vlhkost-půdy————————–
    void vlhkostpudy(){
    int sensorValue = analogRead(A1);
    }
    //———teplota 1,2 — vlhkost 1,2 —————–
    void teplotavlhkost(){
    delay(4000);
    float h1 = dht1.readHumidity();
    float t1 = dht1.readTemperature();
    float h2 = dht2.readHumidity();
    float t2 = dht2.readTemperature();
    if (isnan(t1) || isnan(h1)) {
    Serial.println(„Failed to read from DHT #1“);
    }
    if (isnan(t2) || isnan(h2)) {
    Serial.println(„Failed to read from DHT #2“);
    }
    }
    //————-prutokomer——————–
    void pulseCounter()
    {
    pulseCount++;
    }

    Díky

    #2700
    Zbyšek VodaZbyšek Voda
    Správce

    Nebude chyba v tom, ze cisla zabalujete do uvozovek? On je pak program bere jako String a ne jako cislo ;)

    #2701
    Profilový obrázektom.vitek
    Účastník

    aha, díky na radu ale i když jsem se smazal tak program píše tuhle chybu :
    celek_pokus_vetrak.ino:53:28: error: expected primary-expression before ‚>‘ token

    a pokud to napisu takhle :
    if (dht1.readTemperature > 25.0)
    {
    digitalWrite(relePin1, LOW);
    if (dht1.readTemperature < 20.0)
    {
    digitalWrite(relePin1, HIGH);
    }
    }

    tak chybu to píše :
    error: invalid use of member function (did you forget the ‚()‘ ?)

    #2702
    Zbyšek VodaZbyšek Voda
    Správce

    To asi bude tim, ze readTemperature je funkce volana na objektu dht1. A funkce potrebuji mit za sebou zavorky (i kdyz treba prazdne). Spravny zapis by tedy byl dht1.readTemperature().

    #2703
    Profilový obrázektom.vitek
    Účastník

    je to tak! díky moc , takhle to vypadá a funguje to :) ještě jednou díky

    if (dht1.readTemperature() >= 25.0)
    {
    digitalWrite(relePin1, LOW);
    if (dht1.readTemperature() <= 20.0)
    {
    digitalWrite(relePin1, HIGH);
    }
    }

    #2712
    Profilový obrázektom.vitek
    Účastník

    Zdravím, mám tu prosím další problém se kterým si nevím rady:
    V tomto programu je ovládání výstupního relé pomocí teploty – funguje samo automaticky
    a dále je tu, že když sepnu tlačítko tak by se mělo sepnout i relé. A tady je ten kamen urazu po nahraní teplota automaticky řidí relé, ale když manualně zmačknu tlačítko abych seplo relé,když není seplé tak tato funkce nefunguje. Myslím že chyba bude třeba v rozmístění dané části programu nebo takoveho něco.

    Je možné že když jsou 2 IF v programu tak jedno program bere jako to hlavní a druhé podřadné?

    #include <DHT.h>
    #define DHT1PIN 7 //teplota
    #define DHT2PIN 6 // teplota 2
    #define DHT1TYPE DHT22 //definuje typ senzoru
    #define DHT2TYPE DHT22 //definuje typ senzoru
    DHT dht1(DHT1PIN, DHT1TYPE); //definuje typ senzoru
    DHT dht2(DHT2PIN, DHT2TYPE); //definuje typ senzoru
    const int buttonPin1 = 50; // kam je připojeno tlačítko
    const int relePin1 = 30; // kam je připojeno rele
    int buttonState = 0;

    void setup() {
    Serial.begin(9600);
    pinMode(relePin1, OUTPUT);
    pinMode(buttonPin1,INPUT);
    dht1.begin();
    dht2.begin();
    }

    void loop() {
    buttonState = digitalRead(buttonPin1);
    if (buttonState == HIGH) { // zapneme relé:
    digitalWrite(relePin1, LOW);
    }
    else {
    digitalWrite(relePin1, HIGH);
    } // vypneme relé:
    //automatické ovladani pomoci teploty
    if (dht1.readTemperature() >= 30) {
    digitalWrite(relePin1, LOW);
    }else{
    if (dht1.readTemperature() <= 28)
    digitalWrite(relePin1, HIGH);
    }
    //snímani teploty
    void teplotavlhkost();
    delay(4000);
    float h1 = dht1.readHumidity();
    float t1 = dht1.readTemperature();
    float h2 = dht2.readHumidity();
    float t2 = dht2.readTemperature();
    if (isnan(t1) || isnan(h1)) {
    Serial.println(„Failed to read from DHT #1“);
    }
    if (isnan(t2) || isnan(h2)) {
    Serial.println(„Failed to read from DHT #2“);
    }
    Serial.print(„T1:“);
    Serial.print(dht1.readTemperature(),1);
    Serial.print((char)223); // vypíše znak ° na displej
    Serial.print(„C „);
    }

    #2717
    Zbyšek VodaZbyšek Voda
    Správce

    Problém bude v tom, že tak, jak máte program napsaný je opravdu správně chování, že při zmáčknutí tlačítka se relé vypne!

     if(buttonState == HIGH) { //!! tato funkce relé vypíná!
        digitalWrite(relePin1, LOW);
    }
    else{
        digitalWrite(relePin1, HIGH);
    } 

    Pokud chcete, aby stejný stav jako má relé mělo i tlačítko, musíte prohodit LOW a HIGH:

     if(buttonState == HIGH) {
        digitalWrite(relePin1, HIGH);
    }
    else{
        digitalWrite(relePin1, LOW);
    } 

    Dva IFy na stejné úrovni se rozhodně nedají brát jako „hlavní“ a „podřadný“. „Podřadnosti“ dosáhnete až jejich zanořováním :)

    #2718
    Profilový obrázektom.vitek
    Účastník

    Prosím tě das mi na tebe tel kontakt nebo facebook ? funguje to přesně naopak než řikas

    #2719
    Zbyšek VodaZbyšek Voda
    Správce

    FB buď Zbyšek Voda, nebo stačí napsat na stránku Arduino.cz na FB

Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (z celkem 16)
  • Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.