Tartalom:
- Nyúlásmérő bélyeges súlymérő cella tulajdonságai
- Kaptármérleg mechanikai felépítése, elektronikus bekötése és mérő program
- GSM modul használata, ami bejövő telefonhívásra SMS-ben elküldi az mért adatokat.
- GSM modul programozása, teljes forráskód

A cikk írója: Római István
Szakmai bemutatkozás: Eredetileg rádió-TV műszerészként végeztem, az iskola után a MOL elődjénél helyezkedtem el műszerészként. Itt végeztem el az „Irányítástechnikai műszerész” szakmunkás képzőt. Ez a szakma négy nagy területet ölelt fel, mechanika, pneumatika, elektronika, hidraulika. Amikor én kezdtem a műszerek 80%-a pneumatikus volt (1976). Kilenc évvel később egy földgáz CO2 mentesítő üzemben megismerkedtem egy számítógépes irányító rendszerrel. Ezt japánok szállították, akkoriban nagyon modernnek számított, egy része még COCOM listás. A munkám során a számítógépet kellet figyelni, néha beavatkozni. Éjszakás műszakba bevittem a Commodore 64 gépemet, vettem rengeteg Data Becker könyvet és ismerkedtem a programozással.
Elérhetőség: romaipista@gmail.com
A kaptármérleg lehetőséget ad a méhésznek arra, hogy távolról ellenőrizze az összegyűjtött méz mennyiségét. A súlyból tudja, hogy mikor kell új fiókkal bővíteni a kaptárt, mikor kell elvenni a mézet, és ha már nagyon kicsi a gyarapodás akkor haza kell hozni a méhcsaládot a telephelyre. Ezzel az egyszerű szerkezettel időt és utazási költséget lehet megtakarítani.
Elég egy kaptár alá tenni mérleget! A jó méhész minden családról tudja, hogy milyen erős és egy átlagos alá teszi, de nem a sor elejére vagy végére hanem beljebb. Megmagyarázták, hogy miért: a méhek is korruptak. Minden kaptár bejáratánál vannak őrök, akik idegent nem engednek be. De. Ha jön haza a nektárral és virágporral megrakott idegen fáradt méhecske és már az első kaptárba be akar menni megesik rajta a szívük és beengedik. Ezért a két szélső kaptár „becsapós”. A többi nagyjából hasonló.
A kaptármérleg a a teljes kaptár súlyát méri. Ezek a cellák max. 50 kg-ig mérnek, így a teljes kaptársúly megállapításához 4 cellát alkalmaztam. Így összesen max 200 kg-ot lehet megmérni a rendszerrel. A cellák mechanikusan max 50%-al túlterhelhetők károsodás nélkül. Elektronikusan 25%-ig túlterhelhetők, gondolom ez azt jelenti, hogy addig lineáris.
A cella mechanikai felépítése:

Belső elektronikus felépítése:

A négy cellát a következő képen kell összekötni:

A mérleg vázát-házát a méhész csinálta 20×20-as szögvas keret, az alsó részben 8mm-es rétegelt lemez. A felső rész egy ládika aminek a sarkában van a keret, ennek a sarkaiban van a 4 mérőcella. Az elektronika egy 15x15x5 cm-es villanyszerelő dobozba került.

A cellák alá kell egy alátét, aminek a cella érzékelő alatti része ki van vágva, hogy ne feküdjön fel, sőt a két szegecs még az alsó síkon túl ér kb. 0,6mm-t. Ez az alátét látszik a cellák alatt kékes-szürke színnel. Az alátét 2mm vastag linóleum, elég kemény, hogy a súlyt elviselje és egy éles hegyes késsel könnyen kivágható.
Valahol azt olvastam, hogy a cellák vezetékét lehetőleg ne toldjuk mert zavart szedhet össze. Igyekeztem betartani, és minimális toldást használni!
A fenti fotón a mérleg felső lapja (tányérja) látható. Az alsó részre támaszkodik, ami négy ponton támasztja meg a négy mérőcellát:

A mérőcellák ellenállás változása és ebből adódóan a cellák kimenetén a feszültség változás is igen kicsinek adódik. Ezt az igen kicsi feszültség jelet fel kell erősíteni és egy megfelelő felbontású AD átalakítóval mérni. Erre a feladatra készült a HX711 erősítő és AD konverter IC. Kifejezetten a Wheatstone hidas mérésekre fejlesztették ki. Ennek az erősítése 64 vagy 128 lehet. Természetesen készen található az Arduino-hoz programkönyvtár. Ez a HX711 könyvtár alapból 128-as erősítéssel dolgozik. Az IC kapható panelre szerelt változatban, ezzel dolgoztam én is!
A kipróbáláshoz a 4 cellát fel kell szerelni egy sima deszkalapra, az ábra szerint összekötni és bekötni a HX711 panelhoz. Az S+ S- vezetékek az A+ A- pontokhoz kötendők.

Ez után következik a HX711 panel adat és táp kivezetéseinek bekötése az Arduino panelre. Az alábbi kapcsolási rajz már a teljes berendezést mutatja, tartalmazza a GSM modult is. Ebből jelenleg csak a HX711 bekötés a lényeges, a többi áromköri részről később esek szó.

A HX711 panel SCK pontja az NANO D5(CLK)-hoz, a DT a NANO D6(DOUT) pontjához kötendő. Nem kell külön táp, a NANO +5V és GND pontjához kell a tápvezetékeket kötni az USB port elbírja. A „mérleget” sima felületre kell állítani, hogy ne billegjen. Az Arduino-ra rá kell tölteni az alábbi programot:
/*****************************************************************************************************
* A deszkára szerelt 4 cella beállitása *
* Először súly nélkül kell a programot elindítani, ekkor megállapítja a zéró faktort, *
* a "0"-hoz tartozó értéket és beáll 0-ra. *
* Ezután a mérlegre kell helyezni egy ismert súlyt, és a kalibrációs faktort addig kell korrigálni, *
* amíg az ismert súlyt nem mutatja (minél nagyobb a súly, annál pontosabb lesz a mérés) *
******************************************************************************************************/
#include "HX711.h"
#define DOUT 6 // adatvezeték
#define CLK 5 // órajel
HX711 scale(DOUT, CLK);
float calibration_factor = 23180; // ez egy találomra beírt szám, maj ezt kell korrigáni
// a mérlegre helyezett ismert súlyhoz
void setup() {
Serial.begin(9600);
Serial.println("HX711 kalibracios program");
Serial.println("Tavolits el minden súlyt a mérlegről");
Serial.println("A meres elkezdése után helyezz a mérlegre egy ismert sulyt");
Serial.println("A kalibrácios faktor novelesehez nyomd meg a +-t vagy az a-t");
Serial.println("A kalibracios faktor csokkentesehez nyomd meg a - -t vagy a z-t");
scale.set_scale();
scale.tare(); // "Tárázás", a mérleg 0-a állítása
long zero_factor = scale.read_average(10); // a zéró faktorhoz tartozó érték beolvasás (10 olvasás átlaga)
Serial.print("Zero factor: "); // a zéró faktor kiírása (ez egy állandó)
Serial.println(zero_factor);
}
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor
Serial.print("Meres: ");
Serial.print(scale.get_units(10), 1); // 10 mérés átlagának beolvasása 1 tizedes értékkel
Serial.print(" kg"); // kg-hoz van a kalibrációs faktor megállapítva
Serial.print(" Kalibrácios faktor: "); // a kalibrációs faktor kiírása
Serial.print(calibration_factor);
Serial.println();
if (Serial.available())
{
char temp = Serial.read(); // a kalibrációs faktor korrigálása
if (temp == '+' || temp == 'a')
calibration_factor += 100;
else if (temp == '-' || temp == 'z')
calibration_factor -= 100;
}
delay(3000);
}Bekapcsolás és a soros monitor megnyitása után kiírja a Zéró faktort, ez tulajdonképpen a 0 értékhez tartozó ADC érték. Ezután kell egy ismert súlyt a mérlegre tenni és majd mutat valamit. Ezt kell a képernyőn megjelenő felirat szerint korrigálni amíg az ismert súlyt nem mutatja. Minél nagyobb ismert súlyt teszünk a mérlegre, annál pontosabb lesz a kalibrációs állandó beállítása.
Ha nagyon nagy az eltérés a valós és a mutatott súly között érdemes a programban átírni a kalibrációs faktort egy közelítőbb értékre, mert százasával lépkedve nagyon sokáig tart. A jelenlegi kialakításhoz 23180 a megfelelő érték. Ha megkaptuk a megfelelő kalibrációs értéket, akkor azt be kell majd írni a végleges kezelő program forrásába.
A véglegesre szerelt mérleget érdemes megterhelni nagyobb súllyal (én 85-tel tudtam) és újra kalibrálni, mert valamennyit változnak a cellák. Tapasztalatom szerint elég pontos és érzékeny, 10dkg-ot már érzékel oda-vissza. Kaptármérlegnek a barátom szerint tökéletes.
Következhet a GSM modul! Csak annyit tud, hogy a hívást érzékeli, egy csengetés után a hívást elutasítja, elvégzi a súlymérést, az akku feszültségének a mérését és az eredményeket elküldi SMS-ben az előre rögzített számra. Nem vizsgálja, hogy honnan jött a hívás, minden hívásra a rögzített számra küldi a választ.
Ha a PWX csapot a tápfesz bekapcsolása után 1 s-ra 0-ra állítjuk akkor a modul bekapcsol és megkeresi a hálózatot, csak ekkor az a probléma állhat elő, hogy ha valamiért elveszíti a hálózatot akkor nem csatlakozik újra. Hálózatvesztés pedig előfordulhat mert a puszta közepén a repceföldön meg az akácerdőben nem mindig ideális a térerő. Ráadásul a mérleg a kaptár alatt van 10-20 cm-re a földtől ezért sok helyen vezetékkel hosszabbított antennát kell használni. Az 5 cm-es antenna általában nem elég, rendeltem egy 30 cm-es antennát 3 m kábellel, azt mondja a barátom, hogy ha a kaptár tetejére teszi elég szokott lenni, a 3 m magasságot még nem kellett kihasználni. Ha az említett PWX csap fixen GND-re van kötve és elveszíti a hálózatot, akkor állandóan keresi és ha megtalálja akkor csatlakozik ismét.
Ennek a SIM800C-vel szerelt modulnak 2 tápcsatlakozása van. Egy 5V és egy VBAT ami egy lítium akkuhoz van méretezve, 4V az ajánlott, 4,2V a max. feszültség, a határérték 4,4V. Én az 5V-ról próbálkoztam üzemelni, de hol csatlakozott a hálózatra hol nem, de a legtöbbször nem. A modul valójában a 4V-ról üzemel, az 5V-ról 2 db sorba kapcsolt diódával ejti a feszültséget. A egyik 0,6 a másik 0,2 V-t. De valamiért ez a két dióda a hálózat keresése-csatlakozás során fellépő áramfelvétel során akkorát ejtett a feszültségen (a POWER LED „hunyorgásán lehetett észrevenni ), hogy az alacsony tápfesz védelem aktiválódott és kikapcsolt. Próbáltam a VBAT-ot kondizni, ezért van az 1000uF és a 47uF tantál, de nem sokat javított. Végül az 5V-os csapot és a VBAT-ot összekötöttem egy BY133-al (ez nem beazonosítható a rajzon), hogy az ajánlott 4V legyen ezért a tápegységet 4,7V-ra állítottam. Ez a feszültség a NANO-nak nem okoz problémát GSM modul meg azóta tökéletesen működik. A tápegység egy olcsó kapcsolóüzemű tápegység, aminek a feszültsége beállítható, a hatásfoka is elég jó. Ez fontos szempont, mert az egész berendezés akkumulátoros táplálású, és minél kisebb fogyasztást kell elérni.
A végleges kezelőprogram:
/****************************************************************************************
* Kaptármérleg program. Bejövő telefonhívásra mérés történik, és a program a mért súlyt *
* és az akkumulátor feszültségét elküldi SMS-ben egy előre beállított telefonszámra *
* A Serial.print sorok a futáshoz nem szükségesek csak teszteléshez. *
*****************************************************************************************/
#include <SoftwareSerial.h>
#include "HX711.h"
SoftwareSerial mySerial(10, 11); // A GSM modul hozzárendelése a D10, D11 porthoz
#define DOUT 6 // a HX711 adatkimenet hozzárendelése a D6-hoz
#define CLK 5 // a HX711 orajel hozzárendelése a D5-hoz
HX711 scale(DOUT, CLK);
float calibration_factor = 23180; // Egy ismert súlyhoz beallitott állando
float suly;
float volt;
void setup() {
mySerial.begin(9600); // A GSM modul adatátviteli sebességének beallitása
Serial.begin(9600); // soros port adatatviteli sebességének beallitása
Serial.println(" Telefon modul bekapcsolasa!");
delay(20000); // Vár 20 s-ot a modul bekapcsolására, hálózatra csatlakozására
pinMode(2, INPUT_PULLUP); // a D2 bemenetre állítása a hívás érzékelésre
Serial.println("Fogadasre kesz!");
scale.set_scale();
scale.tare(); // A mérleg nullázása
long zero_factor = scale.read_average(10); // Zéro faktor, a 0 sulyhoz tartozo ADC érték beolvasása,
//10 beolvasás átlaga
Serial.print("Zero factor: "); // A zéro faktor kiirása
Serial.println(zero_factor);
Meres();
SendMessage();
scale.power_down(); // ADC kikapcsolása
delay(3000);
}
void loop() {
if (digitalRead(2) == LOW) // Ha a RING 0-ra vált, hivas érkezett
{
delay(1000); // várakozik 1s-t
if (digitalRead(2) == LOW) // Ha még mindig 0 (nem egy zavar impulzus), kezelia hivást,
//inditja a mérést és az SMS-t
{
delay(1000);
Serial.println("Hivas erkezett!");
delay(3000);
HangupCall();
delay(1000);
Meres();
delay(10000);
Serial.print("MERES: ");
Serial.print(suly, 1);
Serial.println(" kg");
Serial.print(" Akku feszultsege V ");
Serial.println(volt);
Serial.println("Uzenet elkuldve!");
SendMessage();
}
}
}
void SendMessage() // Üzenet küldés
{
mySerial.println("AT+CMGF=1"); // A GSM modul szöveg (SMS) módba állítása
delay(1000); // Delay of 1000 milli seconds or 1 second
mySerial.println("AT+CMGS=\"+36XXxxxxxxx\"\r"); // a szám amire küldi az SMS-t
delay(1000);
mySerial.println(" A kaptar sulya: kg"); // az SMS szövege
mySerial.println(suly, 1);
mySerial.println(" Akku feszultsege: V");
mySerial.println(volt);
delay(100);
mySerial.println((char)26); // A 26-os karakterkód küldése (az SMS befejezése)
delay(1000);
}
void HangupCall() // Hivás bontás
{
mySerial.println("ATH");
Serial.println("Hivas elutasitva");
delay(1000);
}
void Meres()
{
scale.set_scale(calibration_factor); // A méréshez a kalibrálási faktor beallitása
scale.power_up(); // ADC bekapcsolasa
delay(100);
Serial.println("MERES: ");
suly = (scale.get_units(10)); // A súly beolvasása, 10 mérés átlaga
int ube = analogRead(A6); // akkufesz. beolvasása
volt = map(ube, 165, 820, 90, 150) / 10.0 + 0.6; // feszültség kiszámítása
Serial.print("Suly: ");
Serial.print(suly, 1);
Serial.println(" kg");
Serial.print(" Feszultseg: ");
Serial.print(volt);
Serial.println(" V");
scale.power_down(); // ADC kikapcsolása
}A „doboz” oldalán a „kezelőpanel” egy tápkapcsolót, egy tápdugó aljzatot és egy antenna csatlakozó aljzatot tartalmaz, valamint egy lyukat az USB kábel bevezetésére a beállításhoz.

Az elektronika beszereléséről képek mindent elmondanak.

A mérleg akkus táplálású, egy 12V-os 20Ah-s táplálja. Az elektronika fogyasztása 0,5Ah/nap, tudomásom szerint terepen még nem kellett tölteni, mert ha kitelepül a méhekkel valahova az két hétnél nem tart tovább, annyit meg kibírt. Mivel a méhész minden este lekérdezi a súlyt és a súly mellett az akku feszültségét is elküldi, ellenőrizhető az akkumulátor feszültsége, ha merül, akkor cserélni kell, vagy tölteni.