Projekt Arduino: rozbudowana waga pasieczna z połączeniem GSM #2

in #pl-artykuly6 years ago

gotowe_avatar.gif

Witam

Zapraszam na kontynuację postu o projekcie wagi pasiecznej. Mam nadzieję, że post będzie w miarę logicznie napisany, ze względu na długi odstęp czasu i ilość pracy nie mogłem opisać wszystkiego. Skupiłem się na najważniejszych kwestiach oraz problemach, które napotkałem podczas realizacji projektu. Jeśli ktoś nie czytał pierwszej części, to serdecznie zapraszam TUTAJ

Moduł GSM (neoway m590)

Pierwsze prace postanowiłem zacząć od polutowania i uruchomienia modułu GSM. Jeśli chodzi o lutowanie (było to moje pierwsze lutowanie komponentów SMD) wszystko poszło gładko. Może nie jest perfekcyjnie, ale działa ; )

20170929_130113.jpg

kleksy lutu na module to nie moja sprawka, takie dostałem (są to podzespoły pochodzące z demontażu)

Trudniejszą sprawą okazało się uruchomienie. Moduł jest zasilany przez przetwornice, ustawioną na napięcie 3.9V które według specyfikacji jest najlepsze dla neoway. Dioda prostownicza została usunięta a miejsce po niej połączone zworką.

20180122_161010.jpg

miejsce po diodzie prostowniczej, złączone zworką

Po podłączeniu do PC-ta, w terminalu modem wyrzucał co kilka sekund jedynie "MODEM:STARTUP". Co oznacza, że coś jest nie tak i moduł się restartuje. Zgodnie z zaleceniami z różnych forów internetowych, wymieniłem kondensator z zestawu na 1000uF oraz rezystor przy karcie SIM na 10K.

20180122_160943.jpg

kondensator 1000uF

20180122_161037.jpg

miejsce wymiany rezystora na 10K

Wszystko wymienione, podłączam moduł, odpalam terminal iiii..... MODEM:STARTUP.. MODEM:STARTUP.. Cały dzień szukania winowajcy, oglądania czy wszystko, aby dobrze jest zlutowane.. pustka. Winnemu za to wszystko okazało się coś najprostszego. Do połączenia przetwornicy z modułem, używałem płytki prototypowej. Do zestawu dostałem do niej kabelki, które okazały się bardzo niskiej jakości, raz stykały raz nie, powodując spadki napięcia i restart modułu. Na zdjęciu poniżej można porównać chińskie niteczki z kablami nieco lepszej jakości.

kable.jpg

po lewej "chiński" kabelek

Po wymianie kabli wszystko ruszyło. Modem wyrzuca w terminalu "MODEM:STARTUP" oraz "PBREADY". Po wpisaniu komendy "AT" odpowiada "OK". Wszystko stabilnie działa.

Waga

Przyszedł czas na wagę. Zacząłem oczywiście od wypatroszenia. Kabelki łączące tensometry są opisane, więc nie miałem większego problemu z połączeniem do wzmacniacza (hx711).

20180122_170554.jpg

Płytka znajdująca się w wadze łazienkowej, z podpisanymi połączeniami

W następnej kolejności zacząłem kalibrację wagi (a właściwie odczyt współczynników kalibracji) za pomocą sketcha dostępnego na Github (link do użytego sketcha)

20170903_171321.jpg

Moje stanowisko kalibracji. Przepraszam za bałagan ; D

Po zapisanie wsp. kalibracji. Przeszedłem do programu. Pomijam cały proces programowania, kod aktualnie ma ponad 200 linii. Opiszę tylko najważniejsze fragmenty. Musiałem rozwiązać problem braku możliwości zerowania wagi przed pomiarami. Ze względu na to, że ul będzie stale stał na wadze, nie ma takiej możliwości. Ustawiłem wsp. kalibracji oraz odczyt zerowy jako zmienne.


#define calibration_factor 19770.0 // wsp.kalibracji wagi

#define odczyt_zerowy 8097425 // odczyt zerowy wagi

#define DOUT 3 //PIN DAT wagi

#define CLK 2 //PIN CLK wagi

Następnie użyłem zmiennych w miejscu programowania wagi.

       Serial.println("Programowanie wagi...");
       scale.set_scale(calibration_factor);  // kalibracja
       scale.set_offset(odczyt_zerowy); // odczyt zerowy/tarowanie
       Serial.println("Waga zaprogramowana");

Takie rozwiązanie ma oczywiście spory minus. Bez względu na zmianę rezystancji spowodowaną, chociażby warunkami pogodowymi, odczyt zerowy będzie ten sam. Spowoduje to prawdopodobnie duże "pływanie" pomiaru. Podczas testów zobaczę jak duże. Myślę nad zastosowaniem pomiaru referencyjnego za pomocą dodatkowych tensometrów.

Kod i działanie projektu !

Przyszedł czas na programowanie i ostateczny test całego projektu. Do programowani użyłem następujących bibliotek:

#include <DallasTemperature.h>
#include "HX711.h"
#include <OneWire.h>
#include <AltSoftSerial.h>

Poniżej fragment kodu gdzie definiuje co i jak ma być wysłane w sms po komendzie "info"

          if(msg_id!=0)
            
            GSM.print("AT+CMGD=");  
            GSM.print(msg_id);  
            GSM.print("\r"); 
            Serial.println("wiadomosc usunieta");
            msg_id=0;  
          }else if(send_resp){    
            send_resp=0;
            GSM.print("AT+CMGS=\"+48XXXXXXXX\"\r");    
            delay(550);
            sensors.requestTemperatures();
            Serial.println("odczytana temperatura:");
            Serial.println(sensors.getTempCByIndex(0));
            delay(300);
            GSM.print("Temp"); //tu wpisujemy treść wiadomości (do 160 znaków)   
            GSM.print(":");
            temperatura = sensors.getTempCByIndex(0);
            GSM.print(temperatura);
            GSM.print("*C");
            delay(200);
            GSM.print(",Waga:");
            GSM.print(scale.get_units(), 1);
            GSM.print("kg");
            GSM.print((char)26);
            Serial.println("Info wyslane");  
            wait_for_sending=1;          
          }  
        }  

OK!. Czas na ostateczny test. Wszystko podłączone. Wysyłam SMS o treści "info" iiii... DZIAŁA !

sms.jpg

Sukces. Dalszy mój plan, to test całego projektu + załadowanie do wodoodpornej puszki. Dodatkowo zastosuje moduł RTC (zegar czasu rzeczywistego) za pomocą którego będę usypiał i wybudzał modem oraz Arduino.

moduł_RTC.jpg

Muszę to wykonać, aby oszczędzić prąd, ponieważ według obliczeń, projekt wytrzyma bez tego, co najwyżej 3 dni bez ładowania.. Mam nadzieję, że post choć trochę was zaciekawił. Jeśli ktoś ma jakieś pytania, proszę śmiało pisać w komentarzu ; )

Pozdrawiam

@apismellifera

Sort:  

Jestem pod wielkim wrażeniem :)
Sama wychodzę z założenia, że chcieć to móc.

Dawno nic nie pisałeś o wadze. Powrót do projektu?

Musiałem odłożyć na czas pisania pracy dyplomowej. Ale dużo udało mi się zrobić, głowny kod już zrobiłem. Teraz tylko sprawa tego zasilania + testy ; )

Podziwiam, naprawdę jesteś pozytywnie zaangażowany.

No coś pięknego Jesteś "GOŚĆ" przez wielkie G również podziwiam Miło Ciebie poznać :) Może wykrywacze metali też Cię interesują ?

Dzięki za miłe słowa. Co do wykrywaczy, pewnie, dodatkowo łowie czasami na magnes ; ) Ale jak dotychczas nie udało mi się nic sensownego znaleźć, sam złom

Congratulations on the whole project !!
could you upload somewhere the code? to try and other beekeepers;
greetings from GREECE

Hi! Can you help me with a project like this, please?

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.032
BTC 62441.36
ETH 2940.53
USDT 1.00
SBD 3.59