Arduino Coding Help!! I am trying to combine 3 arduino projects into one compreh
ID: 3871530 • Letter: A
Question
Arduino Coding Help!!
I am trying to combine 3 arduino projects into one comprehensive project. The project scope is as followed:
Arduino mega board to set up a temperature, humidity, barometer pressure, and light intensity sensor with a passive infrared sensor. The device will have led functionality to give a visual representation of the sensor ranges, it will also email the primary user if the sensors read information outside of the preset ranges. A Nokia Liquid Crystal Display will give a visual read out of all real time collected data. We will be including a set of Arduino speakers to give an auditory warning incase the email or visual warnings are neglected. All the data will be saved on a mico SD card in a .cvs file with real time clock, Said data will be encrypted and decrypted using a algorithm.
the code thta I am using is below:
Email sample
#include <ESP8266WiFi.h>
#include "DHT.h"
const char* ssid = "ZyXEL"; // SSID of local network
const char* password = "YourPasswordGoesHere"; // Password on network
WiFiClient client;
char servername[]="educ8s.tv"; // remote server we will connect to
String result;
float temperature;
float humidity;
#define DHTPIN D8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
delay(2000);
Serial.begin(115200);
Serial.println("Connecting");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println("Connected");
delay(1000);
readSensor();
String temperatureString = String(temperature,1);
String humidityString = String(humidity,1);
sendDataToServer(temperatureString,humidityString);
}
void loop() {
}
void sendDataToServer(String temperature, String humidity)
{
if (client.connect(servername, 80)) { //starts client connection, checks for connection
Serial.println("connected");
client.println("GET /send_email.php?temperature="+temperature+"&humidity="+humidity+" HTTP/1.1"); //Send data
client.println("Host: educ8s.tv");
client.println("Connection: close"); //close 1.1 persistent connection
client.println(); //end of get request
}
else {
Serial.println("connection failed"); //error message if no client connect
Serial.println();
}
while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
client.stop(); //stop client
Serial.println(result);
}
void readSensor()
{
humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println("Temperature:");
Serial.println(temperature);
Serial.println("Humidity:");
Serial.println(humidity);
}
Weather Station Code
#include <BH1750.h>
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
#include <LCD5110_Graph.h>
#include "LowPower.h"
#define ALTITUDE 216.0 // Altitude in Sparta, Greece
#define DHTPIN 4
#define DHTTYPE DHT22
LCD5110 lcd(9,10,11,13,12);
SFE_BMP180 pressure;
extern unsigned char SmallFont[];
extern unsigned char TinyFont[];
float temperature;
int lightIntensity = 0;
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;
void setup(void) {
initLCD();
lightMeter.begin();
pressure.begin();
}
void loop() {
float humidity, pressure;
readLight();
if(lightIntensity>30)
{
lcd.disableSleep();
dht.begin();
delay(400);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
pressure = readPressure();
lcd.clrScr();
char tempF[6];
char humF[6];
char pressF[7];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 5, 1, humF);
dtostrf(pressure, 5, 1, pressF);
//Print UI
lcd.setFont(TinyFont);
lcd.print("TEMP",LEFT+17,0);
lcd.print("HUM",LEFT+62,0);
lcd.print("PRESSURE",CENTER,30);
lcd.setFont(SmallFont);
//Printing Temperature
lcd.print(tempF,LEFT,10);
lcd.print("~C",LEFT+30,10);
//Printing Humidity
lcd.print(humF,LEFT+45,10);
lcd.print("%",RIGHT,10);
//Printing Pressure
lcd.print(pressF,12,40);
lcd.print(" hPa",48,40);
lcd.update();
sleepForTwoMinutes();
}else
{
lcd.enableSleep();
sleepForTwoMinutes();
}
}
void initLCD()
{
lcd.InitLCD();
lcd.setFont(TinyFont);
lcd.print("Weather Station v0.5",CENTER,0);
lcd.update();
}
void sleepForTwoMinutes()
{
for(int i=0;i<15;i++)
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
void readLight()
{
delay(10);
lightIntensity = lightMeter.readLightLevel();
}
float readPressure()
{
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
p0 = pressure.sealevel(P,ALTITUDE);
return p0;
}
}
}
}
}
Data Logger Code
#include <LowPower.h>
#include <BH1750.h>
#include <SFE_BMP180.h>
#include <DHT.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"
#include <SD.h>
#include <SPI.h>
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define ALTITUDE 216.0 // Altitude in Sparta, Greece
char TEMPERATURE = 'C' ; //Change it to F to log degrees Fahrenheit
int INTERVAL = 1; //interval of measurements in minutes
DateTime dt(2015, 12, 14, 9, 28, 40, 1); //Date and time
int CS_PIN = 10;
int ledPin = 7;
int POWERPIN = 3;
File file;
DHT dht(DHTPIN,DHTTYPE);
SFE_BMP180 pressureSensor;
BH1750 lightMeter;
int id = 0;
void setup ()
{
pinMode(POWERPIN, OUTPUT);
digitalWrite(POWERPIN,HIGH);
pinMode(ledPin, OUTPUT);
initializeSD();
//rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above
}
void loop ()
{
String temperature;
String humidity;
String light;
String pressure;
String entryId;
String dateEntry;
id++;
digitalWrite(POWERPIN,HIGH);
digitalWrite(ledPin,HIGH);
delay(2000);
initSensors();
delay(10000);
entryId = String(id);
humidity = String(dht.readHumidity());
if(TEMPERATURE =='F')
{
temperature = String(dht.readTemperature(true));
}else
{
temperature = String(dht.readTemperature());
}
pressure = readPressure();
light = readLight();
dateEntry = DateLogEntry();
String entry = entryId+","+dateEntry+","+temperature+","+humidity+","+pressure+","+light;
writeEntryToFile(entry);
delay(2000);
sleepForMinutes(INTERVAL);
}
void initSensors()
{
Wire.begin();
rtc.begin();
dht.begin();
pressureSensor.begin();
lightMeter.begin();
}
void sleepForMinutes(int interval)
{
int i=0;
int seconds = interval*60;
int iterations = seconds/8;
for (byte i = 0; i <= A5; i++)
{
pinMode (i, OUTPUT); // changed as per below
digitalWrite (i, LOW); // ditto
}
digitalWrite(POWERPIN,LOW);
for(i=0;i<iterations;i++)
{
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}
float readPressureFromSensor()
{
char status;
double T,P,p0,a;
status = pressureSensor.startTemperature();
if (status != 0)
{
delay(status);
status = pressureSensor.getTemperature(T);
if (status != 0)
{
status = pressureSensor.startPressure(3);
if (status != 0)
{
delay(status);
status = pressureSensor.getPressure(P,T);
if (status != 0)
{
p0 = pressureSensor.sealevel(P,ALTITUDE);
return p0;
}
}
}
}
}
String DateLogEntry()
{
String dateEntry;
String year;
String month;
String day;
String hour;
String minute;
DateTime now = rtc.now();
year = String(now.year());
month = String(now.month());
day = String(now.date());
if(now.hour()<10)
{
hour = "0"+String(now.hour());
}else
{
hour = String(now.hour());
}
if(now.minute()<10)
{
minute = "0"+String(now.minute());
}else
{
minute = String(now.minute());
}
dateEntry = month+"/"+day+"/"+year+" "+hour+":"+minute;
return dateEntry;
}
String readLight()
{
uint16_t lux = lightMeter.readLightLevel();
return String(lux);
}
String readPressure()
{
String pressure;
pressure = String(readPressureFromSensor());
return pressure;
}
void initializeSD()
{
pinMode(10, OUTPUT); // change this to 53 on a mega // don't follow this!!
digitalWrite(10, HIGH); // Add this line
if (SD.begin(CS_PIN))
{
digitalWrite(ledPin,LOW);
} else
{
digitalWrite(ledPin,LOW);
delay(1000);
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
digitalWrite(ledPin,HIGH);
return;
}
}
int openFileToWrite(char filename[])
{
file = SD.open(filename, FILE_WRITE);
if (file)
{
digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin,LOW);
delay(200);
digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin,LOW);
return 1;
} else
{
return 0;
}
}
int writeToFile(String text)
{
if (file)
{
file.println(text);
return 1;
} else
{
return 0;
}
}
void closeFile()
{
if (file)
{
file.close();
}
}
void writeEntryToFile(String entry)
{
openFileToWrite("log.txt");
writeToFile(entry);
closeFile();
}
Explanation / Answer
#include "DHT.h"
const char* ssid = "ZyXEL"; // SSID of local network
const char* password = "YourPasswordGoesHere"; // Password on network
WiFiClient client;
char servername[]="educ8s.tv"; // remote server we will connect to
String result;
float temperature;
float humidity;
#define DHTPIN D8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
delay(2000);
Serial.begin(115200);
Serial.println("Connecting");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println("Connected");
delay(1000);
readSensor();
String temperatureString = String(temperature,1);
String humidityString = String(humidity,1);
sendDataToServer(temperatureString,humidityString);
}
void loop() {
}
void sendDataToServer(String temperature, String humidity)
{
if (client.connect(servername, 80)) { //starts client connection, checks for connection
Serial.println("connected");
client.println("GET /send_email.php?temperature="+temperature+"&humidity="+humidity+" HTTP/1.1"); //Send data
client.println("Host: educ8s.tv");
client.println("Connection: close"); //close 1.1 persistent connection
client.println(); //end of get request
}
else {
Serial.println("connection failed"); //error message if no client connect
Serial.println();
}
while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
client.stop(); //stop client
Serial.println(result);
}
void readSensor()
{
humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println("Temperature:");
Serial.println(temperature);
Serial.println("Humidity:");
Serial.println(humidity);
}
Weather Station Code
#include <BH1750.h>
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
#include <LCD5110_Graph.h>
#include "LowPower.h"
#define ALTITUDE 216.0 // Altitude in Sparta, Greece
#define DHTPIN 4
#define DHTTYPE DHT22
LCD5110 lcd(9,10,11,13,12);
SFE_BMP180 pressure;
extern unsigned char SmallFont[];
extern unsigned char TinyFont[];
float temperature;
int lightIntensity = 0;
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;
void setup(void) {
initLCD();
lightMeter.begin();
pressure.begin();
}
void loop() {
float humidity, pressure;
readLight();
if(lightIntensity>30)
{
lcd.disableSleep();
dht.begin();
delay(400);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
pressure = readPressure();
lcd.clrScr();
char tempF[6];
char humF[6];
char pressF[7];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 5, 1, humF);
dtostrf(pressure, 5, 1, pressF);
//Print UI
lcd.setFont(TinyFont);
lcd.print("TEMP",LEFT+17,0);
lcd.print("HUM",LEFT+62,0);
lcd.print("PRESSURE",CENTER,30);
lcd.setFont(SmallFont);
//Printing Temperature
lcd.print(tempF,LEFT,10);
lcd.print("~C",LEFT+30,10);
//Printing Humidity
lcd.print(humF,LEFT+45,10);
lcd.print("%",RIGHT,10);
//Printing Pressure
lcd.print(pressF,12,40);
lcd.print(" hPa",48,40);
lcd.update();
sleepForTwoMinutes();
}else
{
lcd.enableSleep();
sleepForTwoMinutes();
}
}
void initLCD()
{
lcd.InitLCD();
lcd.setFont(TinyFont);
lcd.print("Weather Station v0.5",CENTER,0);
lcd.update();
}
void sleepForTwoMinutes()
{
for(int i=0;i<15;i++)
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
void readLight()
{
delay(10);
lightIntensity = lightMeter.readLightLevel();
}
float readPressure()
{
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
p0 = pressure.sealevel(P,ALTITUDE);
return p0;
}
}
}
}
}
Data Logger Code
#include <LowPower.h>
#include <BH1750.h>
#include <SFE_BMP180.h>
#include <DHT.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"
#include <SD.h>
#include <SPI.h>
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define ALTITUDE 216.0 // Altitude in Sparta, Greece
char TEMPERATURE = 'C' ; //Change it to F to log degrees Fahrenheit
int INTERVAL = 1; //interval of measurements in minutes
DateTime dt(2015, 12, 14, 9, 28, 40, 1); //Date and time
int CS_PIN = 10;
int ledPin = 7;
int POWERPIN = 3;
File file;
DHT dht(DHTPIN,DHTTYPE);
SFE_BMP180 pressureSensor;
BH1750 lightMeter;
int id = 0;
void setup ()
{
pinMode(POWERPIN, OUTPUT);
digitalWrite(POWERPIN,HIGH);
pinMode(ledPin, OUTPUT);
initializeSD();
//rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above
}
void loop ()
{
String temperature;
String humidity;
String light;
String pressure;
String entryId;
String dateEntry;
id++;
digitalWrite(POWERPIN,HIGH);
digitalWrite(ledPin,HIGH);
delay(2000);
initSensors();
delay(10000);
entryId = String(id);
humidity = String(dht.readHumidity());
if(TEMPERATURE =='F')
{
temperature = String(dht.readTemperature(true));
}else
{
temperature = String(dht.readTemperature());
}
pressure = readPressure();
light = readLight();
dateEntry = DateLogEntry();
String entry = entryId+","+dateEntry+","+temperature+","+humidity+","+pressure+","+light;
writeEntryToFile(entry);
delay(2000);
sleepForMinutes(INTERVAL);
}
void initSensors()
{
Wire.begin();
rtc.begin();
dht.begin();
pressureSensor.begin();
lightMeter.begin();
}
void sleepForMinutes(int interval)
{
int i=0;
int seconds = interval*60;
int iterations = seconds/8;
for (byte i = 0; i <= A5; i++)
{
pinMode (i, OUTPUT); // changed as per below
digitalWrite (i, LOW); // ditto
}
digitalWrite(POWERPIN,LOW);
for(i=0;i<iterations;i++)
{
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}
float readPressureFromSensor()
{
char status;
double T,P,p0,a;
status = pressureSensor.startTemperature();
if (status != 0)
{
delay(status);
status = pressureSensor.getTemperature(T);
if (status != 0)
{
status = pressureSensor.startPressure(3);
if (status != 0)
{
delay(status);
status = pressureSensor.getPressure(P,T);
if (status != 0)
{
p0 = pressureSensor.sealevel(P,ALTITUDE);
return p0;
}
}
}
}
}
String DateLogEntry()
{
String dateEntry;
String year;
String month;
String day;
String hour;
String minute;
DateTime now = rtc.now();
year = String(now.year());
month = String(now.month());
day = String(now.date());
if(now.hour()<10)
{
hour = "0"+String(now.hour());
}else
{
hour = String(now.hour());
}
if(now.minute()<10)
{
minute = "0"+String(now.minute());
}else
{
minute = String(now.minute());
}
dateEntry = month+"/"+day+"/"+year+" "+hour+":"+minute;
return dateEntry;
}
String readLight()
{
uint16_t lux = lightMeter.readLightLevel();
return String(lux);
}
String readPressure()
{
String pressure;
pressure = String(readPressureFromSensor());
return pressure;
}
void initializeSD()
{
pinMode(10, OUTPUT); // change this to 53 on a mega // don't follow this!!
digitalWrite(10, HIGH); // Add this line
if (SD.begin(CS_PIN))
{
digitalWrite(ledPin,LOW);
} else
{
digitalWrite(ledPin,LOW);
delay(1000);
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
digitalWrite(ledPin,HIGH);
return;
}
}
int openFileToWrite(char filename[])
{
file = SD.open(filename, FILE_WRITE);
if (file)
{
digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin,LOW);
delay(200);
digitalWrite(ledPin,HIGH);
delay(200);
digitalWrite(ledPin,LOW);
return 1;
} else
{
return 0;
}
}
int writeToFile(String text)
{
if (file)
{
file.println(text);
return 1;
} else
{
return 0;
}
}
void closeFile()
{
if (file)
{
file.close();
}
}
void writeEntryToFile(String entry)
{
openFileToWrite("log.txt");
writeToFile(entry);
closeFile();
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.