Forum: Projekte & Code FreeTec Außensensor an Arduino empfangen


von Andy (Gast)


Lesenswert?

Hi Leute,

ich bin neu hier und weil ich das forum hier so praktisch finde dachte 
ich .. es interessiert evtl. jemand.
Also ich hab vor ewigen Zeit mal eine FreeTec Wetterstation 
(http://www.yatego.com/primasound/p,4c1322679917e,43eb3e540e9cb9_5,funk-wetterstation--freetec--computerbild-preis-lei) 
gekauft .. bei pearl für kleines geld ... dabei war auch ein kleiner 
10euro außensensor...
naja ich bau mir gerade selber eine Wetterstation mit 
WLAN-Wetter-Prognose etc. Arduino sei dank .. aufjedenfall hatte ich 
keine Lust einen eigenen Außensensor zu bauen und so hab ich die FreeTec 
eben zerlegt und den Empfänger angeschaut und umgesetzt ...
Der Empfänger besteht im prinzip aus einem BreakOut-Board das in der 
Seite verschraubt wird und schon mit den Pins "GND" "VCC" und "DATA" auf 
einen wartet .. (logischerweise mit 3.3v)
nachdem ich ziemlich lange am protokoll gebrütet habe hier das erste 
ergebniss ..

also man bekommt relativ fix 34-bit übertragen ... die übertragung 
funktioniert relativ schlicht .. sobald ein impuls geschickt wird 
beginnt oder endet ein takt .. die takt dauer entscheidet über High/Low.
Es gibt ein Inital-Marker der 3 mal kurz zu beginn Pulst und nach jeder 
Fertigen 34-Bit Sequenz erfolgt eine kleine Pause auf welche dann die 
Sequenz wiederholt wird (ca. 6 mal) ...

so lange rede kurzer sein ....


hier der code:
1
int aLastSigIdx = 0;
2
int cnt = 0;
3
String aStr = "";
4
5
int BinStrToInt(String aStr)
6
{
7
  int v = 1;
8
  int vx = 0;
9
  for (int i = 1; i <= aStr.length(); i++)
10
  {
11
    if (aStr.charAt( aStr.length() - i) == '1') {
12
      vx = vx + v;
13
    } else {
14
    }
15
    v = v + v;
16
  }
17
  return vx;
18
}
19
20
void scan_sensor()
21
{
22
  // Breakout-Data-Port hängt auf D31
23
  pinMode(31, INPUT);
24
  cnt = 0;
25
  aStr = "";
26
  bool finished = false;
27
  Serial.println("Waiting for Transmisson....");
28
  while (!finished)
29
  {
30
    if (digitalRead(31) == LOW) {      
31
      digitalWrite(ledPin, HIGH);  
32
      int WaitTime = cnt - aLastSigIdx;
33
      if ((WaitTime > 150) && (WaitTime < 250))
34
      {
35
        aStr = aStr + "0";
36
      }
37
      if ((WaitTime > 250)&&(WaitTime < 400))
38
      {
39
        aStr = aStr + "1";
40
      }
41
      if (WaitTime > 400)
42
      {
43
        // Transmission finished  
44
        Serial.print("Incoming Sensor Data: ");
45
        Serial.println(aStr);
46
        if (aStr.length() == 34)
47
        {
48
          Serial.println("Transmission looks okay ...");
49
          // okay temp. + humidty auslesen
50
          String aTempStr = aStr.substring(17,26);
51
          String aHumidtyStr = aStr.substring(26,34);
52
          // convert str to byte 
53
          int aTemp = BinStrToInt(aTempStr);
54
          int aHumi = BinStrToInt(aHumidtyStr);
55
          Serial.print("Temp: "); 
56
          Serial.print(aTemp);
57
          Serial.print(" ");
58
          Serial.println(aTempStr);
59
          
60
          Serial.print("Humidty: "); 
61
          Serial.print(aHumi);
62
          Serial.print(" ");
63
          Serial.println(aHumidtyStr);          
64
        }
65
        aStr = "";
66
        finished = true;
67
      }
68
      aLastSigIdx = cnt;
69
    } else {
70
      digitalWrite(ledPin, LOW);        
71
    }
72
    cnt++;
73
  }
74
}

wie sieht den nun die ausgabe im terminal aus:

Incoming Sensor Data: 0110110101110000001101100100101111
Transmission looks okay ...
Temp: 217 011011001
Humidty: 47 00101111

bedeutet also: 21.7°C
luftfeuchtigkeit:  47%

Was ich noch nicht durchschaut habe ist minus grade und temp. über 25.5 
grad... aber bei interesse einfach mal melden.

Gruß Andy

von Richard ". (strohfeuer)


Lesenswert?

Hallo Andy,
da Du mit Arduino experimentierst, und ich auch einen hier rum liegen 
habe, aber ich noch in den Programmieranfängen stecke, bitte ich um 
Hilfe.
Wenn Du möchtest, kannste mich über E-Mail kontaktieren.
Für Deine Mühe im Vorraus besten Dank
Viele Grüße
Strohfeuer

E-Mail: mexico67@t-online.de

von Babel (Gast)


Lesenswert?

@ strohfeuer:

So wird das nichts. Es ist nicht gesagt, dass Andy deine Nachricht 
bekommt. Es geht in seinem Post eher um den Sensor, denn um den Arduino.
Du sagtst nicht, was dein Problem ist, aber das wäre hier (Codesammlung) 
auch ungünstig plaziert, wenn es nicht konkret um die behandelte 
Hardware ginge.

Tipp:
  Frag im "µC & Elektronik" Forum konkret* nach dem, wo du Hilfe 
brauchst.


* "ich möchte mit xyz ABC realisieren, und )brauche Hilfe für den Ansatz 
)mein Code ZYX funktioniert nicht, ...."

von Marcel K. (hobride)


Lesenswert?

Hallo zusammen,

mich würde mal interessieren ob der Andy den Rest auch noch rausbekommen 
hat.
Ich habe noch drei solcher Sensoren rum zu liegen. Die würde ich gerne 
nochmal nutzbar machen denn die passende Wetterstation gibt es nicht 
mehr zu kaufen.


Gruß Marcel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.