Go Down

Topic: DHT11 Messwertübertragung 433Mhz PROBLEM!!!!! (Read 1 time) previous topic - next topic

Hirnduebelsepp

Hallo, bin neu hier da ich ein Problem habe bei meinen Projekt.

Ich möchte Messwerte des DHT 11 (Temperatursensor) per 433Mhz Sender auf einen anderen Arduino übertragen und per LCD Display darstellen.

Jedoch ist mein eigenverfasster Sketch völlig fehlgeschlagen.

Ich hoffe Ihr könnt mir Weiterhelfen:)

Danke im vorraus

Hirnduebelsepp

HotSystems

Na klar, raten ist unsere Stärke.
Wir haben das öfter hier.

Du solltest uns schon mal mehr Informationen liefern.

Alle verwendeten Modulo, Link posten.

Schaltung posten.

Sketch posten, bitte in Code-Tags, Schaltfläche </> oben links im Editor.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Hirnduebelsepp

#2
Sep 27, 2016, 08:40 am Last Edit: Sep 27, 2016, 08:45 am by Hirnduebelsepp
Verwendete Bauteile:
     Sender:
         1x Arduino Uno
         1x QAM-TX1     Sendermodul
         1x DHT 11        Temperaturfühler
     Empfänger:
         1x Arduino Mega
         1x UK AM-RX1  Empfängermodul

Das auslesen des Sensors im Seriellen Monitor ist mir bereits gelungen es scheitert nur noch an der Übertragung der Messwerte.




HotSystems

Auch wenn ich mich wiederhole.

Da es am Markt haufenweise Module gibt, brauchen wir den Link deiner Module (Sender + Empfänger).

Es fehlt noch ein Schaltbild und der Sketch, wie schon beschrieben.

So können wir nicht sehen wo du den Fehler machst.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Hirnduebelsepp

#4
Sep 27, 2016, 10:02 am Last Edit: Sep 27, 2016, 10:07 am by Hirnduebelsepp



Sender:

http://de.rs-online.com/web/p/low-power-funkmodule/6172072/?searchTerm=quasar+qam+tx1&autocorrected=y&relevancy-data=636F3D3126696E3D4931384E4C446573634D504E266C753D6465266D6D3D6D617463687061727469616C6D617826706D3D5E5B5C707B4C7D5C707B4E647D5C707B5A737D2D2C2F255C2E5D2B2426706F3D393326736E3D592673723D4175746F636F727265637465642673613D7175617361722071616D7478312673743D4B4559574F52445F4D554C54495F414C5048415F4E554D455249432673633D592677633D4E4F4E45267573743D7175617361722071616D20747831267374613D7175617361722071616D2074783126

Empfänger:

http://de.rs-online.com/web/p/low-power-funkmodule/7424481/?searchTerm=Quasar+QAM-RX1-433&relevancy-data=636F3D3126696E3D4931384E4C446573634D504E266C753D6465266D6D3D6D617463687061727469616C6D617826706D3D5E5B5C707B4C7D5C707B4E647D5C707B5A737D2D2C2F255C2E5D2B2426706F3D393326736E3D592673743D4B4559574F52445F4D554C54495F414C5048415F4E554D455249432673633D592677633D4E4F4E45267573743D5175617361722051414D2D5258312D343333267374613D5175617361722051414D2D5258312D34333326

Temperaturfühler:

https://www.conrad.de/de/digitaler-temperatur-und-feuchtesensor-dht11-dht11-20-95-rh-0-50-c-1405544.html?gclid=CLGJ15qKr88CFcUp0wod-kUC9Q&insert_kz=NA&hk=SEM&WT.srch=1&WT.mc_id=Dynamische_Suchanzeigen&s_kwcid=AL!222!3!138300379414!b!!g!!_inpage:technische%20daten&ef_id=V@onHQAAAUVxraYY:20160927080029:s


Hirnduebelsepp

Code: [Select]
#include <DHT.h>
#include <VirtualWire.h>

int sensorPins[] = {9};
char Sensor1CharMsg[21];

void setup() {
  Serial.begin(9600);
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_tx_pin(8);
}

void loop() {
  sprintf(Sensor1CharMsg, "%d,%d,%d,%d,%d,%d",
  analogRead(sensorPins[9])),
  delay(5);

  vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
  vw_wait_tx();
 
  delay(40);
  }

HotSystems

#6
Sep 27, 2016, 10:18 am Last Edit: Sep 27, 2016, 10:24 am by HotSystems
Hier funktioniert etwas nicht:

Code: [Select]
sprintf(Sensor1CharMsg, "%d,%d,%d,%d,%d,%d",
  analogRead(sensorPins[9])),


Du solltest es der Übersicht wegen, erst in eine Variable übertragen und anschließend formatieren.

Dann kannst du es auch besser debuggen.

Da ich deine Sender/Empfänger-Module nicht kenne, kann ich auch nicht sagen, ob diese zur verwendeten Library (VirtualWire) kompatibel sind.

Zum Testen kannst du auch einen String der variablen "Sensor1CharMsg" direkt übergeben.

Edit:

bei mir funktioniert das so:
Code: [Select]

  float h = Sensor_Value1;                                           
  int h_to_int = h;                                                   // In Int wandeln
  sprintf (Sensor1CharMsg, "%d", h_to_int);                               // In char formatieren
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Whandall

#7
Sep 27, 2016, 10:21 am Last Edit: Sep 27, 2016, 10:23 am by Whandall
Code: [Select]
Grusel.ino: In function 'void loop()':
Grusel.ino:16:28: warning: format '%d' expects a matching 'int' argument [-Wformat=]
Grusel.ino:16:28: warning: format '%d' expects a matching 'int' argument [-Wformat=]
Grusel.ino:16:28: warning: format '%d' expects a matching 'int' argument [-Wformat=]
Grusel.ino:16:28: warning: format '%d' expects a matching 'int' argument [-Wformat=]
Grusel.ino:16:28: warning: format '%d' expects a matching 'int' argument [-Wformat=]
Grusel.ino:16:26: warning: array subscript is above array bounds [-Warray-bounds]
D:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -Wall


Es wäre gut dir ein paar Grundlagen der C-Programmierung anzueignen,
damit du eine Ahnung davon bekommst, was du da schreibst.

Wo wird da ein DHT gelesen?

Von welchem analogen Port glaubst du zu lesen?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Whandall

#8
Sep 27, 2016, 10:28 am Last Edit: Sep 27, 2016, 10:38 am by Whandall
Wenn du Strg-T zur Formattierung benutzt, offenbart sich eine weitere Merkwürdigkeit.
Code: [Select]
void loop() {
  sprintf(Sensor1CharMsg, "%d,%d,%d,%d,%d,%d",
          analogRead(sensorPins[9])),
                     delay(5);

  vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
  vw_wait_tx();

  delay(40);
}

Warum stekt hinter dem sprintf-Aufruf ein Komma und kein Semikolon?
Wozu soll das delay(5) dienen?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

HotSystems

Weitere Fragen sind:

Hast du beachtet, dass der Empfänger nur mit 3,3 Volt betrieben werden darf ?
Hast du am Empfänger und Sender eine Antenne angeschlossen ?

Allerdings wird das Hauptproblem im Sketch stecken. Wie Whandall schon schreibt, Grundlagen der Programmierung und des Arduino sind wichtig. Da stecken noch viele Fehler drin.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Hirnduebelsepp

Mit meinen verwendeten Teilen funktioniert es bereits Textnachrichten zu versenden und zu empfangen mit der virtualwire Bibliothek.

Jedoch schaffe ich es nicht die daten aus dem seriellen Monitor zu versenden.

Ich lese den Sensor mit diesem Sketch aus:
Code: [Select]
#include

dht DHT;

#define DHT11_PIN 7

void setup(){
Serial.begin(9600);
}

void loop()
{
int chk = DHT.read11(DHT11_PIN);
Serial.print("Temperature = ");
Serial.println(DHT.temperature);
Serial.print("Humidity = ");
Serial.println(DHT.humidity);
delay(1000);
}



Für die funkstrecke verwende ich diesen Sketch:
Code: [Select]
#include <VirtualWire.h>
 
#undef int
#undef abs
#undef double
#undef float
#undef round
 
void setup()
{
     // Initialise the IO and ISR
    vw_set_ptt_inverted(true);
    vw_setup(2000);                
    vw_set_tx_pin(7);                
}
 
void loop()
{
    const char *msg = "Testnachricht";      
 
   vw_send((uint8_t *)msg, strlen(msg));
   vw_wait_tx();                                        
   delay(200);
}

433 Mhz Empfänger

HotSystems

#11
Sep 27, 2016, 11:11 am Last Edit: Sep 27, 2016, 11:14 am by HotSystems
Du liest ja in deinem "Komplett-Sketch" den Sensor nicht aus.

Da fehlt unter anderem diese Anweisung:

Code: [Select]
int Variablename = DHT.temperature();

Den seriellen Monitor brauchst du nicht dazu. Den nimmst du nur zum Debuggen.

Grundlagen lernen !!!

Auch wenn es bei dir schon funktioniert hat, heißt es nicht, dass alles richtig ist.

Edit:

Du solltest dir auch unbedingt die Beiträge von Whandall durchlesen. Ich habe das Gefühl, du liest unsere Beiträge nur halb. Denn das Meiste wurde schon angesprochen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Hirnduebelsepp

Habe jetzt einen Passenden Sketch im internet gefunden

Code: [Select]
#include "DHT.h"
#include <LiquidCrystal.h>
#include <VirtualWire.h>

int h = 0;
int t = 0;

#define DHTPIN 9   
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int LCD = 7;
int DHTVCC = 6;
int update = 10000;
int LEDpin = 13;

char Sensor1CharMsg[21];

void setup()
{
  lcd.begin(16, 2);
  Serial.begin(9600);
  Serial.println("DHT22 - Test!");

  dht.begin();
 
  pinMode(DHTVCC, OUTPUT);
  pinMode(LCD, OUTPUT);
  pinMode(LEDpin, OUTPUT);
  digitalWrite(DHTVCC, HIGH);
  digitalWrite(LCD, HIGH);
 
  vw_setup(2000);
  vw_set_tx_pin(8);



}

void loop()
{
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
 
  sprintf (Sensor1CharMsg, "%d,%d,", h, t);

  if (isnan(t) || isnan(h))
  {
    lcd.clear();
    Serial.println("DHT22 konnte nicht ausgelesen werden");
    lcd.print("Auslesen");
    lcd.setCursor(0, 1);
    lcd.print("fehlgeschlagen");
    delay(1000);
    lcd.clear();
  }
  else
  {
    lcd.setCursor(0, 0);
    lcd.print("Feuchte: ");
    lcd.print(h);
    lcd.print(" %\t");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(t);
    lcd.print(" C");
    Serial.print("Luftfeuchte: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperatur: ");
    Serial.print(t);
    Serial.println(" C");
    vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
    vw_wait_tx();
    delay(update);
  }
}


jedoch bringt er mir eine Fehlermeldung

Code: [Select]



exit status 1
'DHT' does not name a type






Wie kann ich das beheben?



HotSystems

#13
Sep 28, 2016, 09:31 am Last Edit: Sep 28, 2016, 09:41 am by HotSystems
Wenn du immer nur C&P verwendest, wirst du es nie lernen.

Meine Vermutung:

Hast du die Library richtig eingebunden/installiert ?

Und wenn du einen DHT11 verwendest, darfst du nicht einen DHT22 definieren.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Hirnduebelsepp

Ja ich weiß schon aber ich muss mein Projekt bis spätestens nächste Woche fertig haben.

Also mein Empfängerprogramm funktioniert soweit, jedoch habe ich noch bei meinen Sender-Sketch Probleme. Ich hoffe Ihr könnt mir weiterhelfen und es tut mir leid das ich nicht solch ein Fachwissen habe wie Ihr.

Folgender Sketch:
Code: [Select]
#include "DHT.h"
 #include <VirtualWire.h>

 int h = 0;
 int t = 0;

 #define DHTPIN 9     
 #define DHTTYPE DHT11

 DHT dht(DHTPIN, DHTTYPE);


 int update = 10000;


 char Sensor1CharMsg[21];

 void setup()
 {
   
   Serial.begin(9600);
   Serial.println("DHT11 - Test!");

   dht.begin();
   
   

 // Virtual Wire setup
 vw_setup(2000);
 vw_set_tx_pin(8);
   
 }

 void loop()
 {
   float h = dht.readHumidity();     //Luftfeuchte auslesen
   float t = dht.readTemperature();  //Temperatur auslesen
   
    int h_as_int = h;
    int t_as_int = (t * 10);
   
   sprintf (Sensor1CharMsg, "%d,%d,", h_as_int, t_as_int);

   if (isnan(t) || isnan(h))
   {
     Serial.println("DHT11 konnte nicht ausgelesen werden");
     delay(1000);
   }
   else
   {
     Serial.print("Luftfeuchte: ");
     Serial.print(h);
     Serial.print(" %\t");
     Serial.print("Temperatur: ");
     Serial.print(t);
     Serial.println(" C");

      vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
      vw_wait_tx();

     delay(update);
   }
 }








Jetzt mein Fehlercode:
Code: [Select]
Arduino: 1.6.11 (Windows 7), TD: 1.30, Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

Sender_DHT:10: error: 'DHT' does not name a type

  DHT dht(DHTPIN, DHTTYPE);

  ^

Sender_DHT:10: error: expected unqualified-id before ')' token

  DHT dht(DHTPIN, DHTTYPE);

                         ^

E:\Sender_DHT\Sender_DHT.ino: In function 'void setup()':

Sender_DHT:24: error: expected unqualified-id before '.' token

    dht.begin();

       ^

E:\Sender_DHT\Sender_DHT.ino: In function 'void loop()':

Sender_DHT:36: error: expected primary-expression before '.' token

    float h = dht.readHumidity();     //Luftfeuchte auslesen

                 ^

Sender_DHT:37: error: expected primary-expression before '.' token

    float t = dht.readTemperature();  //Temperatur auslesen

                 ^

exit status 1
'DHT' does not name a type



Go Up