Kaptármérleg

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.

Mennyire volt hasznos amit olvastál? Értékelés után szövegesen is leírhatod megjegyzéseidet és véleményedet!

Kattints egy csillagra az értékeléshez!

Szövegesen is leírhatod véleményedet! Ha kérdésed van, ne felejtsd el megadni az email címedet!