Untitled
unknown
plain_text
3 years ago
7.5 kB
11
Indexable
#if defined(ESP32)
#include <WiFi.h>
#include <FirebaseESP32.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#endif
#include <HX711_ADC.h>
// Provide the RTDB payload printing info and other helper functions.
#include <addons/RTDBHelper.h>
//Providing firebase credentials (connects node mcu with firebase)
#define DATABASE_URL "weighing-scale-fcc38.firebaseio.com"
#define FIREBASE_AUTH "E06w5PKTXgZ96DdMYUffNiLn026DyJE14qPTmhpM"
//6596.25
//Providing wifi name and password
#define WIFI_SSID "GP24-Net-Hotspot"
#define WIFI_PASSWORD "2444666668888888"
/* 3. Define the Firebase Data object */
FirebaseData fbdo;
/* 4, Define the FirebaseAuth data for authentication data */
FirebaseAuth auth;
/* Define the FirebaseConfig data for config data */
FirebaseConfig config;
//pins:
const int HX711_dout = D2; //mcu > HX711 dout pin
const int HX711_sck = D3; //mcu > HX711 sck pin
//initializing variables
int calibrate_button4,mass_placed4, reset_button4,terminate;
long t;
//HX711 constructor:
HX711_ADC LoadCell(HX711_dout, HX711_sck);
void setup() {
Serial.begin(115200); delay(10);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
/* Assign the certificate file (optional) */
// config.cert.file = "/cert.cer";
// config.cert.file_storage = StorageType::FLASH;
/* Assign the database URL(required) */
config.database_url = DATABASE_URL;
config.signer.test_mode = true;
Firebase.reconnectWiFi(true);
/* Initialize the library with the Firebase authen and config */
Firebase.begin(&config, &auth);
//Initializing some variables in firebase database to zero
Firebase.setInt(fbdo,"calibrate_button4",0);
Firebase.setInt(fbdo,"reset_complete4",0);
Firebase.setInt(fbdo,"calibration_end4",0);
Firebase.setInt(fbdo,"mass_placed4",0);
Firebase.setInt(fbdo,"reset_button4",0);
Firebase.setInt(fbdo,"terminate4",0);
Firebase.setFloat(fbdo,"rear_right_weight",0);
Serial.println();
Serial.println("Starting...");
LoadCell.begin();
long stabilizingtime = 2000; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time
boolean _tare = false; //set this to false if you don't want tare to be performed in the next step
LoadCell.start(stabilizingtime, _tare);
if (LoadCell.getTareTimeoutFlag() || LoadCell.getSignalTimeoutFlag()) {
Serial.println("Timeout, check MCU>HX711 wiring and pin designations");
while (1);
}
else {
LoadCell.setCalFactor(1.0); // user set calibration value (float), initial value 1.0 may be used for this sketch
Serial.println("Startup is complete");
}
while (!LoadCell.update());
Serial.println("waiting for calibrate button to press");
calibrate_button4 = Firebase.getInt(fbdo,"calibrate_button4");
while(!calibrate_button4)
{
calibrate_button4 = Firebase.getInt(fbdo,"calibrate_button4");
}
Serial.println("Calibrate Button is read as 1");
calibrate(); //start calibration procedure
Firebase.setInt(fbdo,"calibrate_button4",0);
Firebase.setInt(fbdo,"calibration_end4",0);
Serial.println("Calibration done");
}
void loop() {
static boolean newDataReady = 0;
const int serialPrintInterval = 0; //increase value to slow down serial print activity
// check for new data/start next conversion:
if (LoadCell.update()) newDataReady = true;
// get smoothed value from the dataset:
if (newDataReady) {
if (millis() > t + serialPrintInterval) {
float i = LoadCell.getData();
Serial.print("Load_cell output val: ");
Serial.println(i);
Firebase.setFloat(fbdo,"rear_right_weight",i);
newDataReady = 0;
t = millis();
}
}
terminate = Firebase.getInt(fbdo,"terminate4");
reset_button4 = Firebase.getInt(fbdo,"reset_button4");
if(reset_button4 == 1)
{
Firebase.setInt(fbdo,"reset_button4",0);
LoadCell.tareNoDelay();
}
if (LoadCell.getTareStatus() == true) {
Serial.println("Tare complete");
}
calibrate_button4 = Firebase.getInt(fbdo,"calibrate_button4");
if(calibrate_button4 ==1)
{
calibrate();
Firebase.setInt(fbdo,"calibrate_button4",0);
}
if(terminate == 1)
terminate1();
}
void calibrate() {
reset_button4=0;
Serial.println("***");
Serial.println("Start calibration:");
Serial.println("Place the load cell on a level stable surface.");
Serial.println("Remove any load applied to the load cell and then press ok from the application.");
// Reset the value to zero
Serial.println("Waiting for ok button to press.");
reset_button4 = Firebase.getInt(fbdo,"reset_button4");
while(!reset_button4)
{
reset_button4 = Firebase.getInt(fbdo,"reset_button4");
}
Serial.println("OK button is read as one");
if (reset_button4 == 1) {
LoadCell.tareNoDelay();
}
if (LoadCell.getTareStatus() == true) {
Serial.println("Tare complete");
}
Firebase.setInt(fbdo,"reset_button4",0);
Firebase.setInt(fbdo,"reset_complete4",1);
Serial.println("Now, place your 50gm mass on the loadcell and press ok button.");
mass_placed4 = Firebase.getInt(fbdo,"mass_placed4");
while(!mass_placed4)
{
mass_placed4 = Firebase.getInt(fbdo,"mass_placed4");
}
Firebase.setInt(fbdo,"mass_placed4",0);
float known_mass = 1.0;
LoadCell.update();
LoadCell.refreshDataSet(); //refresh the dataset to be sure that the known mass is measured correct
float newCalibrationValue = LoadCell.getNewCalibration(known_mass); //get the new calibration value
Serial.println(newCalibrationValue);
Serial.println("End calibration");
Firebase.setInt(fbdo,"calibration_end4",1);
Serial.println("***");
}
void terminate1()
{
//Initializing some variables in firebase database to zero
Firebase.setInt(fbdo,"calibrate_button4",0);
Firebase.setInt(fbdo,"reset_complete4",0);
Firebase.setInt(fbdo,"calibration_end4",0);
Firebase.setInt(fbdo,"mass_placed4",0);
Firebase.setInt(fbdo,"reset_button4",0);
Firebase.setInt(fbdo,"terminate4",0);
Firebase.setFloat(fbdo,"rear_right_weight",0);
Serial.begin(57600); delay(10);
Serial.println();
Serial.println("Starting...");
LoadCell.begin();
long stabilizingtime = 2000; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time
boolean _tare = false; //set this to false if you don't want tare to be performed in the next step
LoadCell.start(stabilizingtime, _tare);
if (LoadCell.getTareTimeoutFlag() || LoadCell.getSignalTimeoutFlag()) {
Serial.println("Timeout, check MCU>HX711 wiring and pin designations");
while (1);
}
else {
LoadCell.setCalFactor(1.0); // user set calibration value (float), initial value 1.0 may be used for this sketch
Serial.println("Startup is complete");
}
while (!LoadCell.update());
Serial.println("waiting for calibrate button to press");
calibrate_button4 = Firebase.getInt(fbdo,"calibrate_button4");
while(!calibrate_button4)
{
calibrate_button4 = Firebase.getInt(fbdo,"calibrate_button4");
}
Serial.println("Calibrate Button is read as 1");
calibrate(); //start calibration procedure
Firebase.setInt(fbdo,"calibrate_button4",0);
Firebase.setInt(fbdo,"calibration_end4",0);
}
Editor is loading...