Sisukord:

DIY logimistermomeeter 2 anduriga: 3 sammu (piltidega)
DIY logimistermomeeter 2 anduriga: 3 sammu (piltidega)

Video: DIY logimistermomeeter 2 anduriga: 3 sammu (piltidega)

Video: DIY logimistermomeeter 2 anduriga: 3 sammu (piltidega)
Video: 20 товаров для автомобиля с Алиэкспресс, автотовары №30 2024, Juuli
Anonim
DIY metsaraie termomeeter 2 anduriga
DIY metsaraie termomeeter 2 anduriga
DIY metsaraie termomeeter 2 anduriga
DIY metsaraie termomeeter 2 anduriga

See projekt on minu eelmise projekti "DIY Logging Thermometer" täiustus. See logib temperatuuri mõõtmised mikro -SD -kaardile.

Riistvara muudatused

Lisasin reaalaja kella moodulile temperatuurianduri DS18B20, kus selle seadme trükkplaadil on olemas; ja lisas sobiva traadi RTC "DS" tihvtist Arduino D2 -le.

Tarkvara muudatused

Seejärel lisasin ja muutsin tarkvara. Peamised muudatused on järgmised:

LCD -ekraanil kuvatakse kaks temperatuuri "Sisse" ja "Väljas".

SD -kaardile salvestatud logifailidel on kaks temperatuurivälja, "temperatuur sisse" ja "temperatuur väljas".

Kuna SD -kaardil oli pikem salvestus, olid EEPROM -i tööpuhvrid suuremad ja selle tagajärjel tekkisid mul mälukonflikti probleemid. Tegin mitmeid muudatusi, mille eesmärk oli vähendada dünaamilise mälu kasutamist, sealhulgas kasutasin Stringi objekti asemel kõikide stringide jaoks märgimassiive.

Tarkvara selles osas, mis saab temperatuure, on suuri muudatusi, millest suur osa on seotud tuvastamisega, milline sond on sisse ja mis välja. See tuvastamine toimub enamasti automaatselt. Kui mingil põhjusel sondid ümber lülitatakse, saab seda parandada, eemaldades sondi "välja" vooluvõrgust ja seejärel uuesti sisse. Ma ei ole seda pöördumist ise kogenud. Programmeerija või kasutaja ei pea andurite aadresse sisestama, tarkvara avastab temperatuuriandurite aadressid ise.

Minu tehtud testide kohaselt töötavad temperatuuriandurite tuvastamine ning reageerimine SD -kaardi eemaldamisele ja asendamisele endiselt sujuvalt.

Samm: tarkvaraarendus

See samm annab teile täieliku tarkvara lõpetatud projekti jaoks. Ma koostasin selle Arduino IDE 1.6.12 abil. See kasutab 21 400 baiti programmimälu (69%) ja 1 278 baiti dünaamilist mälu (62%).

Olen koodi lisanud lootuses, mis teeb toimuva selgeks.

2. samm: töötamine kahe temperatuurianduriga - üksikasjad

See tarkvara kasutab teeki "OneWire". See ei kasuta ühtegi "DallasTemperature" ega sarnast teeki. Selle asemel tehakse temperatuuriandurite käsud ja andmed visandiga ning neid saab üsna hõlpsasti näha ja mõista. Leidsin OneWire'i raamatukogu käskude kasuliku loendi aadressilt

www.pjrc.com/teensy/td_libs_OneWire.html

Kui temperatuuriandureid on kaks (või rohkem), on vaja kindlaks teha, milline neist on.

Ma kutsusin oma kahte andurit sisse ja välja, mis on tüüpiline kaubanduslikele üksustele, mille ekraanimoodulis on andur, mis on tavaliselt „sees”, ja teise anduri kaabli külge, nii et seda saab teisele küljele panna välisseinast ja olla seega "väljas".

Tavaline lähenemisviis erinevate sondide tuvastamiseks on avastada seadme aadressid ja panna need koos identifitseerimissildiga tarkvarasse. Kõik teised projektid, mida olen näinud, kasutavad seda lähenemist, olenemata sellest, kas nad kasutavad DallasTemperature raamatukogu või mitte.

Minu eesmärk oli, et tarkvara tuvastaks andurid automaatselt ja paigutaks need õigesti sisse ja välja. Seda on piisavalt lihtne teha, pannes need eraldi Arduino tihvtidele. Selles projektis on A0 kuni A3 ning A6 ja A7 kõik kasutamata, seega oleks antud juhul võinud kasutada ühte neist. Siiski õnnestus mul automaatne tuvastamine töötada ühes OneWire -siinis olevate anduritega.

See toimib nii.

OneWire'i teegil on käsk "OneWireObject.search (aadress)", kus "aadress" on 8 -baitiline massiiv ja "OneWireObject" on varem loodud OneWire -objekti eksemplari nimi. Sellel võib olla mis tahes nimi, mis teile meeldib. Minu nimi on "ds". Kui väljastate selle käsu "otsi", annab OneWire'i teek signaali ühe juhtmega siinile. Kui see leiab reageeriva anduri, tagastab see tõelise tõeväärtuse ja täidab massiivi „aadress” anduri 8 -baidise kordumatu identifikaatoriga. See identifikaator sisaldab perekoodi (alguses) ja kontrollsummat (lõpus). Vahepeal on 6 baiti, mis identifitseerivad anduri ainulaadselt oma perekonnas.

Iga kord, kui see käsk antakse, saadakse üks tulemus (aadress ja tagastamise tõde), mis läbib kõik OneWire'i siinil olevad seadmed. Kui iga seade on reageerinud ja järgmisel korral "otsing" väljastatakse, on vastuseks "FALSE", mis näitab, et kõik siinil olevad seadmed on juba vastanud. Kui "otsing" väljastatakse uuesti, vastab esimene seade uuesti - ja nii edasi lõputult. Seadmed reageerivad alati samas järjekorras. Vastuste järjekord põhineb OneWire'i siinil olevate seadmete identifikaatoritel. See näib olevat binaarne otsing, mis algab seadme identifikaatorite kõige vähem olulistest bittidest. Nende identifikaatorite leidmiseks kasutatav protokoll on üsna keeruline ja seda on kirjeldatud dokumendi "Book of iButton Standards" lehekülgedel 51-54, mis on pdf -dokument aadressil https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Katsetasin seda otsinguprotsessi ühe bussiga 1–11 anduriga ja leidsin, et antud seadmekomplekti vastuste järjekord oli alati sama, kuid kui ma lisasin bussi lõppu uue seadme, ei olnud see kuidagi võimalik Ma oskasin ennustada, kuhu otsingujärjestuses see ilmub. Näiteks minu lisatud 11. andur tuli kohale nr 5; ja esimene andur, mille ma bussi panin, oli otsingukorras viimane.

Selles kahe anduriga projektis on üks neist RTC -moodulil oma kohale joodetud; teine on pistikusse ühendatud, kasutades tahvli isast päist ja kaabli naissoost päist. Seda saab kergesti eemaldada.

Kui kaabli andur ("välja" andur) on lahti ühendatud, annab käsk "otsing" vaheldumisi "TRUE" ja "FALSE".

Kui kaabli andur on kinnitatud, tekitab käsk "otsing" 3-astmelise tsükli, mille tulemuseks on kaks "TRUE" ja üks "FALSE".

Minu protseduur on anda 1, 2 või 3 "otsingu" käsku, kuni vale tulemus tagastatakse. Seejärel annan välja veel 2 "otsingu" käsku. Kui teine ebaõnnestub (st VÄÄR), siis tean, et siinil on ainult üks andur ja see on andur "sisse". Seadme identiteet salvestatakse ja eraldatakse andurile "in".

Hiljem, kui nii esimene kui ka teine tagasitulek on TÕESED, tean, et bussis on kaks andurit. Ma kontrollin, kumb neist on identne "in" anduriga, ja määran teise "out" anduriks.

Teine väike punkt on see, et kahe anduri tulemuste kogumine toimub, saates "käivita teisendus" käsuga "skip ROM". Meil on võimalus saata käske ühele seadmele (kasutades selle kordumatut identifikaatorit) või kõigile siinil olevatele seadmetele (jäta vahele ROM). Kood näeb välja selline:

ds.reset (); //

// saata käsk "skip ROM" (seega järgmine käsk töötab mõlemas anduris) ds.write (0xCC); // Jäta ROM käsk vahele ds.write (0x44, 0); // alusta teisendamist mõlemas sondis Temperature_state = wait_convert; // mine viivitusolekusse

Kui nõutav viivitusaeg on möödas, võetakse temperatuurid igalt andurilt eraldi. Siin on teise anduri (st OUT -anduri) kood.

kui (lipp2) {

olevik = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // "Out" sondiandmete märkmeplaadi lugemine [0] = ds.read (); andmed [1] = ds.read (); temperatuur_väljund = (andmed [1] << 8) + andmed [0]; temperatuur_väljas = (6 * temperatuur_väljas) + temperatuur_väljas / 4; // korrutada 6,25} muuga {// mitte lipp2 - st Väljasensor pole ühendatud temperatuur_välja = 30000; // parandatakse temperatuuril 300,00 C, kui temperatuuriandur ei tööta} // if lõpp (lipp2)

Töötasin suurema osa sellest tarkvarast välja eraldiseisva visandina, milles olid just temperatuuriandurid, ilma LCD-, RTC- ja SD-kaardi toe tüsistusteta. See arendusjoonistus on allolevas failis.

3. samm: esialgsed tulemused

Esialgsed tulemused
Esialgsed tulemused

See diagramm on kombinatsioon kahest esimesest lugemispäevast.

Soovitan: