Turinys:

„Pasidaryk pats“registravimo termometras su 2 jutikliais: 3 žingsniai (su nuotraukomis)
„Pasidaryk pats“registravimo termometras su 2 jutikliais: 3 žingsniai (su nuotraukomis)

Video: „Pasidaryk pats“registravimo termometras su 2 jutikliais: 3 žingsniai (su nuotraukomis)

Video: „Pasidaryk pats“registravimo termometras su 2 jutikliais: 3 žingsniai (su nuotraukomis)
Video: БЕЛКОВО-ЗАВАРНОЙ КРЕМ! Итальянская меренга! ПОДРОБНО ! Рецепт БЗК. Стабильный и очень вкусный ! 2024, Lapkritis
Anonim
„Pasidaryk pats“registravimo termometras su 2 jutikliais
„Pasidaryk pats“registravimo termometras su 2 jutikliais
„Pasidaryk pats“registravimo termometras su 2 jutikliais
„Pasidaryk pats“registravimo termometras su 2 jutikliais

Šis projektas yra mano ankstesnio projekto „Pasidaryk pats“registravimo termometras. Jis registruoja temperatūros matavimus į „micro SD“kortelę.

Techninės įrangos pakeitimai

Prie realaus laiko laikrodžio modulio pridėjau DS18B20 temperatūros jutiklį, kuriame yra šio įrenginio spausdintinės plokštės nuostata; ir pridėjo atitinkamą laidą iš „DS“RTC kaiščio prie „Arduino“D2.

Programinės įrangos pakeitimai

Tada pridėjau ir pakeičiau programinę įrangą. Pagrindiniai pakeitimai yra šie:

Skystųjų kristalų ekrane rodomos dvi temperatūros „In“ir „Out“.

Į SD kortelę įrašyti žurnalo failai turi du temperatūros laukus: „temperatūra įeina“ir „temperatūra išeina“.

Dėl ilgesnio įrašymo į SD kortelę EEPROM darbo buferiai buvo didesni ir dėl to pradėjau turėti atminties konfliktų problemų. Aš padariau keletą pakeitimų, skirtų sumažinti dinaminės atminties naudojimą, įskaitant simbolių masyvų naudojimą visoms eilutėms vietoj „String“objekto.

Programinės įrangos dalis, kuri gauna temperatūrą, turi esminių pakeitimų, kurių dauguma yra susiję su nustatymu, kuris zondas yra „įvestas“, o kuris - „išvesties“. Šis identifikavimas dažniausiai yra automatinis. Jei dėl kokių nors priežasčių zondai pasikeičia, tai galima ištaisyti atjungus „out“zondą ir vėl prijungus. Pati tokio pasikeitimo nepatyriau. Programuotojui ar vartotojui nereikia įvesti jutiklių adresų, programinė įranga pati nustato temperatūros jutiklių adresus.

Remiantis atliktais bandymais, temperatūros zondų identifikavimas ir atsakas į SD kortelės išėmimą ir pakeitimą vis dar veikia sklandžiai.

1 žingsnis: programinės įrangos kūrimas

Šis žingsnis suteikia jums visą užbaigto projekto programinę įrangą. Aš ją sukomplektuojau naudodamas „Arduino IDE 1.6.12“. Jis naudoja 21 400 baitų programos atminties (69%) ir 1 278 baitus dinaminės atminties (62%).

Į kodeksą įtraukiau komentarus, tikėdamasi, kad bus aišku, kas vyksta.

2 žingsnis: darbas su dviem temperatūros jutikliais

Ši programinė įranga naudoja „OneWire“biblioteką. Jis nenaudoja jokių „DallasTemperature“ar panašių bibliotekų. Vietoj to komandos ir duomenys iš temperatūros jutiklių atliekami pagal eskizą ir yra lengvai matomi bei suprantami. Radau naudingą „OneWire“bibliotekos komandų sąrašą adresu

www.pjrc.com/teensy/td_libs_OneWire.html

Kai yra du (ar daugiau) temperatūros jutikliai, būtina nustatyti, kuris iš jų yra.

Aš pavadinau savo du jutiklius „į vidų“ir „iš išorės“, tai būdinga komerciniams įrenginiams, kurių jutiklio įtaisas yra paprastai „viduje“, o kitą - ant kabelio, kad jį būtų galima uždėti kitoje pusėje. išorinės sienos ir taip būti „išorėje“.

Įprastas būdas nustatyti skirtingus zondus yra atrasti įrenginių adresus ir įdėti juos į programinę įrangą kartu su identifikavimo etikete. Visi kiti projektai, kuriuos mačiau, naudoja šį metodą, nesvarbu, ar jie naudoja „DallasTemperature“biblioteką, ar ne.

Mano tikslas buvo, kad programinė įranga automatiškai atpažintų jutiklius ir teisingai juos paskirstytų „į vidų“ir „išeitį“. Tai padaryti pakankamai paprasta, uždėjus juos ant atskirų „Arduino“kaiščių. Šiame projekte A0 – A3 ir A6 bei A7 yra nenaudojami, todėl šiuo atveju galėjo būti naudojamas vienas iš jų. Tačiau man pavyko automatiškai atpažinti tą patį „OneWire“magistralės jutiklį.

Tai veikia taip.

„OneWire“bibliotekoje yra komanda „OneWireObject.search (adresas)“, kur „adresas“yra 8 baitų masyvas, o „OneWireObject“yra anksčiau sukurto „OneWire“objekto egzemplioriaus pavadinimas. Jis gali turėti bet kokį jums patinkantį pavadinimą. Manasis vadinamas „ds“. Kai išleidžiate šią „paieškos“komandą, „OneWire“biblioteka signalizuoja vieną laidinę magistralę. Jei jis randa reaguojantį jutiklį, jis grąžina „TRUE“loginę vertę ir užpildo „address“masyvą 8 baitų unikaliu jutiklio identifikatoriumi. Šis identifikatorius apima šeimos kodą (pradžioje) ir čekio sumą (pabaigoje). Tarp jų yra 6 baitai, kurie unikaliai identifikuoja jutiklį savo šeimoje.

Vienas rezultatas (adresas ir grąžinimo TRUE) gaunamas kiekvieną kartą, kai duodama ši komanda, važiuojant per visus „OneWire“magistralės įrenginius. Kai kiekvienas įrenginys sureaguos, kai kitą kartą bus atlikta „paieška“, grąžinama „FALSE“, o tai reiškia, kad kiekvienas autobuso įrenginys jau atsakė. Jei „paieška“išduodama dar kartą, pirmasis įrenginys vėl reaguoja - ir taip neribotą laiką. Įrenginiai visada reaguoja ta pačia tvarka. Atsakymų tvarka yra pagrįsta „OneWire“magistralės įrenginių identifikatoriais. Atrodo, kad tai dvejetainė paieška, pradedant nuo mažiausiai reikšmingų įrenginio identifikatorių bitų. Šiems identifikatoriams surasti naudojamas protokolas yra gana sudėtingas ir aprašytas dokumento „Book of iButton Standards“, kuris yra pdf dokumentas, adresu https://pdfserv.maximintegrated.com/en/an/AN937.pd, 51–54 puslapiuose. …

Aš išbandžiau šį paieškos procesą naudodami nuo 1 iki 11 jutiklių vienoje magistralėje ir radau, kad tam tikro įrenginių rinkinio atsakymo tvarka visada buvo ta pati, tačiau kai prie magistralės galo pridėjau naują įrenginį, nebuvo jokio būdo Galėjau nuspėti, kur paieškos eilutėje jis pasirodys. Pavyzdžiui, 11 -asis mano pridėtas jutiklis buvo padėtyje Nr.5; o pirmasis jutiklis, kurį įdėjau į autobusą, buvo paskutinis paieškos eilėje.

Šiame projekte su dviem jutikliais vienas iš jų yra lituojamas RTC modulyje; kita yra prijungta prie lentos naudojant vyrišką antraštę ir ant kabelio - moterišką antraštę. Jį galima lengvai nuimti.

Kai kabelio jutiklis („išvesties“jutiklis) yra atjungtas, komanda „paieška“sukuria pakaitinius „TRUE“ir „FALSE“.

Kai prijungtas kabelio jutiklis, komanda „paieška“sukuria 3 pakopų ciklą, duodami du „TRUE“ir vienas „FALSE“.

Mano procedūra yra išduoti 1, 2 arba 3 „paieškos“komandas, kol bus pateiktas FALSE rezultatas. Tada aš duodu dar 2 „paieškos“komandas. Jei antrasis nepavyksta (ty FALSE), žinau, kad magistralėje yra tik vienas jutiklis ir kad jis yra „in“jutiklis. Įrenginio tapatybė įrašoma ir priskiriama „in“jutikliui.

Vėliau, jei ir pirmasis, ir antrasis grįžimai yra TIKRI, žinau, kad autobuse yra du jutikliai. Aš patikrinu, kuris iš jų turi tapatybę „in“jutikliui, o kitą paskiriu kaip „out“jutiklį.

Kitas nedidelis dalykas yra tai, kad rezultatų surinkimas iš dviejų jutiklių atliekamas siunčiant „pradėti konversiją“pagal vadinamąją „praleisti ROM“komandą. Mes turime galimybę siųsti komandas į vieną įrenginį (naudojant jo unikalų identifikatorių) arba į visus magistralės įrenginius (praleisti ROM). Kodas atrodo taip:

ds.reset (); //

// siųsti komandą „praleisti ROM“(taigi kita komanda veikia abiejuose jutikliuose) ds.write (0xCC); // Praleisti ROM komandą ds.write (0x44, 0); // pradėti konversiją abiejuose zonduose Temperature_state = wait_convert; // eiti į atidėjimo būseną

Pasibaigus reikiamam atidėjimo laikui, temperatūra gaunama iš kiekvieno jutiklio atskirai. Čia yra antrojo jutiklio (ty OUT jutiklio) kodas.

if (vėliava2) {

dabartis = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Skaityti „out“zondo duomenų užrašų knygelę [0] = ds.read (); duomenys [1] = ds.read (); temperatūra_iš = (duomenys [1] << 8) + duomenys [0]; Temperatūra_ (= 6 * temperatūra) + Temperatūra / 4; // padauginkite iš 6,25} kitaip {// ne vėliava2 - ty Išėjimo jutiklis neprijungtas. Temperatūros išėjimas = 30000; // pataisyti esant 300,00 C, jei neveikia temperatūros jutiklis} // pabaiga (jei vėliava2)

Daugumą šios programinės įrangos sukūriau atskirame eskize, kuriame buvo tik temperatūros jutikliai, be LCD, RTC ir SD kortelės palaikymo komplikacijų. Šis kūrimo eskizas yra žemiau esančiame faile.

3 žingsnis: preliminarūs rezultatai

Preliminarūs rezultatai
Preliminarūs rezultatai

Ši diagrama yra dviejų pirmųjų parodymų dienų derinys.

Rekomenduojamas: