diff --git a/IOT/config.ini b/IOT/config.ini index 511b26a..1a4201b 100644 --- a/IOT/config.ini +++ b/IOT/config.ini @@ -24,9 +24,15 @@ build_flags = -D ULTRA_SOUND_TRIGD=12 -D ULTRA_SOUND_ECHO=13 - ; API host url - -D API_HOST=\"iot.epi.cb85.software\" + ; Capteur poids + -D POID_DOUT=14 + -D POID_SCK=15 + + -D MOYENNE_CALIBRATION=20 + ; trash can ID -D TRASHCAN_ONE=\"gdnuxl0wlgurtj3\" + -D TRASHCAN_TWO=\"4brip5fwm001bs9\" + diff --git a/IOT/include/Program.h b/IOT/include/Program.h index 04458d3..94947e1 100644 --- a/IOT/include/Program.h +++ b/IOT/include/Program.h @@ -4,10 +4,12 @@ #include #include #include + #include "API.h" #include "Capteur.h" #include "Ultrason.h" #include "HumiTemp.h" +#include "Balance.h" class Program{ public: @@ -38,6 +40,14 @@ private: */ Capteur *ultrasonic; + /** + * @brief capteur poid pour le niveau de remplissage de la poubelle + * + */ + Balance *balance; + +//TODO chagé type to capteur + /** * @brief Réference de l'API pour les calls * diff --git a/IOT/lib/Balance/include/Balance.h b/IOT/lib/Balance/include/Balance.h new file mode 100644 index 0000000..ad5ef1f --- /dev/null +++ b/IOT/lib/Balance/include/Balance.h @@ -0,0 +1,80 @@ +#ifndef BALANCE_H +#define BALANCE_H +#include +#include + +class Balance { + +public: + + /** + * @brief constructeur + * + * @param doutPin : pin DOUT du module HX711 + * + * @param sckPin : pin horloge du module HX711 + * + * @param poidsRef : valeur de poids posée sur la balance ref en grammes + */ + Balance(int doutPin, int sckPin); + + /** + * @brief determine le poids + * + * @return poids (double) + */ + double getValue(); + + /** + * @brief determine la moyenne poids + * + * @param nbMesure : nombre de mesure effectues pour la moyenne + * + * @return moyenne poids (double) + */ + double getAverage(int nbMesure); + + /** + * @brief tare et scale a 0, et recuperation de la valeur brut du plateau + */ + boolean initCalibration(); + + /** + * @brief initialisation du calibrage + * + * @param[in] poidsRef : poid de reférence pour la calibration + * @param[in] moyenne_calibration : nombre de valeurs a lire pour une mesure + * + * @return renvoi un true si calibration bien effectue + */ + boolean calibration(int poidsRef,int moyenne_calibration); + + //TODO: faire doc setCalibration fact + void setCalibrationFact(int caliFact); + + +private: + + /** + * @brief true = calibration et false = erreur + */ + boolean initialized; + + /** + * @brief Facteur de calibration obtenu par : (val brute poids ref - val brute poids plexiglas)/ poids ref + */ + int calibrationFact; + + /** + * @brief Variable issue de la librairie HX711 qui permet d'utiliser les fonctions de celle-ci + */ + HX711 scale; + + /** + * @brief Valeur moyenne brute du poids sans rien sur la balance juste le plexiglas + */ + long initialVal; + +}; + +#endif diff --git a/IOT/lib/Balance/src/Balance.cpp b/IOT/lib/Balance/src/Balance.cpp new file mode 100644 index 0000000..9858416 --- /dev/null +++ b/IOT/lib/Balance/src/Balance.cpp @@ -0,0 +1,62 @@ +#include "../include/Balance.h" + +Balance::Balance(int doutPin, int sckPin) { + + scale.begin(doutPin, sckPin); + this->initialized = false; + scale.set_scale(); + scale.tare(); + this->initialVal = 0; + this->calibrationFact = 0; +} + +boolean Balance::initCalibration() { + + scale.set_scale(); + scale.tare(); + this->initialVal = scale.read_average(20); + return true; +} + +boolean Balance::calibration(int poidsRef,int moyenne_calibration) { + + int rawValref = 0; // Valeur brute de plexiglas et poids réf + int tempPoids = 0; // C'est la valeur du poids en grammes calculée grâce au facteur de calibration + + rawValref = scale.read_average(moyenne_calibration); + this->calibrationFact = (rawValref - this->initialVal) / poidsRef; + do { + scale.set_scale(calibrationFact); + tempPoids = scale.get_units(5); + if (tempPoids < poidsRef) { + calibrationFact -= 1; + } else if (tempPoids > poidsRef) { + calibrationFact += 1; + } + } while (tempPoids != poidsRef); + return initialized = true; +} + +double Balance::getAverage(int nbMesure) { + + if (initialized == true) { + return scale.get_units(nbMesure); + } else { + return 0; + } +} + +double Balance::getValue() { + + if (initialized == true) { + return scale.get_units(); + } else { + return 0; + } +} + +void Balance::setCalibrationFact(int caliFact){ + this->initialized = true; + this->calibrationFact = caliFact; + scale.set_scale(caliFact); +} diff --git a/IOT/platformio.ini b/IOT/platformio.ini index 00e8ab0..c0a72ad 100644 --- a/IOT/platformio.ini +++ b/IOT/platformio.ini @@ -41,6 +41,7 @@ lib_deps = adafruit/DHT sensor library@^1.4.4 ; DHT11 lib adafruit/Adafruit Unified Sensor@^1.1.9 ; adafruit sensor lib (required by DHT11) ericksimoes/Ultrasonic@^3.0.0 ; lib capteur ultra son + bogde/HX711@0.7.5 ; lib pour la balance ; example: ; erropix/ESP32 AnalogWrite@^0.2 diff --git a/IOT/src/Program.cpp b/IOT/src/Program.cpp index ff791af..d92eab6 100644 --- a/IOT/src/Program.cpp +++ b/IOT/src/Program.cpp @@ -13,8 +13,8 @@ Program::Program(){ //////CAPTEUR///// this->ultrasonic = new Ultrason(ULTRA_SOUND_TRIGD, ULTRA_SOUND_ECHO, "10");//TODO: mettre la valeur en config - this->dht = new HumiTemp(DHTPIN, DHTTYPE, "20:30/60:80");//TODO: mettre la valeur en config + } void Program::loop(){ diff --git a/IOT/src/main.cpp b/IOT/src/main.cpp index 4f7861c..b403c05 100644 --- a/IOT/src/main.cpp +++ b/IOT/src/main.cpp @@ -1,16 +1,47 @@ #ifndef TESTING #include -#include "Program.h" +// #include "Program.h" -Program* program; +// Program* program; + +// void setup() { +// program = new Program(); +// } + +// void loop() { +// program->loop(); +// } + + +#include "Balance.h" + +Balance *balance; + +void setup(){ + Serial.begin(MONITOR_SPEED); + balance = new Balance(14,15); + + Serial.print("start calibr : "); + balance->initCalibration(); + + Serial.println("OK"); + + // Serial.print("posé poids"); + // delay(5000); + // Serial.println("OK"); + // balance->calibration(500, MOYENNE_CALIBRATION); + // Serial.println("END calibration"); + + balance->setCalibrationFact(1077); void setup() { program = new Program(); } -void loop() { - program->loop(); +void loop(){ + // delay(500); + Serial.println(balance->getValue()); } #endif \ No newline at end of file