Laba diena, šiandien pasidalinsiu instrukcijomis, kaip pasidaryti laikrodį su kambario termometru. Laikrodis veikia Arduino UNO, WG12864B grafinis ekranas naudojamas rodyti laiką ir temperatūrą. Kaip temperatūros jutiklis - ds18b20. Skirtingai nuo daugumos kitų laikrodžių, aš nenaudosiu RTS (Real Time Clock), bet stengiuosi išsiversti be šio papildomo modulio.
Už tai naminis Reikalingi šie komponentai:
- „Arduino UNO“ (arba bet kuri kita „Arduino“ suderinama plokštė)
- Grafinis ekranas WG12864B
- „ds18b20“ temperatūros jutiklis
- Rezistorius 4,7 Kom 0,25 W
- Rezistorius 100 omų 0,25 W
- Baterijų skyrius 4 AA tipo „piršto tipo“ baterijoms
- Tinkama dėžutė
- Mažas failas
- nagų lakas (juodas arba kūno spalvos)
- Šiek tiek plono plastiko ar kartono
- elektros juosta
- jungiamieji laidai
- plokštė
- Sagos
- lituoklis
- Lydmetalis, kanifolija
- dvipusė juosta
1 veiksmas Gaubto paruošimas.
Taigi, mūsų laikrodžiai turėtų būti kažkur. Turite rasti tinkamą dėžę. Svarbiausia, kad jame tilptų WG12864B ekranas, „Arduino“ ir maža mygtukų plokštė. Mažiausias dėžutės dydis yra 7 x 7 x 10 cm .Jei naudojate mažą „Arduino“ lentą, galite ją įsmeigti į dėžę ir mažesnę, tačiau procesą aprašysiu naudodamasi „Arduino UNO“ pavyzdžiu. Pageidautina, kad dėžutė būtų pagaminta iš plastiko, jei, kaip ir mano, ji yra geležinė, verta pasirūpinti izoliacija, kad viduje nebūtų ko „apeiti“. Pageidautina plastiko, nes jį lengviau pjaustyti. Su dėžute jis yra mūsų laikrodžių atvejis, nusprendė. Po ekranu reikia iškirpti 6,5x4 cm ilgio langą. Jei dėžutė yra geležinė, atsargiai tai padaryti yra labai sunku. Nesvarbu, kaip bandysite, šalia pjūvio bus skaldytos dažų ir šiurkštumo. Todėl pirmiausia mes jį išpjaustome, tam galite naudoti „malūnėlį“, gręžtuvą su antgaliu pjaustymui arba apskritai jūsų pasirinktą frezavimo pjaustytuvą. Po to kraštus nuvalome failu. Visus susmulkintus dažus dažome nagų laku, tinkamos spalvos. Rezultatas turėtų būti toks:
2 veiksmas. Paruoškite grafinį ekraną.
Prijungus ekraną, iš pirmo žvilgsnio kyla daug problemų ir sunkumų. Bet jei pirmiausia susidursite su jų rūšimis, tai taps daug lengviau ir suprantamiau. Valdiklio ks0107 / ks0108 ekranuose yra daugybė variantų ir tipų.Visi ekranai paprastai yra suskirstyti į 4 tipus:
A variantas: HDM64GS12L-4, „Crystalfontz CFAG12864B“, „Sparkfun LCD-00710CM“, „NKC Electronics LCD-0022“, „WinStar WG12864B-TML-T“
B variantas: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Ekranai AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG1286464J-1,
C variantas: „Shenzhen Jinghua Displays Co Ltd.“ Jm12864
D variantas: „Wintek-Cascades WD-G1906G“, „Wintek-GEN“ / WD-G1906G / KS0108B, „Wintek / WD-G1906G / S6B0108A“, „TECDIS“ / Y19061 / HD61202, „Varitronix“ / MGLS19264 / HD61202
Sąrašas nėra išsamus, jų yra labai daug. Labiausiai paplitęs ir, mano manymu, patogus WG12864B3 V2.0. Ekraną galima prijungti prie „Arduino“ per nuoseklųjį ar lygiagretųjį prievadą. Kai naudojamasi su „Arduino UNO“, geriau pasirinkti nuosekliojo prievado jungtį - tada mums reikia tik 3 mikrovaldiklio išėjimų, o ne mažiausiai 13 eilučių, kai jos jungiamos per lygiagretųjį prievadą. Viskas sujungta gana paprastai. Yra dar vienas niuansas. Parduodant galima rasti dviejų tipų ekranus su įmontuotu potenciometru (kontrastui reguliuoti) ir be jo. Aš pasirinkau ir patariu tą patį padaryti su įmontuotu.
Tai sumažina dalių skaičių ir litavimo laiką. Taip pat verta pateikti 100 μm ribinį rezistorių, skirtą foniniam apšvietimui. Tiesiogiai prijungus 5 voltus, kyla pavojus, kad sudegins foninis apšvietimas.
WG12864B - „Arduino UNO“
1 (GND) - GND
2 (VCC) - + 5 V
4 (RS) - 10
5 (R / W) - 11
6 (E) - 13
15 (PSB) - GND
19 (BLA) - per rezistorių - + 5 V
20 (BLK) - GND
Patogiausia yra surinkti viską už ekrano ir iš jo išvesti 5 laidus, kad būtų galima prisijungti prie „Arduino UNO“. Rezultatas turėtų būti kažkas tokio:
Tiems, kurie vis dar pasirenka lygiagretųjį ryšį, pateiksiu jungčių lentelę.
B variantų ekranų išdėstymas:
3 žingsnis Prijunkite temperatūros jutiklį.
Kaip sakiau, temperatūrai matuoti naudosime integruotą jutiklį DS18B20. Aš pasirinkau dėl jo aukšto matavimo tikslumo, paklaida ne didesnė kaip 0,5 ° C. Jutiklis kalibruojamas pagaminimo metu, nereikia jokių papildomų nustatymų. Temperatūros matavimo diapazonas -55 ... + 125 ° C. Yra du veikimo režimai: su išoriniu energijos šaltiniu ir „nepalankiąja galia“. Kai dirbate išorinio maitinimo režimu, ryšys yra toks:
Kai naudojamas „nelemtas galingumas“, jutiklis gauna energiją iš ryšio linijos. Šiame režime „ds18b20“ prijungti prie mikrovaldiklio pakanka dviejų laidų. Vidinis jutiklio kondensatorius yra įkraunamas dėl energijos ryšių linijoje žemoje magistralės dalyje. „Parazitinės mitybos“ režimas turi daug funkcijų, todėl nerekomenduoju jo naudoti. Bet jei vis tiek nuspręsite naudoti, čia yra schema:
Arba naudodami patobulintą galią galite naudoti patobulintą laidų schemą:
Vienoje ryšio linijoje gali būti keli jutikliai. Mūsų laikrodžiams pakanka vieno. Mes jungiame laidą nuo „DQ“ ds18b20 kaiščio prie „5 kaiščio“ Arduino UNO.
4 žingsnis Lentelės su mygtukais paruošimas.
Norėdami nustatyti laiką ir datą laikrodyje, mes naudosime tris mygtukus. Patogumui nugruntuokite tris mygtukus ant plokštės ir išjunkite laidą.
Mes jungiame taip: visiems trims mygtukams bendra viela yra prijungta prie „GND“ Arduino. Pirmasis mygtukas skirtas įeiti į laiko nustatymo režimą ir perjungti laiką ir datą, prisijungti prie „2 kaiščio“. Antrasis, vertės padidinimo mygtukas, yra „3 kaištis“, o trečiasis, vertės sumažinimo mygtukas yra „4 kaištis“.
5 žingsnis Viską sudėti.
Norėdami išvengti trumpo jungimo, izoliuokite ekraną. Apskritimu apvyniojame elektrine juostele, o ant nugaros pritvirtiname prie dvipusės juostos, supjaustytos pagal dydį, izoliacinės medžiagos juostele. Tinka storas kartonas arba plonas plastikas. Iš popierinės tabletės naudojau plastiką. Paaiškėjo taip:
Ekrano priekyje išilgai krašto klijuojame dvipusę juostą putplasčio pagrindu, geriausia juoda.
Mes prijungiame ekraną prie Arduino:
Be to, iš akumuliatoriaus skyriaus mes jungiame „Arinino“ VIN, atėmus „GND“. Mes pastatome jį už Arduino. Prieš montuodami dėžėje nepamirškite prijungti temperatūros jutiklio ir plokštės mygtukais.
6 žingsnis Paruoškite ir užpildykite eskizą.
Temperatūros jutikliui reikia „OneWire“ bibliotekos.
Išėjimas į ekraną yra per „U8glib“ biblioteką:
Norėdami redaguoti ir užpildyti eskizą, įdiekite šias dvi bibliotekas. Yra du būdai, kaip tai padaryti. Tiesiog išpakuokite šiuos archyvus ir įdėkite neišpakuotus failus į „bibliotekų“ aplanką, esantį aplanke, kuriame yra įdiegta „Arduino IDE“.Arba antrasis variantas yra įdiegti biblioteką tiesiai į programavimo aplinką. Neišpakavę atsisiųstų archyvų, „Arduino IDE“ pasirinkite meniu „Sketch - Connect Library“. Pačiame išskleidžiamojo sąrašo viršuje pasirinkite elementą „Pridėti .Zip biblioteką“. Atsidariusiame dialogo lange pasirinkite biblioteką, kurią norite įtraukti. Dar kartą atidarykite meniu „Sketch - Connect Library“. Pačiame išskleidžiamojo sąrašo apačioje turėtumėte pamatyti naują biblioteką. Dabar biblioteka gali būti naudojama programose. Nepamirškite iš naujo paleisti „Arduino IDE“ po viso šito.
Temperatūros jutiklis veikia pagal „One Wire“ protokolą ir turi unikalų kiekvieno įrenginio adresą - 64 bitų kodą. Kiekvieną kartą ieškoti šio kodo yra nepraktiška. Todėl pirmiausia turite prijungti jutiklį prie Arduino, užpildykite eskizą, esantį meniu Failas - Pavyzdžiai - Dalaso temperatūra - „OneWireSearch“. Tada paleiskite „Tools - Port Monitor“. Arduino turėtų rasti mūsų jutiklį, parašyti jo adresą ir esamus temperatūros rodmenis. Nukopijuojame arba tiesiog užrašome savo jutiklio adresą. Atidarykite „Arduino_WG12864B_Term“ eskizą, ieškokite eilutės:
baitų pridėtojas [8] = {0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97}; // mano jutiklio adresas
Mes užrašome jūsų jutiklio adresą tarp petnešų, pakeisdami mano jutiklio adresą.
Atsargos:
//u8g.setPrintPos (44, 64); u8g.print (sek); // Spausdinkite sekundes, kad patikrintumėte kurso teisingumą
Parodo sekundes šalia „Data“. Tai būtina norint tiksliai nustatyti laiko eigą.
Jei laikrodis skuba arba vėluoja, turėtumėte pakeisti eilutės vertę:
if (micros () - prevmicros> 494000) {// pakeiskite kitu, norėdami pakoreguoti, buvo 500000
Aš eksperimentiškai nustatiau skaičių, kuriuo laikrodis eina gana tiksliai. Jei jūsų laikrodis skuba, turėtumėte padidinti šį skaičių, o jei aš atsilikau - sumažinti. Norėdami nustatyti kurso tikslumą ir jums reikia išvadų sekundžių. Tiksliai sukalibravus skaičių, sekundes galima komentuoti ir tokiu būdu pašalinti iš ekrano.
Užpildykite eskizą.