• Localization

Bevielis temperatūros jutiklis (DS18B20) ir temperatūros stebėjimas “online”

IMGP2343

 Atėjo visų “lauktas” šildymo sezonas. Gyvenu nuosavame name, šildymo būdas – dujos. Šildymo katilas turi savaitinį laikmatį. Galima šildymo ciklą užprogramuoti kiekvienai dienai, arba iškarto savaitei. Ankščiau katilas buvo užprogramuotas savaitei t.y ta pati programa kiekvienai dienai. Šildyti pradėdavo 6:30 ir baigdavo 22:00, kambario temperatūra dieną 20C, naktį 16C (naktis nuo 22:00 iki 6:30).  Yra galimybė prie katilo pajungti temperatūros jutiklį, bet jo kaip ir nereikia, nes katile galima nustatyti patalpų temperatūrą kuri gana tiksliai palaikoma visame name.  Taip pat yra atskiras šildymo kontūras ruošti karštam vandeniui, kurį taip pat galima užprogramuoti savaitei.

Kad optimaliai parinkti šildymo režimą ir taip sutaupyti kažkiek $, reikia surinkti duomenis iš tam tikrų vietų. Reikia stebėti išeinančio iš katilo į šildymo sistemą vandens temperatūrą, grįžtančio vandens temperatūrą. Tam tikros patalpos temperatūrą, boilerio temperatūrą, lauko temperatūrą.  Pasirinkau 6 taškus, kodėl 6 ? Todėl, kad tiek temperatūros jutiklių tūrėjau. Visa sistema (Arduino ir GSM900 plokštė) bus sumontuota katilinėje prie dujinio katilo, prie kurio išeinančių ir įeinančių vamzdžių pridėjau jutiklius, taip pat vieną įkišau į boilerį dar kitą išvedžiau į lauką per sienoje jau išgręžtą skylę.

Viskas būtų gerai, bet kaip perduoti temperatūros rodmenis iš svetainės ? Negręši gi skylės per sieną į svetainę. Beliko ieškoti schemų su radijo bangomis. Tam panaudojau 434MHz siųstuvo ir imtuvo modulius.

RF modulis

Siųstuvą dariau su atmega328p mikroschema užprogramuota vidiniam 8MHz dažniui. Šiaip atmega328p per daug prabangi mikroschema tokiam siųstuvui. Internete galima rasti schemų su Attiny85. Ateityje galbūt perdarysiu į Attiny arba atmega8. Keletas  siųstuvo nuotraukų.

pcb_virsus

pcb_apac

bendras vaizdas

Siųstuvas maitinamas iš 3-jų nuosekliai sujungtų AA tipo baterijų, kurių bendra įtampa apie 4,8V. Siųstuvas siunčia signalą kas 5 minutes, o po to pereina į būdėjimo režimą. Siuntimo metu apie 1s vartojama iki 10mA srovė, būdėjimo režime 3mA (kažkodėl gana nemažai). Taip pat išmatuoja baterijos įtampą ir ją išsiunčia. Matavimai su reguliuojamu maitblokiu parodė, kad temperatūra matuojama įtampai nukritus iki 2,4V. Kad siunčiami duomenys rodo led diodas, bet taupant baterijas jį galima išjungti.

Visi surinkti duomenys atvaizduojami internete realiu laiku. Čia rodoma baterijos įtampa, pasirinkite laiką.

Laikinai šiuo metu pagrindine plokšte pasirinkau  Arduino Duemilanove ir duomenų perdavimui į tinklapį  panaudojau seną projektą su GSM900 moduliu.

Serveryje instaliuota emoncms. Duomenis realiu laiku galima peržiūrėti čia.

Skelbiu tik siųstuvo pcb ir sch eagle bylas, jei kam reiks galėsiu ir hex bylą atsiųsti ar jei bus pageidavimas įdėsiu ją čia. Arduino imtuvo programos kodą, dėl emoncms sistemos duomenų saugumo reiktų gana daug apkarpyti, po apkarpymo gana sunkus bus suprasti kas ir kaip. Vėliau jei prisiruošiu padarysiu motininę pcb tada bus ir hex byla.

Informacijos šaltiniai:

http://milesburton.com/Dallas_Temperature_Control_Library

http://mchr3k.github.io/arduino-libs-manchester/

https://github.com/n0m1/Sleep_n0m1

Eagle temperatūros siųstuvas

Tagged , , , , , , , , . Bookmark the permalink.

11 Responses to Bevielis temperatūros jutiklis (DS18B20) ir temperatūros stebėjimas “online”

  1. Tomas says:

    Sveiki, man pasiai kaip ir jums reikejo siusti duomenis is svetaines i katiline. as taip pat naudojau RF433 siustuvus ir imtuvus, taciau niekaip nepavyko ispresti problemos su rysiu, nes signalas nepraeina pro siena. bandziau ivairaus storio laidus, su ilgiais taip pat experimentavau. geriausia ka pavyko isgauti tai gal kokie 7 metrai atviroj erdvej. per siena niekaip nepramusiau. gal galite pasakyti kaip antena darete?

    • admin says:

      paprastą laiduką prilitavau berods 10-15cm iš internetinio kabelio (monolitinis laidas).

  2. Alvydas says:

    Gal pasidalintumėt arduino kodo gabalu, kuris siunčia duomenis į serverį. Naudoju EtherCard biblioteką. Tokia eilutė veikia: ether.browseUrl(PSTR(“/emoncms/api/post.json?apikey=C_I_A_raktas&json=”), “{power:252.4,temperature:15.4}”, website, my_callback);
    Bet kaip vietoj konkrečių skaičių pakišti kintamuosius, pvz iš ds18b20 daviklio?

    • admin says:

      Nelabai supratau klausimo. Aš tokiu pat būdu siunčiu duomenis, kaip ir tamsta.

      • Alvydas says:

        Veikia eilutė …{power:252.4…
        , bet neveikia …{power:dallas(ONE_WIRE_BUS1)… t.y. skaičių pakeitus kintamuoju. Žodžiu užstrigau šitoj vietoj dėl sintaksės nežinojimo…

        • admin says:

          tai tau reikia INT duomenis pakeisti į STRING.

          #include “String.h”
          char buffer[12];
          void loop(){

          String battVcc_0=itoa(batt,buffer,10); // STRING battVcc_0 , o INT batt -tai gauti duomenys iš baterijos ar velniai zino is kokio jutiklio

          mySerial.println(“AT+HTTPPARA=\”URL\”,\”http://giedriausweb.lt/………../post.json?json={batt:”+battVcc_0+”,tempin:”+temp_0+”}&apikey=”APIKEY”\””);
          }

          • Darau, Blė says:

            Dar galima ir sprintf funkcija pasinaudoti, nereikės itoa naudot:

            sprintf(buffer, “{power:%f.2,temperature:%f.2}”, power, temperature);

            %f.2 reiškia, kad į šito modifikatoriaus vietą bus įterptas slankaus kablelio skaičius su dviem skaičiukais po kablelio.

            Tik, aišku, buffer didesnio reikia. Užtai galima naudoti ir su flash’e įrašytomis reikšmėmis, yra AVR funkcija sprintf_P.

          • admin says:

            Dėkui už info, iš manęs nekoks programuotojas, daugiau taisau kitų kodą 🙂

  3. Darius says:

    Sveikas, puikus projektas, tik mane domintu siustuvo hex, bei dalis arduino kodo kur priima siustuvo siunciamus duomenis 🙂 dekui je igalima i email

  4. mindogas says:

    Pagirtina. Gražiai web interfeisas žiūrisi.

Leave a Reply

Your email address will not be published. Required fields are marked *