Turinys:

Mini oro stotis su „Attiny85“: 6 žingsniai (su nuotraukomis)
Mini oro stotis su „Attiny85“: 6 žingsniai (su nuotraukomis)

Video: Mini oro stotis su „Attiny85“: 6 žingsniai (su nuotraukomis)

Video: Mini oro stotis su „Attiny85“: 6 žingsniai (su nuotraukomis)
Video: Maršrutas Lifosa - Stotis 2024, Liepa
Anonim
Mini oro stotis su „Attiny85“
Mini oro stotis su „Attiny85“
Mini oro stotis su „Attiny85“
Mini oro stotis su „Attiny85“
Mini oro stotis su „Attiny85“
Mini oro stotis su „Attiny85“

Neseniai nurodytame „Indigod0g“aprašė mini orų stotį, kuri veikia gana gerai, naudojant du „Arduinos“. Galbūt ne visi nori paaukoti 2 „Arduinos“, kad gautų drėgmės ir temperatūros rodmenis, ir aš pakomentavau, kad turėtų būti įmanoma atlikti panašią funkciją su dviem „Attiny85“. Manau, kalbėti lengva, todėl geriau padedu pinigus ten, kur mano burna.

Tiesą sakant, jei sujungsiu dvi ankstesnes instrukcijas, kurias parašiau:

Dviejų laidų skystųjų kristalų sąsaja, skirta „Arduino“arba „Attiny“ir Duomenų priėmimas ir siuntimas tarp „Attiny85“(„Arduino IDE 1.06“), tada didžioji dalis darbo jau atlikta. Reikia tik šiek tiek pritaikyti programinę įrangą.

Aš pasirinkau dviejų laidų LCD sprendimą su pamainų registru, o ne I2C LCD, nes „Attiny“pamainų registrą lengviau įdiegti nei I2C magistralę. Tačiau … jei, pavyzdžiui, norite skaityti BMP180 arba BMP085 slėgio jutiklį, jums vis tiek reikia I2C, kad taip pat galėtumėte naudoti I2C skystųjų kristalų ekraną. „TinyWireM“yra gera „I2C“biblioteka „Attiny“(tačiau tam reikia papildomos vietos).

BOM Siųstuvas: DHT11 Attiny85 10 k rezistoriaus 433MHz siųstuvo modulis

Imtuvo Attiny85 10k rezistoriaus 433 MHz imtuvo modulis

Ekranas 74LS164 poslinkio registras 1N4148 diodas 2x1k rezistorius 1x1k kintamas rezistorius LCD ekranas 2x16

1 žingsnis: mini orų stotis su „Attiny85“: siųstuvas

Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas
Mini oro stotis su „Attiny85“: siųstuvas

Siųstuvas yra labai paprasta „Attiny85“konfigūracija su ištraukimo rezistoriumi atstatymo linijoje. Siųstuvo modulis yra prijungtas prie skaitmeninio kaiščio „0“, o DHT11 duomenų kaištis pritvirtintas prie 4 skaitmeninio kaiščio. Kaip anteną prijunkite 17,2 cm laidą (jei norite gauti geresnę anteną, žr. 5 veiksmą). Programinė įranga yra tokia:

// veiks „Attiny“// RF433 = D0 kaištis 5

// DHT11 = D4 pin 3 // bibliotekos #include // Iš Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // kaištis, kur yra prijungtas jūsų siųstuvas // kintamieji float h = 0; plūdė t = 0; int perduoti_t = 0; int perduoti_h = 0; int perduoti_datai = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. drėgmė; t = DHT11. temperatūra; // Aš žinau, aš čia naudoju 3 sveikuosius kintamuosius // kur galėčiau naudoti 1 //, bet tai tik todėl, kad būtų lengviau sekti transfer_h = 100* (int) h; perduoti_t = (int) t; perduoti_datai = perduoti_h+perduoti_t; vyras.transmit (perduoti_datus); vėlavimas (500); }

Programinė įranga naudoja Mančesterio kodą duomenims siųsti. Jis nuskaito DHT11 ir saugo temperatūrą bei drėgmę 2 atskirose plūdėse. Kadangi Mančesterio kodas siunčia ne plūdes, o sveiką skaičių, turiu keletą variantų: 1- padalinkite plūdes į du sveikus skaičius ir išsiųskite jas2- nusiųskite kiekvieną plūdę kaip sveiką skaičių 3- nusiųskite dvi plūdes kaip vieną sveiką skaičių. sveikuosius skaičius vėl ima plūduriuoti imtuve, ir aš turiu nustatyti, kuris sveikasis skaičius yra toks, todėl kodas ilgas Negaliu eiti vien tik seka, jei vienas sveikasis skaičius prarandamas perduodant, todėl turėčiau išsiųsti identifikatorių, pridėtą prie sveikojo skaičiaus. Naudojant 3 parinktį, galiu siųsti tik vieną sveikąjį skaičių. Akivaizdu, kad tai daro rodmenis šiek tiek mažiau tikslius - 1 laipsnio ribose - ir negalima siųsti žemesnės nei nulio temperatūros, tačiau tai tik paprastas kodas ir yra būdų, kaip tai padaryti. Kol kas tai tik principas. Taigi ką aš darau, tai plūdes paversiu sveikais skaičiais, o drėgmę padauginu iš 100. Tada pridedu temperatūrą prie padaugintos drėgmės. Atsižvelgiant į tai, kad drėgmė niekada nebus 100% Maksimalus skaičius, kurį gausiu, yra 9900. Atsižvelgiant į tai, kad temperatūra taip pat nebus aukštesnė nei 100 laipsnių, maksimalus skaičius bus 99, todėl didžiausias skaičius, kurį siunčiu, yra 9999 ir jį lengva atskirti imtuvo pusėje. Žinoma mano skaičiavimas, kuriame naudoju 3 sveikuosius skaičius, yra per didelis, nes tai būtų galima lengvai padaryti naudojant 1 kintamąjį. Aš tiesiog norėjau, kad kodą būtų lengviau sekti. Kodas dabar sudaromas taip:

Dvejetainio eskizo dydis: 2, 836 baitai (iš 8, 192 baitų), kad tilptų į „Attiny 45“arba 85. Ši biblioteka taip pat tinka DHT22. Aš naudoju 1.08 versiją. Tačiau „Attiny85“gali kilti problemų skaitant DHT22 su žemesnėmis bibliotekos versijomis. Man buvo patvirtinta, kad 1.08 ir 1.14, nors ir dirba su įprastu „Arduino“, turi problemų skaitydami DHT22 „Attiny85“. Jei „Attiny85“norite naudoti DHT22, naudokite šios bibliotekos versiją 1.20. Viskas priklauso nuo laiko. 1.20 bibliotekos versija yra greičiau skaitoma. (Ačiū Jeroen už tokią naudotojo patirtį)

2 veiksmas: mini orų stotis su „Attiny85“: imtuvas

Mini oro stotis su „Attiny85“: imtuvas
Mini oro stotis su „Attiny85“: imtuvas

Vėlgi, „Attiny85“naudojama pagrindinėje konfigūracijoje, kai atstatymo kaištis yra ištrauktas aukštai su 10 k rezistoriumi. Imtuvo modulis yra prijungtas prie 1 skaitmeninio kaiščio (6 lustas mikroschemoje). Skystųjų kristalų ekranas pritvirtintas prie 0 ir dviejų skaitmeninių kaiščių. Kaip anteną pritvirtinkite 17,2 cm ilgio laidą. Kodas yra toks:

#įtraukti

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fizinis kaištis 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupRecept (RX_PIN, MAN_1200); man.beginRecept (); } void loop () {if (man.receptComplete ()) {uint16_t m = man.getMessage (); man.beginRecept (); lcd.print ("Drėgnas:"); LCD spausdinimas (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Kodas yra gana paprastas: perduotas sveikasis skaičius gaunamas ir saugomas kintamajame „m“. Jis padalintas iš 100, kad būtų gauta drėgmė, o 100 modulis - temperatūrą. Taigi tarkime, kad gautas sveikasis skaičius buvo 33253325/100 = 333325 % 100 = 25 Šis kodas sudaromas kaip 3380 baitų, todėl jį galima naudoti tik su attiny85, o ne su 45

3 žingsnis: mini orų stotis su „Attiny85/45“: ekranas

Mini oro stotis su „Attiny85/45“: ekranas
Mini oro stotis su „Attiny85/45“: ekranas
Mini oro stotis su „Attiny85/45“: ekranas
Mini oro stotis su „Attiny85/45“: ekranas

Ekranui geriausia, kad aš remiuosi savo instrukcija dviejų laidų ekrane. Trumpai tariant, bendras 16x2 ekranas naudoja perjungimo registrą, todėl gali veikti dviem skaitmeniniais kaiščiais. Žinoma, jei norite naudoti I2C paruoštą ekraną, tai yra taip pat įmanoma, tačiau tada „Attiny“turite įdiegti I2C protokolą. „Tinywire“protokolas tai gali padaryti. Nors kai kurie šaltiniai sako, kad tikimasi 1 Mhz laikrodžio, aš neturėjau jokių problemų (kitame projekte) naudoti jį 8Mhz. Bet kokiu atveju aš čia nesivarginau ir naudoju pamainų registrą.

4 žingsnis: mini orų stotis su „Attiny85/45“: galimybės/išvados

Mini orų stotis su „Attiny85/45“: galimybės/išvados
Mini orų stotis su „Attiny85/45“: galimybės/išvados
Mini orų stotis su „Attiny85/45“: galimybės/išvados
Mini orų stotis su „Attiny85/45“: galimybės/išvados
Mini orų stotis su „Attiny85/45“: galimybės/išvados
Mini orų stotis su „Attiny85/45“: galimybės/išvados

Kaip minėta, aš padariau tai pamokoma parodyti, kad galima sukurti mini oro stotį su dviem attiny85 (net ir su vienu attiny85+ 1 attiny45). Jis siunčia tik drėgmę ir temperatūrą, naudojant DHT11. Tačiau „Attiny“turi 5 skaitmeninius kaiščius, 6 net ir su tam tikra gudrybe. Todėl galima siųsti duomenis iš daugiau jutiklių. Mano projekte- kaip matyti nuotraukose ant juostos ir profesionalioje PCB (OSHPark)- siunčiu/gaunu duomenis iš DHT11, iš LDR ir iš PIR Tačiau apribojimas naudojant „attiny85“kaip imtuvą yra duomenų pateikimas prašmatniu stiliumi. Kadangi atmintis yra ribota: tokie tekstai kaip „Temperatūra, drėgmė, šviesos lygis, artėjantis objektas“gana greitai užpildys vertingą atminties vietą. Vis dėlto nėra jokios priežasties naudoti du „Arduino“tik norint siųsti/gauti temperatūrą ir drėgmę. Be to, galima kad siųstuvas užmigtų ir tik atsibustų, kad kas 10 minučių siųstų duomenis ir taip paduotų juos iš mygtuko langelio. Akivaizdu, kad galima siųsti ne tik temperatūros ar drėgmės duomenis, bet gali būti siunčiama daugybė mažų siųstuvų dirvožemio drėgmės rodmenis arba pridėkite anemometrą arba lietaus matuoklį

5 žingsnis: „Mini Weather Station“: antena

Mini orų stotis: antena
Mini orų stotis: antena

Antena yra svarbi bet kurios 433Mhz nustatytos dalies dalis. Aš eksperimentavau su standartine 17,2 cm „lazdelės“antena ir trumpai flirtavau su ritės antena. Atrodė, kad geriausiai veikia ritės pakrauta antena, kurią lengva padaryti. Dizainas yra Beno Schuelerio ir, matyt, buvo paskelbtas žurnale „Elektor“. PDF su šios „oro aušinimo 433 MHz antenos“aprašymu lengva sekti. (Nuoroda dingo, patikrinkite čia)

6 veiksmas: pridėkite BMP180

Pridėjus BMP180
Pridėjus BMP180

Norite pridėti barometrinio slėgio jutiklį, pvz., BMP180? patikrinkite kitus mano nurodymus šiuo klausimu.

Rekomenduojamas: