-         
RSS-Feed anzeigen

witkatz

Wetterstation

Bewertung: 2 Stimmen mit einer durchschnittlichen Bewertung von 5,00.
Ich möchte meine Bare-Metal gebastelte "Wetterstation" vorstellen, von der ich mittlerweile zwei gebaut habe - eine für zu hause und eine fürs Büro.
Angezeigt werden:
- Aussentemperatur und -feuchte gemessen mit einem AM2302, der draußen am Fenster an einer geschützten Stelle angebracht ist und mit einem flachen Kabel mit der Station verbunden
- Innentemperatur und Luftdruck gemessen mit BMP280
- Luftdrucktendenz angezeigt mit einem Pfeil und per Knopfdruck als Zahl abrufbar

Klicke auf die Grafik für eine größere Ansicht

Name:	DSC_0037sm.jpg
Hits:	13
Größe:	49,2 KB
ID:	31752Klicke auf die Grafik für eine größere Ansicht

Name:	DSC_0038sm.jpg
Hits:	11
Größe:	57,3 KB
ID:	31753


Die Wetterstation entstand als Idee zum Verbasteln von Restbeständen:
- PIC16F88 - mittlerweile veralteter "moderner" Nachfolger des PIC16F84
- 2x16 LCD Modul
- BMP280 - Breakout Module und AM2302 (DHT22) die bei Ali für kleines € zu haben sind
- Lochrasterplatine, Steckernetzteil und ein paar Bauteile aus dem Wühlfundus

Klicke auf die Grafik für eine größere Ansicht

Name:	Wetterst_Schaltpl.PNG
Hits:	13
Größe:	105,3 KB
ID:	31754

Den PIC16F88 habe ich genommen, weil er I2C hat. Allerdings habe ich erst nach dem Verlöten mit der Software angefangen und gemerkt, dass der 16F88 nur Slave in der Peripherie-Hardware unterstützt. Also zuerst das I2C Bit-Banging für die Masterfunktion anhand der AN554 erstellt, s. Anhang wit_SW_I2C_Master.c und .h

Dann kam der BMP280 an die Reihe. Der Bosch Sensor ist ganz schön unhandlich in der Auswertung. Um die Werte für die Temperatur und barometrischen Druck zu erhalten, sind ganz schön viele 32bit Berechnungen durchzuführen, s. Anhang BME280_swI2C.c und .h. Damit waren die 4k Flashspeicher des PIC schon ziemlich gut gefüllt. Um Programmspeicher zu sparen und mächtige Bibliotheksfunktionen wie Stringfunktionen oder itoa zu vermeiden entstand eine kleine LCD Ausgaberoutine für Fixkomma Zahlenwerte
Code:
/* write int val to display with fixed dec position and sign 
 * nWidth must be big enough for decimal and sign width due to value range
 */
void FixCommavalToDisp(int val, char nWidth, char nDec){
    char disptext[9];
    int tmpval = val;

    if (tmpval < 0) tmpval = -tmpval;

    // Text von rechts füllen
    disptext[nWidth] = 0; // '/0' Terminierung
    
    // Nachkommastellen
    if(nDec){
        while((nDec) && (nWidth)){
            disptext[--nWidth] = int_to_char(&tmpval); 
            nDec--;
        }
        // Dezimalpunkt
        if(nWidth) disptext[--nWidth] = '.';
    }
    
    // Vorkommastellen
    while(nWidth){
        disptext[--nWidth] = int_to_char(&tmpval); 
        if((tmpval == 0) && (nWidth)){
            if (val < 0) disptext[--nWidth] = '-'; // Vorzeichen
            break;
        }
    }
    
    // führende Leerzeichen auffüllen
    while(nWidth) {
        disptext[--nWidth] = ' ';
    }
    
    // LCD Ausgabe
    putsLCD(disptext);
    
    return;
}
char int_to_char(int *val){
    char c = (*val % 10) + '0';
    *val /= 10;
    return c;
}
Zum Glück ist der DHT22 mit einem relativ simplen Protokoll einfach auszulesen. Die DHT22 Auswertung braucht nur wenig Programmspeicher.
Kompiliert mit dem XC8 im free mode also auf niedrigster Optimierungsstufe belegt das Projekt 94% des 4k Flashspeichers des PIC16F88, wovon allein die Prozeduren für die Auswertung des BMP280 ca. 2k belegen.
Miniaturansichten angehängter Grafiken Angehängte Dateien

"Wetterstation" bei Twitter speichern "Wetterstation" bei Facebook speichern "Wetterstation" bei Mister Wong speichern "Wetterstation" bei YiGG.de speichern "Wetterstation" bei Google speichern "Wetterstation" bei del.icio.us speichern "Wetterstation" bei Webnews speichern "Wetterstation" bei My Yahoo speichern

Aktualisiert: 30.06.2016 um 09:53 von witkatz

Stichworte: am2302, bmp280, dht22, pic Stichworte bearbeiten
Kategorien
Fertige Projekte , PIC Basteln

Kommentare