Beszélő konyhamérleg okos telefonnal

A konyhamérleg 1-5 kg-os méréshatárral rendelkezik. Jellemzően fél Wheatstone híddal működő alkalmazások terjedtek el az olcsó eszközökben. A mérőérzékelő egy olcsó alumínium tömbön van kialakítva két nyúlásmérő bélyeg felhasználásával. Az egyik bélyeg a nyomott oldalon van (alábbi ábrán kék színnel jelölve) a másik bélyeg vele szemben a  húzott oldalon (alábbi ábrán piros színnel jelölve) helyezkedik el. Erő hatására amennyivel növekszik R#1 ellenállása, annyival csökken R#2 ellenállása, így a híd kimenetén villamos feszültség jelenik meg. A megjelenő villamos feszültség nagysága csekély, ezért különleges mérőerősítőre van szükség. A nagy sorozatban gyártott különleges mérőerősítő modulra szerelt változata olcsó, jellemzően kb. 500 Ft vagy annál olcsóbban kapható.

Olcsó tömeg (erő) mérőérzékelő alumínium tömbön kialakítva:

erőmérő felépítése és működése
erőmérő felépítése és működése

Olcsó tömeg (erő) mérőérzékelő beleső felépítése:

erőmérő szenzor fizikai felépítése
erőmérő szenzor fizikai felépítése

Hőmérséklet kompenzálása nincs, az erőmérő cellát a jelfeldolgozó elektronikához a lehető legrövidebb kábellel kell bekötni, lehetőleg egy árnyékolt kábellel, aminek végét csak az erősítőnél kell a föld ponthoz kötni. A méréshatár alsó tartományában az alumínium mérőérzékelő kifejezetten pontatlan, ezért a pontatlanság kiküszöbölésére az 50 g alatti méréseket egy rozsdamentes acélból készült +100 grammos tömb hozzáadásával kell végezni. A rozsdamentes acélból készült tömböt bele lehet tenni az ételbe is, majd a kapott eredményből fejben könnyen le lehet vonni a végeredményből.

Ez jónak tűnik. A mérőérzékelő jele bemegy egy 24 bites delta-szigma A/D átalakítóba ami I2C porton kommunikál az Arduinoval, amiből kijövő jel sorosan jut be a Wifi modulba.

A mechanikai kialakítása igazi ázsiai megoldás, de a demonstráció céljából ez nem számít.

DIY IoT Weighing Scale using HX711 Load Cell, Nodemcu ESP8266, & Arduino

Kapcsolási rajz:

erőmérő cella arduino és wifi modul bekötése
erőmérő cella arduino és wifi modul bekötése

HX711 bekötése, tömbvázlata:

HX 711 24 bites A/D bekötése, tömbvázlata
HX 711 24 bites A/D bekötése, tömbvázlata

HX-711 modul közeli képe:

HX-711 modulnak a közeli képe
HX-711 modulnak a közeli képe

Erőmérő cella felépítése, bekötése a HX-711 modulhoz:

erőmérő cella 4 vezetékes
erőmérő cella 4 vezetékes

Jellemző paraméterek:

Névleges érzékenység: 1,0 ± 0,15 mV / V
Nulla kimenet: ± 0,1 mV / V
Linearitás: 0,03% / 30 perc
Beviteli vége: piros +, fekete-
Kimeneti vége: zöld +, fehér-
Impedancia: 1000 ± 10% Ω
Maximális üzemi feszültség: 12 V DC
Üzemi hőmérsékleti tartomány: -20 ~ 60 ° C
Teljes méret: 80 x 13 x 13 mm


Arduino program (nincs tesztelve):

#include <SoftwareSerial.h>
#include “HX711.h”
#include <stdlib.h>
SoftwareSerial nodemcu(7, 8); // nodemcu module connected here
#define DOUT 3
#define CLK 2
HX711 scale(DOUT, CLK);
int rbutton = 6; // this button will be used to reset the scale to 0.
String myString;
String cmessage; // complete message
char buff[10];
float weight;
float calibration_factor = 419640; // for me this vlaue works just perfect 419640
//———————————————————————————-
void setup() {
Serial.begin(9600);
nodemcu.begin(9600);
pinMode(rbutton, INPUT_PULLUP);
scale.set_scale();
scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading
}
//———————————————————————————–
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor
weight = scale.get_units(5); //5
myString = dtostrf(weight, 3, 2, buff);
cmessage = cmessage + “Weight” + “:” + myString + “Kg”+”,”;
nodemcu.println(cmessage);
Serial.println(cmessage);
cmessage = “”;
Serial.println();
if ( digitalRead(rbutton) == LOW)
{
scale.set_scale();
scale.tare(); //Reset the scale to 0
}
}
// end code


IoT mérleg Nodemcu ESP8266 programja:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SoftwareSerial.h>
#include <SimpleTimer.h>
WidgetLCD lcd(V2);
char auth[] = “jQkA7IneoZOlBxyPKUjQ0n71d7pwHVCh”;
// Your WiFi credentials.
// Set password to “” for open networks.
char ssid[] = “ZONG MBB-E8231-6E63”;
char pass[] = “electroniclinic”;
SimpleTimer timer;
String myString; // complete message from arduino, which consistors of snesors data
char rdata; // received charactors
String weight;
int firstVal;
// This function sends Arduino’s up time every second to Virtual Pin (1).
// In the app, Widget’s reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void myTimerEvent()
{
// You can send any value at any time.
// Please don’t send more that 10 values per second.
Blynk.virtualWrite(V1, millis() / 1000);
}
//————————————————————————————–
void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L,sensorvalue1);
}
//—————————————————————————————-
void loop()
{
if (Serial.available() == 0 )
{
Blynk.run();
timer.run(); // Initiates BlynkTimer
}
if (Serial.available() > 0 )
{
rdata = Serial.read();
myString = myString+ rdata;
// Serial.print(rdata);
if( rdata == ‘\n’)
{
Serial.println(myString);
// new code
weight = getValue(myString, ‘,’, 0);
myString = “”;
// end new code
}
}
}
//—————————————————————————
void sensorvalue1()
{
lcd.clear();
lcd.print(0,0,weight);
lcd.print(0,1,”ElectroniClinic”);
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length() – 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : “”;
}
// end code

Arduino Libraries Download and Projects they are used in “Project codes”