INHOUDSOPGAWE:

Mini weerstasie met Attiny85: 6 stappe (met foto's)
Mini weerstasie met Attiny85: 6 stappe (met foto's)

Video: Mini weerstasie met Attiny85: 6 stappe (met foto's)

Video: Mini weerstasie met Attiny85: 6 stappe (met foto's)
Video: Stacja pogody z kolorowym wyświetlaczem i zewnętrznym czujnikiem bezprzewodowym DIGOO DG-TH8622 2024, November
Anonim
Mini weerstasie met Attiny85
Mini weerstasie met Attiny85
Mini weerstasie met Attiny85
Mini weerstasie met Attiny85
Mini weerstasie met Attiny85
Mini weerstasie met Attiny85

In 'n onlangse instruksies het Indigod0g 'n mini -weerstasie beskryf wat redelik goed werk met twee Arduino's. Miskien wil nie almal 2 Arduino's opoffer om humiditeit en temperatuurmetings te kry nie, en ek het opgemerk dat dit moontlik sou wees om 'n soortgelyke funksie met twee Attiny85's te doen. Ek dink praat is maklik, so ek moet my geld beter sit waar my mond is.

Trouens, as ek twee vorige instruksies kombineer, het ek geskryf:

2-draads LCD-koppelvlak vir Arduino of Attiny en data ontvang en stuur tussen Attiny85 (Arduino IDE 1.06), dan is die meeste werk reeds gedoen. U hoef slegs die sagteware 'n bietjie aan te pas.

Ek het gekies vir 'n tweedraad -lcd -oplossing met 'n skofregister, eerder as 'n I2C LCD, want op die Attiny is die skofregister makliker om te implementeer as die I2C -bus. Maar … as u byvoorbeeld 'n BMP180- of BMP085 -druksensor wil lees, benodig u in elk geval I2C daarvoor, sodat u net sowel 'n I2C LCD kan gebruik. TinyWireM is 'n goeie biblioteek vir I2C op 'n Attiny (maar dit verg ekstra ruimte).

BOM Die sender: DHT11 Attiny85 10 k weerstand 433MHz sender module

Die ontvanger Attiny85 10k weerstand 433 MHz ontvanger module

Die skerm 74LS164 skuifregister 1N4148 diode 2x1k weerstand 1x1k veranderlike weerstand en LCD skerm 2x16

Stap 1: Mini -weerstasie met Attiny85: die sender

Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender
Mini weerstasie met Attiny85: die sender

Die sender is 'n baie basiese opset van die Attiny85 met 'n optrekweerstand op die resetlyn. 'N Sendermodule word aan die digitale pen' 0 'gekoppel en die DHT11 -datapen word aan die digitale pen 4 geheg. Heg 'n draad van 17,2 cm as antenna aan (sien stap 5 vir 'n baie beter antenna.) Die sagteware is soos volg:

// sal werk op Attiny // RF433 = D0 pen 5

// DHT11 = D4 pin 3 // biblioteke #include // Van Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin waar u sender gekoppel is // veranderlikes float h = 0; dryf t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; ongeldige opstelling () {pinMode (1, INVOER); man.setupTransmit (TX_PIN, MAN_1200); } leemte -lus () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. humiditeit; t = DHT11.temperatuur; // Ek weet, ek gebruik hier drie heelgetal veranderlikes // waar ek 1 // kan gebruik, maar dit is net so dat dit makliker is om transmit_h = 100* (int) h te volg; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); vertraging (500); }

Die sagteware gebruik Manchester -kode om die data te stuur. Dit lees die DHT11 en stoor die temperatuur en humiditeit in 2 afsonderlike vlotte. Aangesien die Manchester-kode nie vlotte stuur nie, maar 'n heelgetal, het ek verskeie opsies: 1- verdeel die vlotte in twee heelgetalle elk en stuur diegene2- stuur elke vlot as 'n heelgetal3- stuur die twee vlotte as een heelgetal Met opsie 1 moet ek kombineer die heelgetalle dryf weer in die ontvanger en ek moet identifiseer watter heelgetal wat is, wat die kode langdraaiend maak Met opsie 2 moet ek nog steeds identifiseer watter heelgetal vir humiditeit en watter vir temperatuur is. Ek kan nie volgens volgorde alleen gaan as een heelgetal verlore gaan in die oordrag nie, so ek moet 'n identifiseerder stuur wat aan die heelgetal geheg is. Met opsie 3 kan ek net een heelgetal stuur. Dit maak die lesings duidelik minder akkuraat - binne 1 graad - en 'n mens kan nie onder nul temperature stuur nie, maar dit is slegs 'n eenvoudige kode en daar is maniere om dit te vermy. Vir nou gaan dit net oor die beginsel. So wat ek doen, verander ek die vlotte in heelgetalle en vermenigvuldig ek die humiditeit met 100. Dan voeg ek die temperatuur by die vermenigvuldigde humiditeit. Aangesien die humiditeit nooit 100% sal wees nie maksimum getal wat ek kry, is 9900. Aangesien die temperatuur ook nie bo 100 grade sal wees nie, sal die maksimum getal 99 wees, daarom is die hoogste getal wat ek sal stuur 9999 en dit is maklik om aan die ontvangerkant te skei. my berekening waarin ek 3 heelgetalle gebruik, is te veel, aangesien dit maklik met 1 veranderlike gedoen kan word. Ek wou net die kode makliker maak om te volg. Die kode word nou saamgestel as:

Binêre sketsgrootte: 2, 836 grepe (van 'n maksimum van 8, 192 byte), sodat dit in 'n Attiny 45 of 85 pas OPMERKING die dht.h -biblioteek wat ek gebruik, is die van Rob Tillaart. Die biblioteek is ook geskik vir 'n DHT22. Ek gebruik weergawe 1.08. Die Attiny85 kan egter probleme ondervind met die lees van 'n DHT22 met laer weergawes van die biblioteek. Dit is aan my bevestig dat die 1.08 en 1.14 - hoewel hulle op 'n gewone Arduino werk - probleme ondervind met die lees van 'n DHT22 op die Attiny85. As u 'n DHT22 op die Attiny85 wil gebruik, gebruik die 1.20 weergawe van hierdie biblioteek. Dit het alles te doen met tydsberekening. Die 1.20 weergawe van die biblioteek kan vinniger gelees word. (Dankie vir die gebruikerservaring Jeroen)

Stap 2: Mini -weerstasie met Attiny85: die ontvanger

Mini weerstasie met Attiny85: die ontvanger
Mini weerstasie met Attiny85: die ontvanger

Die Attiny85 word weereens gebruik in 'n basiese konfigurasie met die Reset -pen wat hoog getrek is met 'n 10 k -weerstand. Die ontvanger -module is aan die digitale pen 1 (pen 6 op die skyfie) gekoppel. Die LCD is gekoppel aan digitale penne 0 en twee. Heg 'n draad van 17,2 cm as antenna aan. Die kode is soos volg:

#insluit

#sluit LiquidCrystal_SR lcd (0, 2, TWO_WIRE) in; #define RX_PIN 1 // = fisiese pen 6 leemte opstelling () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void lus () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Humid:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Die kode is redelik eenvoudig: die oorgedra heelgetal word ontvang en gestoor in veranderlike 'm'. Dit word gedeel deur 100 om die humiditeit te gee en die modulo van 100 gee die temperatuur. Gestel dus dat die heelgetal ontvang is 33253325/100 = 333325 % 100 = 25 Hierdie kode word saamgestel as 3380 grepe en kan dus slegs met 'n attiny85 gebruik word, nie met 'n 45 nie

Stap 3: Mini -weerstasie met Attiny85/45: die skerm

Mini weerstasie met Attiny85/45: die skerm
Mini weerstasie met Attiny85/45: die skerm
Mini weerstasie met Attiny85/45: die skerm
Mini weerstasie met Attiny85/45: die skerm

Vir die vertoning is dit die beste dat ek na my instruksies verwys op 'n tweedraads -skerm. Kortom, 'n gewone 16x2 -skerm gebruik 'n shiftregister, sodat dit met twee digitale penne kan werk. ook moontlik, maar dan moet u 'n I2C -protokol op die Attiny implementeer. Die Tinywire -protokol kan dit doen. Alhoewel sommige bronne sê dat dit 'n 1 Mhz -horlosie verwag, het ek (in 'n ander projek) geen moeite gehad om dit op 8Mhz te gebruik nie, maar ek het my net nie hier gepla nie en 'n skofregister gebruik.

Stap 4: Mini -weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings

Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings
Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings
Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings
Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings
Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings
Mini weerstasie met Attiny85/45: moontlikhede/gevolgtrekkings

Soos gesê, het ek dit opdrag gegee om aan te toon dat 'n mens 'n mini -weerstasie kan maak met twee attiny85's (selfs met een attiny85+ 1 attiny45). Dit stuur slegs humiditeit en temperatuur met 'n DHT11. Die Attiny het egter 5 digitale penne om te gebruik, 6 selfs met 'n bietjie bedrog. Daarom is dit moontlik om data van meer sensors te stuur. In my projek- soos gesien op die foto's op strookbord en op 'n professionele PCB (OSHPark)- stuur/ontvang ek data van 'n DHT11, van 'n LDR en van 'n PIR, alles gebruik twee attiny85's Die beperking in die gebruik van 'n attiny85 as ontvanger is egter die weergawe van die data in 'n spoggerige styl. Aangesien die geheue beperk is: tekste soos 'temperatuur, humiditeit, ligvlak, onderwerp nader', sal redelik vinnig waardevolle geheue vul, maar daar is geen rede om twee Arduino's te gebruik om temperatuur en humiditeit te stuur/ontvang nie. om die sender te laat slaap en net te laat wakker word om data elke 10 minute te stuur en dit dus uit 'n knoppiesel te voer. Uiteraard kan nie net temperatuur- of humiditeitsdata gestuur word nie, maar ook 'n verskeidenheid klein senders grondvogmetings ook, of voeg 'n windmeter, of 'n reënmeter by

Stap 5: Mini Weerstasie: die antenna

Mini Weerstasie: die antenna
Mini Weerstasie: die antenna

Die antenna is 'n belangrike deel van enige 433Mhz -opstelling. Ek het met die standaard 17,2 cm 'staaf' -antenne geëksperimenteer en 'n kort flirt met 'n spoelantenne gehad. Die ontwerp is van Ben Schueler en is blykbaar in die tydskrif 'Elektor' gepubliseer. 'N PDF met die beskrywing van hierdie' lugverkoelde 433 MHz -antenne 'is maklik om te volg. (Skakel verdwyn, kyk hier)

Stap 6: Voeg 'n BMP180 by

Voeg 'n BMP180 by
Voeg 'n BMP180 by

Wil u barometriese druksensor soos die BMP180 byvoeg? kyk na my ander instruksies daaroor.

Aanbeveel: