Arduino – Weerstation
Het is mogelijk om met diverse sensoren een klein weerstationnetje te bouwen, op deze pagina vind je een goede opzet daarvoor, er is hierover al veel te vinden op het internet, ik heb dit ontwerp en script uitgewerkt zodat de gegevens worden opgeslagen op een SD kaart.
LET OP: De bibliotheken onderaan deze pagina werken op ArduinoIDE 1.6.5 (voor 1.8.x voldoen de bibliotheken niet meer)
Weerstation v1.0
Wat heb je nodig?
1)Â 2x weerstand 4,7 kOhm.
2) 2x DALLAS temp sensor (bij voorkeur de waterdichte voeler, tbv grond temperatuur e.d.)
3) 1x DHT11 of DHT22 temperatuur en luchtvochtigheidssensor
4) 1x SD CARD reader module + SD CARD
Arduino bibliotheken:
1) 1-Wire bibliotheek
2) DALLAS bibliotheek
3) DHT bibliotheek
Onderaan deze pagina zijn alle bibliotheken als 1 pakket te downloaden!
Sluit de sensoren en modules aan volgens het onderstaande schema:
Scripts
Dit is het script voor Weerstation v1.0, ik heb waar mogelijk commentaar regels tussen de code gezet om e.e.a. uit te leggen!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
// Weerstation v1.0 door S. Ebeltjes @ Domoticx.nl // Getest op Arduino IDE v1.6.5 // Gebruikte componenten: // 1x Arduino UNO. // 2x DALLAS temperatuur sensoren. // 1x DHT11 temperatuur en luchtvochtigheids sensor. // 1x SD-CARD module. #include <OneWire.h> // 1-Wire bibliotheek #include <DallasTemperature.h> // 1-Wire DALLAS bibliotheek #include "DHT.h" // DHT bibliotheek #include <SPI.h> // SPI bibliotheek #include <SD.h> // SD-CARD bibliotheek DHT dht; // Pinnen configureren van modules aangesloten op de arduino. #define ONE_WIRE_BUS 2 #define DHT_PIN 3 #define SD_SDCS 10 // Chipselect #define SD_MOSI 11 // Master output / Slave input #define SD_SCK 13 // Seriele klok #define SD_MISO 12 // Master input / Slave output #define PULL_TIJD_MS 5000 // Tijd in ms voor pulls van de sensoren. // Bestandsnaam op de SD CARD, moet DOS 8.3 formaat zijn! // > max 8 karakters en 3 voor de extensie. char bestand[] = "WEERST.CSV"; File dataFile; // Maak een 1-wire instantie om te communiceren met 1-wire apparaten). OneWire oneWire(ONE_WIRE_BUS); // Pas de 1-wire referentie toe op de variabele DallasTemperature. DallasTemperature sensors(&oneWire); // SD CARD variabelen definieren vanuit de bilbiotheek. Sd2Card card; SdVolume volume; void setup(void) { // Start seriele poort. Serial.begin(9600); Serial.println("Weerstation v1.0"); Serial.println(""); Serial.print("* Initialiseren 1-Wire..."); // Start de 1-wire bibliotheek. sensors.begin(); Serial.println("OK"); Serial.print("* Initialiseren DHT..."); // Start de DHT bibliotheek. dht.setup(DHT_PIN); Serial.println("OK"); Serial.print("* Initialiseren SD-CARD..."); if (!SD.begin(SD_SDCS)) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); // Initialiseer SD CARD card.init(SPI_HALF_SPEED, SD_SDCS); // SD CARD type weergeven. Serial.print(" - SD-CARD info: "); switch (card.type()) { case SD_CARD_TYPE_SD1: Serial.print("SD1"); break; case SD_CARD_TYPE_SD2: Serial.print("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.print("SDHC"); break; default: Serial.print("Onbekend"); } // Probeer 'volume' en/of 'partitie' gegevens te openen, dit moet zijn FAT16 of FAT32. if (!volume.init(card)) { Serial.println(""); Serial.println(" > Kan geen FAT16/FAT32 partitie vinden, wees er zeker van dat je de kaart geformateerd hebt!"); return; } // Print het type FAT op SD CARD van het eerste volume. uint32_t volumesize; Serial.print(" / FAT"); Serial.print(volume.fatType(), DEC); // Print de SD CARD grootte. volumesize = volume.blocksPerCluster(); volumesize *= volume.clusterCount(); volumesize *= 512; Serial.print(" / "); Serial.print(volumesize / 1024 / 1024); Serial.println("MB"); // Open een bestand op de SD CARD. Serial.print(" - Open bestand '"); Serial.print(bestand); Serial.print("' om gegevens te schrijven..."); dataFile = SD.open(bestand, FILE_WRITE); if (dataFile) { Serial.println("OK"); dataFile.close(); } else { Serial.println("FOUT!, kan het bestand niet openen!"); } } Serial.println(""); Serial.print("DS TMP 1"); Serial.print("\t"); Serial.print("DS TMP 2"); Serial.print("\t"); Serial.print("DHT TMP"); Serial.print("\t"); Serial.print("\t"); Serial.println("DHT HUM"); } void loop(void) { // Roep sensors.requestTemperatures() aan om een globale temperatuur aanvraag // te doen op alle aangesloten apparaten. sensors.requestTemperatures(); // 1e DALLAS temperatuur sensor. float dallas_temp_1 = sensors.getTempCByIndex(0); // 2e DALLAS temperatuur sensor. float dallas_temp_2 = sensors.getTempCByIndex(1); delay(dht.getMinimumSamplingPeriod()); // Haal de data uit de DHT module en zet deze om in een variabele. float dht_temperatuur = dht.getTemperature(); float dht_vochtigheid = dht.getHumidity(); // Toon gegevens via de seriele poort. Serial.print(dallas_temp_1); Serial.print("\t\t"); Serial.print(dallas_temp_2); Serial.print("\t\t"); Serial.print(dht_temperatuur); Serial.print("\t\t"); Serial.println(dht_vochtigheid); // Schrijf de gegevens weg naar de SD CARD. dataFile = SD.open(bestand, FILE_WRITE); if (dataFile) { dataFile.print(dallas_temp_1); dataFile.print(";"); dataFile.print(dallas_temp_2); dataFile.print(";"); dataFile.print(dht_temperatuur); dataFile.print(";"); dataFile.println(dht_vochtigheid); // Sluit het bestand af. dataFile.close(); } // Wachttijd voor de volgende pull delay(PULL_TIJD_MS); } |
Het resultaat via de seriële monitor:
CSV bestand op de SD kaart:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
24.69;24.69;25.00;45.00 24.69;24.69;25.00;43.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.69;25.00;44.00 24.69;24.56;25.00;44.00 24.69;24.56;25.00;44.00 24.69;24.56;25.00;45.00 24.69;24.56;25.00;44.00 24.69;24.56;25.00;44.00 24.69;24.56;25.00;44.00 |
Weerstation v1.1
Het v1.0 weerstation is uitgebreid met een Barometer module BMP180, welke de temperatuur, druk en hoogte (t.o.v zeeniveau) kan bepalen.
Wat heb je nodig (extra)?
1) 1x BMP180 barometrische druk sensor module.
Arduino bibliotheken:
1) Adafruit unified sensor bibliotheek
2) BMP085/180Â Wire bibliotheek
Onderaan deze pagina zijn alle bibliotheken als 1 pakket te downloaden!
Sluit de sensoren en modules aan volgens het onderstaande schema:
Scripts
Dit is het script voor Weerstation v1.1, ik heb waar mogelijk commentaar regels tussen de code gezet om e.e.a. uit te leggen!
Vanwege ruimtegebrek op de Arduino UNO moesten er wat “onnodige informatie” regels geschrapt worden!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
// Weerstation v1.1 door S. Ebeltjes @ Domoticx.nl // Getest op Arduino IDE v1.6.5 // Gebruikte componenten: // 1x Arduino UNO. // 2x DALLAS temperatuur sensoren. // 1x DHT11 temperatuur en luchtvochtigheids sensor. // 1x BMP180 barometrische druksensor. // 1x SD-CARD module. #include <OneWire.h> // 1-Wire bibliotheek #include <DallasTemperature.h> // 1-Wire DALLAS bibliotheek #include "DHT.h" // DHT bibliotheek #include <SPI.h> // SPI bibliotheek #include <SD.h> // SD-CARD bibliotheek #include <Wire.h> // 1-Wire bibliotheek #include <Adafruit_Sensor.h> // Adafruit sensor bibliotheek #include <Adafruit_BMP085_U.h> // BMP bibliotheek DHT dht; // Pinnen configureren van modules aangesloten op de arduino. #define ONE_WIRE_BUS 2 #define DHT_PIN 3 #define SD_SDCS 10 // Chipselect #define SD_MOSI 11 // Master output / Slave input #define SD_SCK 13 // Seriele klok #define SD_MISO 12 // Master input / Slave output // BMP module pinnen. // BMP_SDA op A4 // BMP_SCL op A5 #define PULL_TIJD_MS 5000 // Tijd in ms voor pulls van de sensoren. // Bestandsnaam op de SD CARD, moet DOS 8.3 formaat zijn! // > max 8 karakters en 3 voor de extensie. char bestand[] = "WEERST.CSV"; String splitsingteken = ";"; File dataFile; // Maak een 1-wire instantie om te communiceren met 1-wire apparaten). OneWire oneWire(ONE_WIRE_BUS); // Pas de 1-wire referentie toe op de variabele DallasTemperature. DallasTemperature sensors(&oneWire); // BMP180 Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); float bmp_temperature; float bmp_seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; // set up variables using the SD utility library functions: Sd2Card card; SdVolume volume; void setup(void) { // Start seriele poort. Serial.begin(19200); Serial.println("Weerstation v1.1"); Serial.print("* Initialiseren 1-Wire..."); // Start de 1-wire bibliotheek. sensors.begin(); Serial.println("OK"); Serial.print("* Initialiseren DHT sensor..."); // Start de DHT bibliotheek. dht.setup(DHT_PIN); Serial.println("OK"); Serial.print("* Initialiseren BMP sensor..."); if (!bmp.begin()) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); // Initialiseer BMP module. sensor_t sensor; bmp.getSensor(&sensor); } Serial.print("* Initialiseren SD-CARD..."); if (!SD.begin(SD_SDCS)) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); // Initialiseer SD CARD card.init(SPI_HALF_SPEED, SD_SDCS); } Serial.println(""); Serial.print("DS TMP1"); Serial.print("\t\t"); Serial.print("DS TMP2"); Serial.print("\t\t"); Serial.print("DHT TMP"); Serial.print("\t\t"); Serial.print("DHT HUM"); Serial.print("\t\t"); Serial.print("BMP TMP"); Serial.print("\t\t"); Serial.print("BMP HPA"); Serial.print("\t\t"); Serial.println("BMP ALT"); } void loop(void) { // Roep sensors.requestTemperatures() aan om een globale temperatuur aanvraag // te doen op alle aangesloten apparaten. sensors.requestTemperatures(); // 1e DALLAS temperatuur sensor. float dallas_temp_1 = sensors.getTempCByIndex(0); // 2e DALLAS temperatuur sensor. float dallas_temp_2 = sensors.getTempCByIndex(1); // Haal de data uit de DHT module en zet deze om in variabelen. delay(dht.getMinimumSamplingPeriod()); float dht_temperatuur = dht.getTemperature(); float dht_vochtigheid = dht.getHumidity(); // Haal de (temperatuur)gegevens op uit de BMP module. sensors_event_t event; bmp.getEvent(&event); if (event.pressure) { bmp.getTemperature(&bmp_temperature); } else { //ERROR; } // Toon gegevens via de seriele poort. Serial.print(dallas_temp_1); Serial.print("\t\t"); Serial.print(dallas_temp_2); Serial.print("\t\t"); Serial.print(dht_temperatuur); Serial.print("\t\t"); Serial.print(dht_vochtigheid); Serial.print("\t\t"); Serial.print(bmp_temperature); Serial.print("\t\t"); Serial.print(event.pressure); Serial.print("\t\t"); Serial.println(bmp.pressureToAltitude(bmp_seaLevelPressure, event.pressure)); // Schrijf de gegevens weg naar de SD CARD. dataFile = SD.open(bestand, FILE_WRITE); if (dataFile) { dataFile.print(dallas_temp_1); dataFile.print(splitsingteken); dataFile.print(dallas_temp_2); dataFile.print(splitsingteken); dataFile.print(dht_temperatuur); dataFile.print(splitsingteken); dataFile.print(dht_vochtigheid); dataFile.print(splitsingteken); dataFile.print(bmp_temperature); dataFile.print(splitsingteken); dataFile.print(event.pressure); dataFile.print(splitsingteken); dataFile.println(bmp.pressureToAltitude(bmp_seaLevelPressure, event.pressure)); // Sluit het bestand af. dataFile.close(); } // Wachttijd voor de volgende pull delay(PULL_TIJD_MS); } |
Het resultaat via de seriële monitor:
CSV bestand op de SD kaart:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
24.25;24.44;25.00;45.00;23.70;1022.02;-72.76 24.25;24.44;25.00;45.00;23.60;1021.93;-72.02 24.31;24.44;25.00;45.00;23.60;1021.95;-72.19 24.25;24.44;25.00;45.00;23.60;1021.92;-71.94 24.31;24.44;25.00;45.00;23.60;1022.04;-72.93 24.31;24.44;25.00;45.00;23.60;1021.91;-71.85 24.25;24.44;25.00;45.00;23.60;1021.91;-71.85 24.25;24.44;25.00;45.00;23.60;1022.05;-73.01 24.25;24.44;25.00;45.00;23.70;1022.02;-72.76 24.25;24.44;25.00;45.00;23.70;1021.94;-72.10 24.31;24.44;25.00;45.00;23.70;1022.01;-72.68 24.25;24.44;25.00;45.00;23.70;1022.02;-72.76 24.25;24.44;25.00;45.00;23.70;1022.01;-72.68 24.31;24.44;25.00;45.00;23.70;1021.97;-72.35 24.25;24.44;25.00;45.00;23.70;1021.98;-72.43 |
Weerstation v1.2
Het v1.1 weerstation is uitgebreid met een RTC1307 klok, welke de tijd en datum bijhoud.
Wat heb je nodig (extra)?
1) 1x RTC1307 klok module.
Arduino bibliotheken:
1) DS13xxx bibliotheek
Onderaan deze pagina zijn alle bibliotheken als 1 pakket te downloaden!
Sluit de sensoren en modules aan volgens het onderstaande schema:
Scripts
Dit is het script voor Weerstation v1.2, ik heb waar mogelijk commentaar regels tussen de code gezet om e.e.a. uit te leggen!
Vanwege ruimtegebrek op de Arduino UNO moesten er wat “onnodige variabelen” geschrapt of vereenvoudigd worden!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
// Weerstation v1.2 door S. Ebeltjes @ Domoticx.nl // Getest op Arduino IDE v1.6.5 // Gebruikte componenten: // 1x Arduino UNO. // 2x DALLAS temperatuur sensoren. // 1x DHT11 temperatuur en luchtvochtigheids sensor. // 1x BMP180 barometrische druksensor. // 1x RTC1307 klok module. // 1x SD-CARD module. // [BIBLIOTHEKEN IMPORTEREN] #include <OneWire.h> // 1-Wire bibliotheek #include <DallasTemperature.h> // 1-Wire DALLAS bibliotheek #include <DHT.h> // DHT bibliotheek #include <SPI.h> // SPI bibliotheek #include <SD.h> // SD-CARD bibliotheek #include <DS1307.h> // RCT bibliotheek #include <Wire.h> // 1-Wire bibliotheek #include <Adafruit_Sensor.h> // Adafruit sensor bibliotheek #include <Adafruit_BMP085_U.h> // BMP bibliotheek // [PIN CONFIGURATIES] #define ONE_WIRE_BUS 2 #define DHT_PIN 3 #define SD_SDCS 10 // Chipselect #define SD_MOSI 11 // Master output / Slave input #define SD_SCK 13 // Seriele klok #define SD_MISO 12 // Master input / Slave output #define RTC_SDA 4 // Seriele data #define RTC_SCL 5 // Seriele klok // BMP module aansluiten op de volgende pinnen: // BMP_SDA op A4 // BMP_SCL op A5 // [INSTELLINGEN] // PULL TIJD #define PULL_TIJD_MS 5000 // Tijd in ms voor pulls van de sensoren. // // RTC TIJD // Tijd en datum instellen? 0=nee 1=ja // Hoe tijd in te stellen?: // 1) Upload het script met tijdinst = 1 en wacht even een paar seconden. // 2) Upload het script met tijdinst = 0 zodat de rtc niet telkens opnieuw de ingebakken tijd instelt. int tijdinst = 0; // De tijd om in te stellen (y = jaar, mo = maand, d = dag, h = uur, mi = minuut, s = seconde) int y = 2015; int mo = 5; int d = 23; int h = 12; int mi = 10; int s = 0; // // OPSLAG SD-KAART // Bestandsnaam op de SD CARD, moet DOS 8.3 formaat zijn! // > max 8 karakters en 3 voor de extensie. char bestand[] = "WEERST.CSV"; String st = ";"; // splitsingsteken. // [VARIABELEN] // 1-WIRE OneWire oneWire(ONE_WIRE_BUS); // Maak een 1-wire instantie om te communiceren met 1-wire apparaten). DallasTemperature sensors(&oneWire); // Pas de 1-wire referentie toe op de variabele "DallasTemperature". // DHT DHT dht; // Pas de DHT referentie toe op de variabele "dht". // BMP180 Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); float bmp_temperature; float bmp_seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; // set up variables using the SD utility library functions: Sd2Card card; SdVolume volume; // RTC DS1307 rtc(RTC_SDA, RTC_SCL); // RTC pinnen configureren. // SD KAART File dataFile; // Pas de File referentie toe op de variabele "datafile". void setup(void) { // Start seriele poort. Serial.begin(19200); Serial.println("Weerstation v1.2"); Serial.print("* Initialiseren 1-Wire..."); // Start de 1-wire bibliotheek. sensors.begin(); Serial.println("OK"); Serial.print("* Initialiseren DHT sensor..."); // Start de DHT bibliotheek. dht.setup(DHT_PIN); Serial.println("OK"); Serial.print("* Initialiseren BMP sensor..."); if (!bmp.begin()) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); // Initialiseer BMP module. sensor_t sensor; bmp.getSensor(&sensor); } if (tijdinst == 1) { Serial.print("* Tijd instellen op RTC klok..."); rtc.halt(false); rtc.setTime(h, mi, s); rtc.setDate(d, mo, y); Serial.println("OK"); } Serial.print("* Controleren RTC klok..."); if (rtc.getDateStr() == "85.85.2165" || rtc.getDateStr() == "00.00.2000") { Serial.println("GEFAALD"); } else { Serial.println("OK"); } Serial.print("* Initialiseren SD-CARD..."); if (!SD.begin(SD_SDCS)) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); card.init(SPI_HALF_SPEED, SD_SDCS); // Initialiseer SD CARD } Serial.println(""); Serial.print("DATUM"); Serial.print("\t\t"); Serial.print("TIJD"); Serial.print("\t\t"); Serial.print("DS TMP1"); Serial.print("\t\t"); Serial.print("DS TMP2"); Serial.print("\t\t"); Serial.print("DHT TMP"); Serial.print("\t\t"); Serial.print("DHT HUM"); Serial.print("\t\t"); Serial.print("BMP TMP"); Serial.print("\t\t"); Serial.print("BMP HPA"); Serial.print("\t\t"); Serial.println("BMP ALT"); } void loop(void) { // Roep sensors.requestTemperatures() aan om een globale temperatuur aanvraag // te doen op alle aangesloten apparaten. sensors.requestTemperatures(); // Haal de data uit de DHT module en zet deze om in variabelen. delay(dht.getMinimumSamplingPeriod()); // Haal de (temperatuur)gegevens op uit de BMP module. sensors_event_t event; bmp.getEvent(&event); if (event.pressure) { bmp.getTemperature(&bmp_temperature); } else { //ERROR; } // Toon gegevens via de seriele poort. Serial.print(rtc.getDateStr()); Serial.print("\t"); // RTC Datum = rtc.getDateStr() Serial.print(rtc.getTimeStr()); Serial.print("\t"); // RTC Tijd = rtc.getTimeStr() Serial.print(sensors.getTempCByIndex(0)); Serial.print("\t\t"); // DALLAS temperatuur 1 = sensors.getTempCByIndex(0) Serial.print(sensors.getTempCByIndex(1)); Serial.print("\t\t"); // DALLAS temperatuur 2 = sensors.getTempCByIndex(1) Serial.print(dht.getTemperature()); Serial.print("\t\t"); // DHT temperatuur = dht.getTemperature() Serial.print(dht.getHumidity()); Serial.print("\t\t"); // DHT luchtvochtigheid = dht.getHumidity() Serial.print(bmp_temperature); Serial.print("\t\t"); Serial.print(event.pressure); Serial.print("\t\t"); Serial.println(bmp.pressureToAltitude(bmp_seaLevelPressure, event.pressure)); // Schrijf de gegevens weg naar de SD CARD. dataFile = SD.open(bestand, FILE_WRITE); if (dataFile) { dataFile.print(rtc.getDateStr()); dataFile.print(st); dataFile.print(rtc.getTimeStr()); dataFile.print(st); dataFile.print(sensors.getTempCByIndex(0)); dataFile.print(st); dataFile.print(sensors.getTempCByIndex(1)); dataFile.print(st); dataFile.print(dht.getTemperature()); dataFile.print(st); dataFile.print(dht.getHumidity()); dataFile.print(st); dataFile.print(bmp_temperature); dataFile.print(st); dataFile.print(event.pressure); dataFile.print(st); dataFile.println(bmp.pressureToAltitude(bmp_seaLevelPressure, event.pressure)); dataFile.close(); // Sluit het bestand af. } delay(PULL_TIJD_MS); // Wachttijd voor de volgende pull } |
Het resultaat via de seriële monitor:
CSV bestand op de SD kaart:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
23.05.2015;12:12:09;27.44;29.25;26.00;42.00;25.40;1018.34;-42.29 23.05.2015;12:12:13;27.44;29.31;27.00;42.00;25.40;1018.37;-42.54 23.05.2015;12:12:16;27.44;29.31;27.00;42.00;25.40;1018.40;-42.79 23.05.2015;12:12:19;27.50;29.37;27.00;42.00;25.50;1018.36;-42.46 23.05.2015;12:12:22;27.50;29.37;27.00;42.00;25.50;1018.42;-42.96 23.05.2015;12:12:25;27.56;29.37;27.00;42.00;25.50;1018.36;-42.46 23.05.2015;12:12:28;27.56;29.44;27.00;42.00;25.50;1018.40;-42.79 23.05.2015;12:12:31;27.56;29.44;27.00;42.00;25.50;1018.39;-42.71 23.05.2015;12:12:34;27.62;29.50;27.00;41.00;25.50;1018.38;-42.63 23.05.2015;12:12:37;27.62;29.56;27.00;42.00;25.50;1018.35;-42.38 23.05.2015;12:12:40;27.62;29.56;26.00;43.00;25.50;1018.35;-42.38 23.05.2015;12:12:43;27.69;29.62;27.00;42.00;25.50;1018.45;-43.20 23.05.2015;12:12:46;27.69;29.62;27.00;42.00;25.50;1018.34;-42.29 23.05.2015;12:12:49;27.69;29.69;27.00;42.00;25.50;1018.38;-42.63 23.05.2015;12:12:52;27.75;29.69;27.00;42.00;25.50;1018.40;-42.79 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
// Weerstation v1.2light door S. Ebeltjes @ Domoticx.nl // Getest op Arduino IDE v1.6.5 // Gebruikte componenten: // 1x Arduino UNO. // 2x DALLAS temperatuur sensoren. // 1x DHT11 temperatuur en luchtvochtigheids sensor. // 1x RTC1307 klok module. // 1x SD-CARD module. // [BIBLIOTHEKEN IMPORTEREN] #include <OneWire.h> // 1-Wire bibliotheek #include <DallasTemperature.h> // 1-Wire DALLAS bibliotheek #include <DHT.h> // DHT bibliotheek #include <SPI.h> // SPI bibliotheek #include <SD.h> // SD-CARD bibliotheek #include <DS1307.h> // RCT bibliotheek #include <Wire.h> // 1-Wire bibliotheek #include <Adafruit_Sensor.h> // Adafruit sensor bibliotheek // [PIN CONFIGURATIES] #define ONE_WIRE_BUS 2 #define DHT_PIN 3 #define SD_SDCS 10 // Chipselect #define SD_MOSI 11 // Master output / Slave input #define SD_SCK 13 // Seriele klok #define SD_MISO 12 // Master input / Slave output #define RTC_SDA 4 // Seriele data #define RTC_SCL 5 // Seriele klok // [INSTELLINGEN] // PULL TIJD #define PULL_TIJD_MS 5000 // Tijd in ms voor pulls van de sensoren. // // RTC TIJD // Tijd en datum instellen? 0=nee 1=ja // Hoe tijd in te stellen?: // 1) Upload het script met tijdinst = 1 en wacht even een paar seconden. // 2) Upload het script met tijdinst = 0 zodat de rtc niet telkens opnieuw de ingebakken tijd instelt. int tijdinst = 0; // De tijd om in te stellen (y = jaar, mo = maand, d = dag, h = uur, mi = minuut, s = seconde) int y = 2015; int mo = 5; int d = 23; int h = 12; int mi = 10; int s = 0; // // OPSLAG SD-KAART // Bestandsnaam op de SD CARD, moet DOS 8.3 formaat zijn! // > max 8 karakters en 3 voor de extensie. char bestand[] = "WEERST.CSV"; String st = ";"; // splitsingsteken. // [VARIABELEN] // 1-WIRE OneWire oneWire(ONE_WIRE_BUS); // Maak een 1-wire instantie om te communiceren met 1-wire apparaten). DallasTemperature sensors(&oneWire); // Pas de 1-wire referentie toe op de variabele "DallasTemperature". // DHT DHT dht; // Pas de DHT referentie toe op de variabele "dht". Sd2Card card; SdVolume volume; // RTC DS1307 rtc(RTC_SDA, RTC_SCL); // RTC pinnen configureren. // SD KAART File dataFile; // Pas de File referentie toe op de variabele "datafile". void setup(void) { // Start seriele poort. Serial.begin(19200); Serial.println("Weerstation v1.2"); Serial.print("* Initialiseren 1-Wire..."); // Start de 1-wire bibliotheek. sensors.begin(); Serial.println("OK"); Serial.print("* Initialiseren DHT sensor..."); // Start de DHT bibliotheek. dht.setup(DHT_PIN); Serial.println("OK"); if (tijdinst == 1) { Serial.print("* Tijd instellen op RTC klok..."); rtc.halt(false); rtc.setTime(h, mi, s); rtc.setDate(d, mo, y); Serial.println("OK"); } Serial.print("* Controleren RTC klok..."); if (rtc.getDateStr() == "85.85.2165" || rtc.getDateStr() == "00.00.2000") { Serial.println("GEFAALD"); } else { Serial.println("OK"); } Serial.print("* Initialiseren SD-CARD..."); if (!SD.begin(SD_SDCS)) { Serial.println("GEFAALD!"); } else { Serial.println("OK"); card.init(SPI_HALF_SPEED, SD_SDCS); // Initialiseer SD CARD } Serial.println(""); Serial.print("DATUM"); Serial.print("\t\t"); Serial.print("TIJD"); Serial.print("\t\t"); Serial.print("DS TMP1"); Serial.print("\t\t"); Serial.print("DS TMP2"); Serial.print("\t\t"); Serial.print("DHT TMP"); Serial.print("\t\t"); Serial.print("DHT HUM"); } void loop(void) { // Roep sensors.requestTemperatures() aan om een globale temperatuur aanvraag // te doen op alle aangesloten apparaten. sensors.requestTemperatures(); // Haal de data uit de DHT module en zet deze om in variabelen. delay(dht.getMinimumSamplingPeriod()); // Toon gegevens via de seriele poort. Serial.print(rtc.getDateStr()); Serial.print("\t"); // RTC Datum = rtc.getDateStr() Serial.print(rtc.getTimeStr()); Serial.print("\t"); // RTC Tijd = rtc.getTimeStr() Serial.print(sensors.getTempCByIndex(0)); Serial.print("\t\t"); // DALLAS temperatuur 1 = sensors.getTempCByIndex(0) Serial.print(sensors.getTempCByIndex(1)); Serial.print("\t\t"); // DALLAS temperatuur 2 = sensors.getTempCByIndex(1) Serial.print(dht.getTemperature()); Serial.print("\t\t"); // DHT temperatuur = dht.getTemperature() Serial.print(dht.getHumidity()); Serial.print("\t\t"); // DHT luchtvochtigheid = dht.getHumidity() // Schrijf de gegevens weg naar de SD CARD. dataFile = SD.open(bestand, FILE_WRITE); if (dataFile) { dataFile.print(rtc.getDateStr()); dataFile.print(st); dataFile.print(rtc.getTimeStr()); dataFile.print(st); dataFile.print(sensors.getTempCByIndex(0)); dataFile.print(st); dataFile.print(sensors.getTempCByIndex(1)); dataFile.print(st); dataFile.print(dht.getTemperature()); dataFile.print(st); dataFile.print(dht.getHumidity()); dataFile.print(st); dataFile.close(); // Sluit het bestand af. } delay(PULL_TIJD_MS); // Wachttijd voor de volgende pull } |
[#/arduino/projecten/domoticx_weerstation” ]