mikrocontroller.net

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


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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,4...) 
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:
int aLastSigIdx = 0;
int cnt = 0;
String aStr = "";

int BinStrToInt(String aStr)
{
  int v = 1;
  int vx = 0;
  for (int i = 1; i <= aStr.length(); i++)
  {
    if (aStr.charAt( aStr.length() - i) == '1') {
      vx = vx + v;
    } else {
    }
    v = v + v;
  }
  return vx;
}

void scan_sensor()
{
  // Breakout-Data-Port hängt auf D31
  pinMode(31, INPUT);
  cnt = 0;
  aStr = "";
  bool finished = false;
  Serial.println("Waiting for Transmisson....");
  while (!finished)
  {
    if (digitalRead(31) == LOW) {      
      digitalWrite(ledPin, HIGH);  
      int WaitTime = cnt - aLastSigIdx;
      if ((WaitTime > 150) && (WaitTime < 250))
      {
        aStr = aStr + "0";
      }
      if ((WaitTime > 250)&&(WaitTime < 400))
      {
        aStr = aStr + "1";
      }
      if (WaitTime > 400)
      {
        // Transmission finished  
        Serial.print("Incoming Sensor Data: ");
        Serial.println(aStr);
        if (aStr.length() == 34)
        {
          Serial.println("Transmission looks okay ...");
          // okay temp. + humidty auslesen
          String aTempStr = aStr.substring(17,26);
          String aHumidtyStr = aStr.substring(26,34);
          // convert str to byte 
          int aTemp = BinStrToInt(aTempStr);
          int aHumi = BinStrToInt(aHumidtyStr);
          Serial.print("Temp: "); 
          Serial.print(aTemp);
          Serial.print(" ");
          Serial.println(aTempStr);
          
          Serial.print("Humidty: "); 
          Serial.print(aHumi);
          Serial.print(" ");
          Serial.println(aHumidtyStr);          
        }
        aStr = "";
        finished = true;
      }
      aLastSigIdx = cnt;
    } else {
      digitalWrite(ledPin, LOW);        
    }
    cnt++;
  }
}

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

Autor: Richard "f" (strohfeuer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Babel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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, ...."

Autor: Marcel K. (hobride)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.