Sisällysluettelo:

DIY -kirjauslämpömittari 2 anturilla: 3 vaihetta (kuvilla)
DIY -kirjauslämpömittari 2 anturilla: 3 vaihetta (kuvilla)

Video: DIY -kirjauslämpömittari 2 anturilla: 3 vaihetta (kuvilla)

Video: DIY -kirjauslämpömittari 2 anturilla: 3 vaihetta (kuvilla)
Video: Ошибки в сантехнике. Вводной узел в квартиру. 2024, Marraskuu
Anonim
DIY -kirjauslämpömittari 2 anturilla
DIY -kirjauslämpömittari 2 anturilla
DIY -kirjauslämpömittari 2 anturilla
DIY -kirjauslämpömittari 2 anturilla

Tämä projekti on parannus edelliseen projektiini "DIY Logging Thermometer". Se kirjaa lämpötilan mittaukset micro SD -kortille.

Laitteiston muutokset

Lisäsin DS18B20 -lämpötila -anturin reaaliaikaiseen kellomoduuliin, jossa tämän laitteen piirilevyllä on varaus; ja lisäsi sopivan johdon RTC: n "DS" -tapista Arduinon D2: een.

Ohjelmiston muutokset

Sitten lisäsin ja muokkasin ohjelmistoa. Tärkeimmät muutokset ovat:

Nestekidenäytössä näkyy kaksi lämpötilaa "In" ja "Out".

SD -kortille tallennetuissa lokitiedostoissa on kaksi lämpötilakenttää, "lämpötila sisään" ja "lämpötila ulos".

Koska SD -kortilla oli pidempi tallennus, EEPROMin työpuskurit olivat suurempia ja tämän seurauksena minulla oli muistiongelmia. Tein useita muutoksia, joiden tarkoituksena oli vähentää dynaamisen muistin käyttöä, mukaan lukien merkkijonojen käyttäminen kaikille merkkijonoille String -objektin sijasta.

Ohjelmiston osassa, joka saa lämpötilat, on suuria muutoksia, joista suurin osa liittyy sen tunnistamiseen, mikä anturi on "sisään" ja mikä "ulos". Tämä tunnistus on pääosin automaattinen. Jos anturit jostain syystä vaihdetaan, se voidaan korjata irrottamalla "ulos" -anturi ja kytkemällä se sitten takaisin. Itse en ole kokenut tätä käänteistä. Ohjelmoijan tai käyttäjän ei tarvitse kirjoittaa anturien osoitteita, vaan ohjelmisto havaitsee lämpötila -anturin osoitteet itse.

Tehtyjen testien mukaan lämpötila -anturien tunnistaminen ja vastaus SD -kortin poistamiseen ja vaihtamiseen toimivat edelleen saumattomasti.

Vaihe 1: Ohjelmistokehitys

Tämä vaihe antaa sinulle täydellisen ohjelmiston valmiille projektille. Kokosin sen Arduino IDE 1.6.12: n avulla. Se käyttää 21 400 tavua ohjelmamuistia (69%) ja 1 278 tavua dynaamista muistia (62%).

Olen kommentoinut koodiin toivossa, joka tekee selväksi, mitä tapahtuu.

Vaihe 2: Työskentely kahden lämpötila -anturin kanssa - tiedot

Tämä ohjelmisto käyttää OneWire -kirjastoa. Se ei käytä "DallasTemperature" tai vastaavia kirjastoja. Sen sijaan käskyt ja tiedot lämpötila -antureille tehdään luonnoksella, ja ne voidaan nähdä ja ymmärtää melko helposti. Löysin hyödyllisen luettelon OneWire -kirjaston komennoista osoitteesta

www.pjrc.com/teensy/td_libs_OneWire.html

Kun lämpötila -anturia on kaksi (tai enemmän), on tarpeen tunnistaa, kumpi on kumpi.

Kutsuin kahta anturiani "sisään" ja "ulos", mikä on tyypillistä kaupallisille yksiköille, joissa on näyttömoduulissa oleva anturi, joka on normaalisti "sisällä", ja toista anturia kaapelissa, jotta se voidaan asettaa toiselle puolelle ulkoseinän ja olla siten "ulkopuolella".

Tavallinen tapa tunnistaa eri koettimet on löytää laiteosoitteet ja laittaa ne ohjelmistoon yhdessä tunnistetarran kanssa. Kaikki muut näkemäni projektit käyttävät tätä lähestymistapaa riippumatta siitä, käyttävätkö he DallasTemperature -kirjastoa vai eivät.

Tarkoitukseni oli, että ohjelmisto tunnistaa anturit automaattisesti ja kohdistaa ne oikein "sisään" ja "ulos". Tämä on helppo tehdä asettamalla ne erillisiin Arduino -nastoihin. Tässä projektissa A0 - A3 ja A6 ja A7 ovat kaikki käyttämättömiä, joten yhtä näistä olisi voitu käyttää tässä tapauksessa. Onnistuin kuitenkin saamaan automaattisen tunnistuksen toimimaan molempien OneWire -väylän antureiden kanssa.

Se toimii näin.

OneWire -kirjastossa on komento "OneWireObject.search (osoite)", jossa "osoite" on 8 tavun taulukko ja "OneWireObject" on aiemmin luotun OneWire -objektin ilmentymän nimi. Sillä voi olla mikä tahansa haluamasi nimi. Omani on nimeltään "ds". Kun annat tämän "haku" -komennon, OneWire -kirjasto signaloi yhden johdinväylän. Jos se löytää reagoivan anturin, se palauttaa "TRUE" boolen arvon ja täyttää "address" -matriisin anturin 8 tavun yksilöllisellä tunnuksella. Tämä tunniste sisältää perhekoodin (alussa) ja tarkistussumman (lopussa). Välissä on 6 tavua, jotka yksilöivät tunnistimen yksilöllisesti perheessään.

Aina kun tämä komento annetaan, saadaan yksi tulos (osoite ja paluu TOSI), joka käy läpi kaikki OneWire -väylän laitteet. Kun jokainen laite on vastannut, seuraavan kerran "haku" lähetetään, paluu on "FALSE", mikä osoittaa, että jokainen väylän laite on jo vastannut. Jos "haku" annetaan uudelleen, ensimmäinen laite vastaa uudelleen - ja niin edelleen loputtomiin. Laitteet vastaavat aina samassa järjestyksessä. Vastausten järjestys perustuu OneWire -väylän laitteiden tunnisteisiin. Se näyttää olevan binäärihaku, joka alkaa laitetunnisteiden vähiten merkitsevistä biteistä. Tunnisteiden löytämiseen käytetty protokolla on melko monimutkainen, ja se on kuvattu asiakirjan "Book of iButton Standards" sivuilla 51-54, joka on pdf -dokumentti osoitteessa https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Testasin tätä hakuprosessia 1-11 anturilla yhdellä väylällä ja huomasin, että tietyn laiteryhmän vastausjärjestys oli aina sama, mutta kun lisäsin uuden laitteen väylän päähän, ei ollut mitään keinoa Voisin ennakoida, missä hakujärjestyksessä se näkyy. Esimerkiksi 11. anturi, jonka lisäsin, tuli paikkaan nro 5; ja ensimmäinen anturi, jonka laitoin väylään, oli aina viimeinen hakujärjestyksessä.

Tässä projektissa, jossa on kaksi anturia, yksi niistä on juotettu paikalleen RTC -moduuliin; toinen kytketään pistorasiaan käyttämällä urosliitintä taululla ja naarasliitintä kaapelissa. Se voidaan helposti irrottaa.

Kun kaapelin anturi ("out" -anturi) irrotetaan, "search" -komento tuottaa vuorotellen "TRUE" ja "FALSE".

Kun kaapelin anturi on kiinnitetty, "search" -komento tuottaa 3-vaiheisen syklin, jossa on kaksi "TRUE" ja yksi "FALSE".

Toimenpiteeni on antaa 1, 2 tai 3 "haku" -komentoa, kunnes FALSE -tulos palautetaan. Sitten annan vielä kaksi "haku" -komentoa. Jos toinen epäonnistuu (eli EPÄTOSI), tiedän, että väylässä on vain yksi anturi ja että se on "sisään" -anturi. Laitteen identiteetti tallennetaan ja allokoidaan "in" -anturille.

Myöhemmin, jos sekä ensimmäinen että toinen paluu ovat TOSI, tiedän, että väylässä on kaksi anturia. Tarkistan, kumman niistä identiteetti on "in" -anturi, ja varaan toisen "out" -anturiksi.

Toinen pieni seikka on, että kahden anturin tulosten kerääminen tapahtuu lähettämällä "aloita muunnos" "skip ROM" -komennolla. Meillä on mahdollisuus lähettää komentoja yhdelle laitteelle (käyttämällä sen yksilöllistä tunnusta) tai kaikille väylän laitteille (ohita ROM). Koodi näyttää tältä:

ds.reset (); //

// lähetä "ohita ROM" -komento (joten seuraava komento toimii molemmissa antureissa) ds.write (0xCC); // Ohita ROM -komento ds.write (0x44, 0); // aloita muunnos molemmissa antureissa Temperature_state = wait_convert; // siirry viivetilaan

Kun vaadittu viiveaika on kulunut, lämpötilat vastaanotetaan kustakin anturista erikseen. Tässä on toisen anturin (eli OUT -anturin) koodi.

jos (lippu2) {

läsnä = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Lue "out" -tunnistetiedoston leikepöytä [0] = ds.read (); data [1] = ds.read (); lämpötila_lämpötila = (data [1] << 8) + data [0]; lämpötila_lämpötila = (6 * lämpötila_lämpötila) + lämpötila_lämpötila / 4; // kerrotaan 6,25} muu {// ei lippua2 - eli ulostulon anturia ei ole kytketty lämpötila_out = 30000; // korjaa 300,00 C, jos lämpötila -anturi ei toimi} // jos loppu (lippu2)

Suunnittelin suurimman osan tästä ohjelmistosta erillisenä luonnoksena, jossa oli juuri lämpötila-anturit, ilman LCD-, RTC- ja SD-korttituen komplikaatioita. Tämä kehitysluonnos on alla olevassa tiedostossa.

Vaihe 3: Alustavat tulokset

Alustavat tulokset
Alustavat tulokset

Tämä kaavio on yhdistelmä kahdesta ensimmäisestä lukupäivästä.

Suositeltava: