Indholdsfortegnelse:

Mini vejrstation med Attiny85: 6 trin (med billeder)
Mini vejrstation med Attiny85: 6 trin (med billeder)

Video: Mini vejrstation med Attiny85: 6 trin (med billeder)

Video: Mini vejrstation med Attiny85: 6 trin (med billeder)
Video: Trådløs Mini Indendørs Digitalt Termometer / Hygrometer med App 2024, Juni
Anonim
Mini vejrstation med Attiny85
Mini vejrstation med Attiny85
Mini vejrstation med Attiny85
Mini vejrstation med Attiny85
Mini vejrstation med Attiny85
Mini vejrstation med Attiny85

I en nylig instruerbar Indigod0g beskrev en mini -vejrstation, der fungerer ret godt ved hjælp af to Arduinos. Måske er det ikke alle, der ønsker at ofre 2 Arduinos for at få fugtigheds- og temperaturmålinger, og jeg kommenterede, at det skulle være muligt at udføre en lignende funktion med to Attiny85'er. Jeg tror, det er let at tale, så jeg må hellere lægge mine penge, hvor min mund er.

Faktisk, hvis jeg kombinerer to tidligere instruktioner, skrev jeg:

2-Wire LCD-interface til Arduino eller Attiny og Modtagelse og afsendelse af data mellem Attiny85 (Arduino IDE 1.06), så er det meste af arbejdet allerede udført. Behøver kun at tilpasse softwaren lidt.

Jeg valgte en to -tråds lcd -løsning med et skiftregister, frem for en I2C LCD, fordi skiftet registeret på Attiny er lettere at implementere end I2C -bussen. Men … hvis du f.eks. Vil læse en BMP180 eller BMP085 trykføler, har du alligevel brug for I2C til det, så du kan lige så godt bruge en I2C LCD også. TinyWireM er et godt bibliotek til I2C på en Attiny (men det kræver ekstra plads).

BOM Senderen: DHT11 Attiny85 10 k modstand 433MHz sendermodul

Modtageren Attiny85 10k modstand 433 MHz modtagermodul

Display 74LS164 skiftregister 1N4148 diode 2x1k modstand 1x1k variabel modstand en LCD display 2x16

Trin 1: Mini vejrstation med Attiny85: senderen

Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen
Mini vejrstation med Attiny85: senderen

Senderen er en meget grundlæggende konfiguration af Attiny85 med en pull up -modstand på nulstillingslinjen. Et transmittermodul er fastgjort til den digitale pin '0', og DHT11 -datapinden fastgøres til den digitale pin 4. Tilslut en ledning på 17,2 cm som antenne (for en meget bedre antenne se trin 5). Softwaren er som følger:

// vil fungere på Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // biblioteker #include // Fra Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin, hvor din sender er tilsluttet // variabler float h = 0; flyde t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. fugtighed; t = DHT11. temperatur; // Jeg ved, jeg bruger 3 heltalsvariabler her // hvor jeg kunne bruge 1 // men det er bare så det er lettere at følge transmit_h = 100* (int) h; sende_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); forsinkelse (500); }

Softwaren bruger Manchester -kode til at sende dataene. Den læser DHT11 og gemmer temperatur og fugtighed i 2 separate flydere. Da Manchester-koden ikke sender floats, men et helt tal, har jeg flere muligheder: 1- opdel floats i to heltal hver og send disse2- send hver float som et heltal3- send de to floats som et heltal Med option 1 skal jeg kombinere heltalene flyder igen i modtageren, og jeg er nødt til at identificere, hvilket heltal der er, hvilket gør koden langvarig Med valgmulighed 2 mangler jeg stadig at identificere hvilket heltal der er for fugtighed og hvilket for temperatur. Jeg kan ikke gå efter sekvens alene, hvis et helt tal går tabt i transmissionen, så jeg skulle sende en identifikator, der er knyttet til heltalet. Med mulighed 3 kan jeg sende kun et helt tal. Dette gør tydeligvis aflæsningerne lidt mindre præcise - inden for 1 grad - og man kan ikke sende under nul temperaturer, men det er bare en simpel kode, og der er måder deromkring. For nu er det bare om princippet. Så hvad jeg gør er at jeg vender flyderne til heltal og jeg gange luftfugtigheden med 100. Derefter tilføjer jeg temperaturen til den multiplicerede luftfugtighed. I betragtning af at luftfugtigheden aldrig vil være 100% det maksimale nummer, jeg får, er 9900. I betragtning af at temperaturen heller ikke vil være over 100 grader, vil det maksimale antal være 99, derfor er det højeste nummer, jeg sender, 9999, og det er let at adskille på modtagersiden. Selvfølgelig min beregning, hvor jeg bruger 3 heltal, er overkill, da det let kunne gøres med 1 variabel. Jeg ville bare gøre koden lettere at følge. Koden kompileres nu som:

Binær skitsestørrelse: 2, 836 bytes (af et maksimum på 8, 192 byte), så det passer i en Attiny 45 eller 85BEMÆRK dht.h -biblioteket, jeg bruger, er det fra Rob Tillaart. Dette bibliotek er også velegnet til en DHT22. Jeg bruger version 1.08. Attiny85 kan dog have problemer med at læse en DHT22 med lavere versioner af biblioteket. Det er blevet bekræftet for mig, at 1.08 og 1.14 - selvom de arbejder på en almindelig Arduino - har problemer med at læse en DHT22 på Attiny85. Hvis du vil bruge en DHT22 på Attiny85, skal du bruge 1.20 -versionen af dette bibliotek. Det hele har noget med timing at gøre. 1.20 -versionen af biblioteket har en hurtigere læsning. (Tak for den brugeroplevelse Jeroen)

Trin 2: Mini vejrstation med Attiny85: modtageren

Mini vejrstation med Attiny85: modtageren
Mini vejrstation med Attiny85: modtageren

Igen bruges Attiny85 i en grundlæggende konfiguration med nulstillingstappen trukket højt med en 10 k modstand. Modtagermodulet er fastgjort til digital pin 1 (pin 6 på chippen). LCD'et er fastgjort til digitale ben 0 og to. Sæt en ledning på 17,2 cm som antenne i. Koden er som følger:

#omfatte

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fysisk pin 6 ugyldig opsætning () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Fugtigt:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Koden er ret simpel: det transmitterede heltal modtages og lagres i variablen 'm'. Det divideres med 100 for at give luftfugtigheden, og modulo på 100 giver temperaturen. Antag derfor, at det modtagne heltal var 33253325/100 = 333325 % 100 = 25Denne kode kompileres som 3380 bytes og kan derfor kun bruges med en attiny85, ikke med en 45

Trin 3: Mini -vejrstation med Attiny85/45: displayet

Mini vejrstation med Attiny85/45: Displayet
Mini vejrstation med Attiny85/45: Displayet
Mini vejrstation med Attiny85/45: Displayet
Mini vejrstation med Attiny85/45: Displayet

For displayet er det bedst, at jeg henviser til min instruerbare på et to -tråds display. Kort sagt bruger en almindelig 16x2 -skærm en shiftregister, så den kan fungere med to digitale ben. Selvfølgelig, hvis du foretrækker at bruge et I2C -klart display, det vil sige også muligt, men så skal du implementere en I2C -protokol på Attiny. Tinywire -protokollen kan gøre det. Selvom nogle kilder siger, at det forventer et 1 Mhz -ur, havde jeg ingen problemer (i et andet projekt) med at bruge det på 8MhzAltid gider jeg bare ikke her og brugte et skiftregister.

Trin 4: Mini -vejrstation med Attiny85/45: Muligheder/konklusioner

Mini vejrstation med Attiny85/45: Muligheder/konklusioner
Mini vejrstation med Attiny85/45: Muligheder/konklusioner
Mini vejrstation med Attiny85/45: Muligheder/konklusioner
Mini vejrstation med Attiny85/45: Muligheder/konklusioner
Mini vejrstation med Attiny85/45: Muligheder/konklusioner
Mini vejrstation med Attiny85/45: Muligheder/konklusioner

Som sagt, jeg gjorde dette instruerbart for at vise, at man kan lave en mini -vejrstation med to attiny85'er (selv med en attiny85+ 1 attiny45). Den sender kun fugtighed og temperatur ved hjælp af en DHT11. Attiny har dog 5 digitale stifter til brug, 6 selv med en vis snyd. Derfor er det muligt at sende data fra flere sensorer. I mit projekt- som det ses på billederne på stripboard og på et professionelt printkort (OSHPark)- sender/modtager jeg data fra en DHT11, fra en LDR og fra en PIR, alt ved hjælp to attiny85's Begrænsningen i at bruge en attiny85 som modtager er dog præsentationen af dataene i en prangende stil. Da hukommelsen er begrænset: Tekster som 'temperatur, luftfugtighed, lysniveau, emnet nærmer sig' vil fylde værdifuld hukommelsesplads temmelig hurtigt. Ikke desto mindre er der ingen grund til at bruge to Arduino'er bare til at sende/modtage temperatur og luftfugtighed. Derudover er det muligt at få senderen til at sove og kun få den til at vågne for at sende data sige hvert 10. minut og dermed fodre den fra en knapcelle. Naturligvis kan der ikke kun sendes temperatur- eller fugtighedsdata, men man kan få en række små sendere til at sende jordfugtighedsmålinger også, eller tilføj et vindmåler eller en regnmåler

Trin 5: Mini Weather Station: Antennen

Mini Weather Station: Antennen
Mini Weather Station: Antennen

Antennen er en vigtig del af enhver 433Mhz opsætning. Jeg har eksperimenteret med standard 17,2 cm 'stang' -antenne og haft en kort flirt med en spoleantenne, Det der syntes at fungere bedst er en spoleladet antenne, der er let at lave. Designet er fra Ben Schueler og blev tilsyneladende offentliggjort i magasinet 'Elektor'. En PDF med beskrivelsen af denne 'luftkølet 433 MHz antenne' er let at følge. (Link forsvandt, tjek her)

Trin 6: Tilføjelse af en BMP180

Tilføjelse af en BMP180
Tilføjelse af en BMP180

Vil du tilføje barometrisk trykføler som BMP180? tjek min anden instruerbar om det.

Anbefalede: