//biblioteques
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include "Adafruit_SHT31.h"
#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);//écran
Adafruit_SHT31 sht31 = Adafruit_SHT31();//thermometre
RTC_DS1307 RTC;//horloge
//radio
RF24 radio(10, 9); // CE, CSN
const byte address[7] = "00001";
//led
int led=7;
//chauffage simulation
void chauffage(int ton, int toff){
digitalWrite(led,HIGH);
delay(ton);
digitalWrite(led,LOW);
delay(toff);
}
void setup() {
Serial.begin(115200);
pinMode (led,OUTPUT);//led
lcd.init();//allumer ecran
lcd.backlight();//lumière
RTC.begin();//allumer horloge
while (!Serial)//attendre que la console s'affiche
//test capteur temp
Serial.println("SHT31 test");
if (! sht31.begin(0x44)) {
Serial.println("Couldn't find SHT31");
while (1) delay(1);
}
//test horloge
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//initialiser radio
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
Serial.println("******************** Informations ********************");
//horloge
/*DateTime now = RTC.now();
lcd.setCursor (0,0);
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
lcd.print(' ');
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);*/
//afficher cours et nb eleve
String cours = "Maths";
Serial.print("Matière en cours :");
Serial.print("\t\t");
Serial.println(cours);
int nb_eleve= 6;
Serial.print("Nombre d'élève en cours :");
Serial.print("\t");
Serial.println(nb_eleve);
//puissance eleve
int P_eleve=nb_eleve*100;
Serial.print("Puissance des élèves :");
Serial.print("\t\t");
Serial.println(String(P_eleve)+" W");
/*lcd.setCursor (0,0);
lcd.print(cours);
lcd.print(nb_eleve);
lcd.print(" eleves ");*/
//lecture port
int adc = analogRead(A0);
float voltage = adc*5/1023.0;
float current = (voltage-2.2)/0.190;
float P_salle = 230*current;
Serial.print("Puissance des ordinateurs :");
Serial.print("\t");
Serial.println(String(P_salle)+" W");
//temperature exterieur
float T_ext=12;
lcd.setCursor (9,0);
lcd.print("Ex:");
lcd.print(T_ext,0);
lcd.print(" C");
Serial.print("Temp extérieur :");
Serial.print("\t\t");
Serial.println(String(T_ext)+" °C");
//radio.read(&te, sizeof(T_ext));
//acquerir temperature interieur
float T_int = sht31.readTemperature();;
if (! isnan(T_int)) { // check if 'is not a number'
Serial.print("Temp intérieur :");
Serial.print("\t\t");
Serial.println(String(T_int)+" °C");
lcd.setCursor (0,0);
lcd.print("In:");
lcd.print(T_int,0);
lcd.print(" C");
}
else {
lcd.print("Error");
T_int=0.0;
Serial.println("Failed to read temperature");
}
//caclules puissances
float P_solaire=500;
float T_mod;
float T_cons=20;
float T_bp=10;
float fact;
float Pgratis;
Pgratis = P_salle+P_eleve+P_solaire;
Serial.print("Temp consigne :");
Serial.print("\t\t\t");
Serial.println(String(T_cons)+" °C");
Serial.print("Puissance solaire :");
Serial.print("\t\t");
Serial.println(String(P_solaire)+" W");
Serial.print("Puissance gratuite :");
Serial.print("\t\t");
Serial.println(String(Pgratis)+" W");
T_mod= T_cons - T_bp;
/*if (T_int>T_cons){
fact=0;
}*/
if (T_ext > T_cons){
fact=0;
}
if ((T_ext < 10)||(T_int < 15)){
fact=100;
}
if ((T_mod < T_ext) && (T_ext < T_cons)){
fact=(100/T_bp)*(T_cons - T_ext);
}
Serial.print("Facteur de marche :");
Serial.print("\t\t");
Serial.println(String(fact));
float Ptheo = (3000* fact)/100;
lcd.setCursor (0,1);
lcd.print("Pth: "+String(Ptheo));
Serial.print("Puissance théorique :");
Serial.print("\t\t");
Serial.println(String(Ptheo)+" W");
float Pelec_reel = Ptheo - Pgratis;
lcd.setCursor(8,1);
lcd.print(" Pr: "+String(Pelec_reel));
Serial.print("Puissance réelle :");
Serial.print("\t\t");
Serial.println(String(Pelec_reel)+" W");
float fact_cor = Pelec_reel/3000;
Serial.print("Facteur corrigé :");
Serial.print("\t\t");
Serial.println(String(fact_cor));
int periode = 10000;
int Ton = periode * fact_cor;
int Toff = periode - Ton;
Serial.print("Periode allumé :");
Serial.print("\t\t");
Serial.println(String(Ton)+" ms");
Serial.print("Periode éteinte :");
Serial.print("\t\t");
Serial.println(String(Toff)+" ms");
//simulation chauffage
chauffage(Ton,Toff);
lcd.println();
Serial.println();
}