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.