Pages: 1 2 [3] 4   Go Down
Author Topic: 433 MHz Funkthermometer decodieren  (Read 13473 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder die ganze Zeit die Werte auslesen und das ding ins Eisfach stellen,  irgendwann muss er ja den Wert überschreiten. Vielleicht triffst du ihn ja genau.

Habe ich gemacht. Es traf nicht genau 00,0°, weil es immer 1 Minute Messabstand hat.
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21679
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann Umwickle den Sender in ein oder mehrere Handtücher und packe einige warme Kühlelemente dazu. Das müßten den Kühlvorgang verlangsamen.
grüße Uwe
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du wieder was zum Rätseln hast, dann her damit ...   ;-)



Hier hast Du Futter, lieber Jomelo:

Code:
                                                  Ist das die CRC???
000000000000000000 1111 111010100100 111010000000 00011111 1111;25,7;17
000000000000000000 1111 000110100100 111010000000 10011011 1111;25,8;17
000000000000000000 1111 111010100100 111010000000 00011111 1111;25,7;17
000000000000000000 1111 011010100100 111010000000 11101001 1111;25,6;17
000000000000000000 1111 101010100100 111010000000 01101101 1111;25,5;17
000000000000000000 1111 001010100100 111010000000 10101010 1111;25,4;17
000000000000000000 1111 010010100100 111010000000 11001000 1111;25,2;17
000000000000000000 1111 010010100100 111010000000 11001000 1111;25,2;17
000000000000000000 1111 100010100100 111010000000 01001100 1111;25,1;17
000000000000000000 1111 000010100100 111010000000 00000011 1111;25,0;17
000000000000000000 1111 100100100100 111010000000 10011011 1111;24,9;17
000000000000000000 1111 100100100100 111010000000 10011011 1111;24,9;17
000000000000000000 1111 000100100100 111010000000 00011111 1111;24,8;17
000000000000000000 1111 111000100100 111010000000 11101001 1111;24,7;17
000000000000000000 1111 111000100100 111010000000 11101001 1111;24,7;17
000000000000000000 1111 011000100100 111010000000 01101101 1111;24,6;17
000000000000000000 1111 101000100100 111010000000 10101010 1111;24,5;17
000000000000000000 1111 101000100100 111010000000 10101010 1111;24,5;17
000000000000000000 1111 001000100100 111010000000 00101110 1111;24,4;17
000000000000000000 1111 110000100100 111010000000 11001000 1111;24,3;17
000000000000000000 1111 110000100100 111010000000 11001000 1111;24,3;17
000000000000000000 1111 010000100100 111010000000 01001100 1111;24,2;17
000000000000000000 1111 010000100100 111010000000 01001100 1111;24,2;17
000000000000000000 1111 100000100100 111010000000 00000011 1111;24,1;17
000000000000000000 1111 100000100100 000001000000 01010000 1111;24,1;20
000000000000000000 1111 100000100100 000001000000 01010000 1111;24,1;20
8< 8< 8< 8< 8< 8< 8<

Wie wird hinten die Checksumme gebildet? Ich gehe davon aus, dass diese Reihe

000000000000000000 1111 ...... 1111

nur die Signale für "Einpegeln", "Start" und "Ende" der Messreihe sind...
« Last Edit: August 05, 2011, 12:17:10 pm by DE8MSH » Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

...wenn man nicht so genau hinsieht und davon ausgeht, das im Moment KEINE Fehler geprüft werden und weiß, dass nach ein paar Datenreihen sowas wie 03.13° und 00% ankommt, klappt es:




'Here's da code':

Code:
#include <nokia_3310_lcd.h>

Nokia_3310_lcd lcd=Nokia_3310_lcd();

#define _Whole_Data_length    116

byte pin = 2;
byte whole_array[_Whole_Data_length];   
byte value;
byte array_pos=0;
unsigned long duration;
char numStr[8];
       
void setup()
{
    lcd.init();
    lcd.clear();
    lcd.writeString( 12, 1, "Waiting for", 0);
    lcd.writeString( 24, 3, "Data...", 0);
    pinMode(pin, INPUT);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  if ((duration>600)&&(duration<1000)) {
    whole_array[array_pos] = 1;   
    array_pos++;
  }
  if ((duration>1200)&&(duration<4000)){
    whole_array[array_pos] = 0;   
    array_pos++;
  }
 
  if (array_pos>=_Whole_Data_length) {
        lcd.clear();
        lcd.writeStringBig( 12, 0,itoa(createValue(30), numStr, 10 ),0);
        lcd.writeStringBig( 24, 0,itoa(createValue(26), numStr, 10 ),0);
        lcd.writeStringBig( 36, 0,".",0);
        lcd.writeStringBig( 42, 0,itoa(createValue(22), numStr, 10 ),0);
        lcd.writeString( 58, 0, "o", 0);
        lcd.writeString( 58, 2, "Temp", 0);
        lcd.writeStringBig( 30, 3,itoa(createValue(38), numStr, 10 ),0);
        lcd.writeStringBig( 42, 3,itoa(createValue(34), numStr, 10 ),0);
        lcd.writeString( 58, 4, "%", 0 );
        lcd.writeString( 58, 5, "Humi", 0 );
        array_pos=0;
    }
}

byte createValue(byte start)
{
    byte bitpos=0;
    for (byte valuepos=start;valuepos<=start+3;valuepos++) {
          bitWrite(value, bitpos, whole_array[valuepos]);
          bitpos++;
    }
    return ((value>>4)*10)+value%16;
}

Hey volvodani, habe Deinen BCD2DEC Tipp mit eingebaut...
« Last Edit: August 06, 2011, 04:53:18 am by DE8MSH » Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich denke, dass ich nach dem Threat http://arduino.cc/forum/index.php/topic,68773.0.html die Temperatur ziemlich oft richtig auslesen kann:

http://pastie.org/2340236

D.h. "S" und "E" werden meistens richtig erkannt. Den Ausreißer habe ich mal durch Anfassen der Antenne produziert... Jetzt noch Feuchte einbauen und dann kann ich irgendwann mal den Logger zusammenklemmen. RTC muss auch noch dran. Info: "S" und "E" waren notwendig, da nach längerer Laufzeit des Auslesens mal 116, mal 113 usw. Bit ausgelesen wurden. Damit war nicht Sichergestellt, dass ich die Bit für Temp/Feucht durch Abzählen der Stelle immer treffe. Dann kam dort Kram heraus wie 00,2° und 108% und solche Scherze...

Bin aber noch nicht 100% befriedet, da ich am liebsten noch die CRC hinter herausbekommen würde... Hat das schonmal jemand mit dem Ardu gemacht - CRC?

2Bcont...
Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nochmal mit Kontrolle der Werte:

http://pastie.org/2340639

Ziffern sind 10er Temp, 1ner Temp, Nackomma Temp, 10er Feuchte, 1er Feuchte

Juhu, it worx smiley-grin smiley-grin smiley-grin
Logged


0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

...und nun mit meinem Lieblingsdisplay - dem SSD1325 aus einem BZM:

http://www.youtube.com/user/de8msharduino

Ich habe auch schon eine Idee, was ich mit dem Thermometer mache. Nur Anzeigen ist ein wenig doof smiley

2BC...
Logged


Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich werde mir Leseverbot in diesem Thread auferlegen  smiley-mr-green

Was ist denn das nun schon wieder für ein bildhübsches Display ? Dem Code nach kein grafisches, dem Aussehen nach aber schon ?!  smiley-zipper
Logged

 

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Doch, lieber OM, es ist grafisch. Es hat 16 Graustufen, sozusagen. Ober besser: Gelbstufen. Wollte damit mal einen protablen Sattracker bauen:



Habe es aber noch nicht richtig fertig. ISS klappte aber schon smiley-wink

Enstammt Ursprünglich mal diesem Threat:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1294400534

jkw hat mir sehr stark bei dem ganzen geholfen smiley

« Last Edit: August 11, 2011, 12:12:23 am by DE8MSH » Logged


Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

0,5 mm Pinabstand machen mich zögerlich. Da schweiss ich lieber nicht dran rum smiley
Logged

 

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

So ist im Moment der Stand der Dinge:

http://www.qth.at/de8msh/temphumilogger.html

Man sieht, dass ohne Check leider manchmal Falschdaten kommen. Das sind die Peaks. Irgendwie kann ein Nibble >9 sein und dann macht es *peng*. Das sind dann mal ebend 111% Humi oder plötzlich 80°. Da bin ich noch dran.

Im Moment passiert das:

- Lesen der Bitreihe vom 433 MHz Sender
- Auswerten der Nibble und Erstellung von Temp. und Humi.
- Anzeige von Zeit / Datum auf 16x2 Zeichen LCD per RTC
- Anzeige von Temp. / Humi. auf 16x2 Zeichen LCD
- Schreiben der Daten auf SD-Card

Was noch nett wäre:

- Auslesen der Daten per Funk. Habe es schonmal gemacht. Den Sender zu verbauen ich nicht das Problem. Ich habe aber nur einen RX smiley-grin Und der empfängt die Wetterdaten smiley-grin

« Last Edit: August 18, 2011, 01:40:30 am by DE8MSH » Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21679
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://arduiniana.org/libraries/newsoftserial/
Grüße Uwe
Logged

0
Offline Offline
Sr. Member
****
Karma: 5
Posts: 342
A SWL life as a coder... I'll try.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin Uwe,

ich danke Dir sehr für die Info. Die benutzte ich schon in anderen Projekten. Das ist nicht das Problem.

Ich habe aber einen RX zu wenig, denn das Setup sieht ja so aus:

1 x TX (Temperatur-Sender / Außer Haus aufgehängt)
1 x RX (Empfänger an Ardu)

Jetzt brauche ich noch

1 x TX (Sender an Ardu - den habe ich)
1 x RX an PC (den habe ich nicht)

Ich bin echt am überlegen ob ich einen 433 MHz RX-Modul aus einer alten Funksteckdose rausreiße und den RX dann an einen MAX232-Setup setzte, um es an den PC zu klemmen. Recycling mach Spaß... Oder ich kaufe wieder was bei Big C oder Big R.
« Last Edit: August 19, 2011, 07:04:38 am by DE8MSH » Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21679
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Entschuldige, da hatte ich Dich falsch verstanden. Du sprachst von den HF-Modulen.

Das einzige was ich Dir sagen kann, Kontrolliere daß die Module sich nicht gegenseitig stören da Du 2 Sender hast.
Ich weiß nicht ob das Frequenzband 433mHz mehrere Kanäle hat und man diese einstellen kann oder ob man auf 315MHz ausweichen muß.

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

hab mich auch mal an dem Script versucht....

Code:
#define _Whole_Data_length    116
int pin = 2;
byte tempten;
byte tempone;
byte tempcom;
byte humiten;
byte humione;
byte valuepos=0;
byte bitpos=0;
byte bitcounter=1;
byte array_pos=0;
unsigned long duration;
int whole_array[_Whole_Data_length];   

void setup()
{
  pinMode(pin, INPUT);
    Serial.begin(9600);
    Serial.println("Give it to me...");
    delay(2000);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  if ((duration>600)&&(duration<1000)) {
    whole_array[array_pos] = 1;   
    array_pos++;
  }
  if ((duration>1200)&&(duration<4000)){
    whole_array[array_pos] = 0;   
    array_pos++;
  }
 
  if (array_pos>=_Whole_Data_length) {
        for (int valuepos=22;valuepos<=25;valuepos++) {
          bitWrite(tempten, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;
 
        for (int valuepos=26;valuepos<=29;valuepos++) {
          bitWrite(tempone, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;

        for (int valuepos=30;valuepos<=33;valuepos++) {
          bitWrite(tempcom, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;

        for (int valuepos=34;valuepos<=37;valuepos++) {
          bitWrite(humiten, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;       

        for (int valuepos=38;valuepos<=41;valuepos++) {
          bitWrite(humione, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;       

        Serial.print("Es sind ");   
        Serial.print(tempcom,DEC);   
        Serial.print(tempone,DEC);
        Serial.print(",");
        Serial.print(tempten,DEC);
        Serial.print(" Grad Celsius bei ");
        Serial.print(humione,DEC);   
        Serial.print(humiten,DEC);
        Serial.println(" Prozent Feutigkeit.");       
        array_pos=0;
  }
}


Nur sieht der SM nicht so toll aus:

Code:
Es sind 118,12 Grad Celsius bei 31 Prozent Feutigkeit.
Es sind 30,3 Grad Celsius bei 47 Prozent Feutigkeit.
Es sind 156,7 Grad Celsius bei 1114 Prozent Feutigkeit.
Es sind 107,0 Grad Celsius bei 69 Prozent Feutigkeit.
Es sind 27,5 Grad Celsius bei 35 Prozent Feutigkeit.
Es sind 100,10 Grad Celsius bei 08 Prozent Feutigkeit.
Es sind 1213,14 Grad Celsius bei 129 Prozent Feutigkeit.
Es sind 1214,7 Grad Celsius bei 711 Prozent Feutigkeit.
Es sind 713,15 Grad Celsius bei 1315 Prozent Feutigkeit.
Es sind 1513,10 Grad Celsius bei 612 Prozent Feutigkeit.
Es sind 88,12 Grad Celsius bei 58 Prozent Feutigkeit.
Es sind 410,6 Grad Celsius bei 67 Prozent Feutigkeit.
Es sind 78,5 Grad Celsius bei 410 Prozent Feutigkeit.
Es sind 133,5 Grad Celsius bei 120 Prozent Feutigkeit.
Es sind 84,8 Grad Celsius bei 92 Prozent Feutigkeit.
Es sind 1314,1 Grad Celsius bei 1515 Prozent Feutigkeit.
Es sind 118,3 Grad Celsius bei 815 Prozent Feutigkeit.
Es sind 63,1 Grad Celsius bei 153 Prozent Feutigkeit.
Es sind 915,2 Grad Celsius bei 133 Prozent Feutigkeit.

Ist das nur rauschen?

Danke und viele Grüße

Tom
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: