Hi all,
I am working on a weather station project and yeasterday I tested the setup for the first time.
The setup consists in:
- genuino mini (original)
- 1 DHT22 sensor (temperature and relative humidity)
- 1 BMP180 sensor by Sparkfun (pressure)
- 1 DS18B20 sensor (foliage temperature)
- 1 SEN-13322 sensor by Sparkfun (soil moisture)
- 1 Photoresistor (ambient light)
- 1 microSD Breakout by Sparkfun (data storage)
- 1 battery pack (4 AA rechargeable batteries, 1.2V @ 2000 mAh)
The setup seems to use about 50 mA in Active Mode and 40 mA in Sleep Mode.
I used the LowPower library to power down the Arduino for about 5 min. Measurements are taken for about 2300 ms.
How can I improve the effeciency of my setup?
The sketch I am using is the following:
#include <LowPower.h>
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
// Temperature and Relative humidity sensor
#define DHTPIN 7
#define DHTTYPE DHT22
// Scheda MicroSD
#include <SPI.h>
#include <SdFat.h>
DHT dht(DHTPIN, DHTTYPE);
SFE_BMP180 pressure;
const int sensorPin = A1; // Foliage temperature sensor
int SoilPin = A2; // Soil sensor PIN
double sensorReading8,sensorReading7; // Pressure (sensorReading7), Temperature (sensorReading8)
String dataString = "";
const uint8_t chipSelect = 8;
const uint32_t interval = 300000; // time intervall in ms
uint32_t elaptime = 0;
SdFat sd;
SdFile myFile;
void setup() {
//Serial.begin(115200);
dht.begin();
pressure.begin();
sd.begin(chipSelect, SPI_QUARTER_SPEED);
}
void loop() {
char status;
delay(2000);
uint32_t t1 = millis();
int sensorReading1 = analogRead(0); // Light
float sensorReading2 = dht.readHumidity(); // Relative Humidity
double sensorReading3 = dht.readTemperature(); // Temperature (°C)
float sensorReading4 = dht.computeHeatIndex(float(sensorReading3), sensorReading2, false); // Heat Index (°C)
float sensorReading5 = analogRead(sensorPin); // Foliage temperature (°C)
int sensorReading6 = analogRead(SoilPin); // Soil Moisture
status = pressure.startTemperature();
delay(status);
pressure.getTemperature(sensorReading7); // Temperature (pressure sensor)
status = pressure.startPressure(3);
delay(status);
pressure.getPressure(sensorReading8,sensorReading3); // Pressure
dataString = String(t1) + "," + String(elaptime) + "," + String(sensorReading1) + "," + String(sensorReading2) + "," + String(sensorReading3) + "," + String(sensorReading4)
+ "," + String(sensorReading5) + "," + String(sensorReading6) + "," + String(sensorReading7) + "," + String(sensorReading8); // convert to CSV
saveData(); // save to SD card
//Serial.println(dataString);
elaptime = millis() - t1;
delay(50);
while (elaptime < interval){
//delay(4000);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
elaptime = elaptime + 8000;
}
}
void saveData(){
myFile.open("data.csv", O_WRITE | O_CREAT | O_AT_END);
myFile.println(dataString);
myFile.close(); // close the file
}
Thank you in advance!