Innholdsfortegnelse:

Mini værstasjon med Attiny85: 6 trinn (med bilder)
Mini værstasjon med Attiny85: 6 trinn (med bilder)

Video: Mini værstasjon med Attiny85: 6 trinn (med bilder)

Video: Mini værstasjon med Attiny85: 6 trinn (med bilder)
Video: Tech Stuff: Værstasjon med NodeMCU 2024, Juli
Anonim
Mini værstasjon med Attiny85
Mini værstasjon med Attiny85
Mini værstasjon med Attiny85
Mini værstasjon med Attiny85
Mini værstasjon med Attiny85
Mini værstasjon med Attiny85

I en nylig instruerbar Indigod0g beskrev en mini værstasjon som fungerer ganske bra, ved hjelp av to Arduinos. Kanskje ikke alle ønsker å ofre 2 Arduinos for å få fuktighets- og temperaturavlesninger, og jeg kommenterte at det burde være mulig å gjøre en lignende funksjon med to Attiny85 -er. Jeg antar at det er enkelt å snakke, så jeg må sette pengene mine der munnen min er.

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

2-tråds LCD-grensesnitt for Arduino eller Attiny og Motta og sende data mellom Attiny85 (Arduino IDE 1.06), da er det meste av arbeidet allerede utført. Trenger bare å tilpasse programvaren litt.

Jeg valgte en to -tråds lcd -løsning med et skiftregister, i stedet for en I2C LCD fordi skiftet på Attiny er lettere å implementere enn I2C -bussen. Men … hvis du for eksempel vil lese en BMP180 eller BMP085 trykksensor, trenger du I2C for det uansett, så du kan like godt bruke en I2C LCD da også. TinyWireM er et godt bibliotek for I2C på en Attiny (men det krever ekstra plass).

BOM Senderen: DHT11 Attiny85 10 k motstand 433MHz sendermodul

Mottakeren Attiny85 10k motstand 433 MHz mottakermodul

Displayet 74LS164 skiftregister 1N4148 diode 2x1k motstand 1x1k variabel motstand en LCD -skjerm 2x16

Trinn 1: Mini værstasjon med Attiny85: senderen

Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen
Mini værstasjon med Attiny85: senderen

Senderen er en helt grunnleggende konfigurasjon av Attiny85 med en opptrekkmotstand på tilbakestillingslinjen. En sendermodul er festet til digital pin '0' og DHT11 -datapinnen festes til digital pin 4. Fest en ledning på 17,2 cm som antenne (for en mye bedre antenne, se trinn 5). Programvaren er som følger:

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

// DHT11 = D4 pin 3 // biblioteker #include // From Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin hvor senderen er tilkoblet // variabler float h = 0; flyte t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; ugyldig oppsett () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. fuktighet; t = DHT11.temperatur; // Jeg vet, jeg bruker 3 heltallsvariabler her // hvor jeg kan bruke 1 // men det er bare så det er lettere å følge transmit_h = 100* (int) h; send_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); forsinkelse (500); }

Programvaren bruker Manchester -kode for å sende dataene. Den leser DHT11 og lagrer temperatur og fuktighet i 2 separate flyter. Siden Manchester-koden ikke sender flyter, men et heltall, har jeg flere alternativer: 1- del flottørene i to heltall hver og send disse2- send hver flottør som et heltall3- send de to flyterne som ett heltall Med alternativ 1 må jeg kombinere heltallene flyter igjen i mottakeren, og jeg må identifisere hvilket heltall som er hva, noe som gjør koden langviket Med alternativ 2 må jeg fortsatt identifisere hvilket heltall som er for fuktighet og hvilket for temperatur. Jeg kan ikke gå etter sekvens alene hvis ett heltall går tapt i overføringen, så jeg må sende en identifikator knyttet til heltallet. Med alternativ 3 kan jeg sende bare ett heltall. Dette gjør tydeligvis avlesningene litt mindre nøyaktige - innen 1 grad - og man kan ikke sende under null temperaturer, men det er bare en enkel kode, og det er måter å omgå det på. For nå er det omtrent prinsippet. Så det jeg gjør er å gjøre flyterne til heltall og jeg multipliserer fuktigheten med 100. Deretter legger jeg til temperaturen til den multipliserte fuktigheten. Gitt at fuktigheten aldri vil være 100% maks nummer jeg får er 9900. Gitt det faktum at temperaturen heller ikke vil være over 100 grader, vil maks antall være 99, derfor er det høyeste nummeret jeg sender 9999 og det er lett å skille på mottakersiden. Selvfølgelig beregningen min der jeg bruker 3 heltall er overkill, da det enkelt kan gjøres med 1 variabel. Jeg ville bare gjøre koden lettere å følge. Koden kompileres nå som:

Binær skissestørrelse: 2, 836 byte (av et maksimum på 8, 192 byte) slik at det passer inn i en Attiny 45 eller 85 MERK dht.h -biblioteket jeg bruker er det fra Rob Tillaart. Det biblioteket er også egnet for en DHT22. Jeg bruker versjon 1.08. Attiny85 kan imidlertid ha problemer med å lese en DHT22 med lavere versjoner av biblioteket. Det har blitt bekreftet for meg at 1.08 og 1.14 - selv om de jobber med en vanlig Arduino - har problemer med å lese en DHT22 på Attiny85. Hvis du vil bruke en DHT22 på Attiny85, kan du bruke 1.20 -versjonen av dette biblioteket. Alt dette har med timing å gjøre. 1.20 -versjonen av biblioteket har en raskere lesing. (Takk for den brukeropplevelsen Jeroen)

Trinn 2: Mini værstasjon med Attiny85: mottakeren

Mini værstasjon med Attiny85: mottakeren
Mini værstasjon med Attiny85: mottakeren

Igjen brukes Attiny85 i en grunnleggende konfigurasjon med tilbakestillingspinnen trukket høyt med en 10 k motstand. Mottakermodulen er festet til digital pin 1 (pin 6 på brikken). LCD -skjermen er festet til digitale pinner 0 og to. Fest en ledning på 17,2 cm som antenne. Koden er som følger:

#inkludere

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fysisk pin 6 ugyldig oppsett () {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 ("Fuktig:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Koden er ganske enkel: det overførte heltallet mottas og lagres i variabelen 'm'. Det divideres med 100 for å gi fuktigheten og moduloen på 100 gir temperaturen. Anta at det mottatte heltallet var 33253325/100 = 333325 % 100 = 25Denne koden kompileres som 3380 byte og kan derfor bare brukes med en attiny85, ikke med en 45

Trinn 3: Mini værstasjon med Attiny85/45: displayet

Mini værstasjon med Attiny85/45: displayet
Mini værstasjon med Attiny85/45: displayet
Mini værstasjon med Attiny85/45: displayet
Mini værstasjon med Attiny85/45: displayet

For displayet er det best at jeg refererer til instruksjonene mine på en totrådsskjerm. Kort sagt, en vanlig 16x2 skjerm bruker en shiftregister slik at den kan fungere med to digitale pinner. Selvfølgelig hvis du foretrekker å bruke en I2C -klar skjerm, det vil si mulig også, men da må du implementere en I2C -protokoll på Attiny. Tinywire -protokollen kan gjøre det. Selv om noen kilder sier at det forventer en 1 Mhz -klokke, hadde jeg ingen problemer (i et annet prosjekt) med å bruke den på 8Mhz. Uansett gadd jeg ikke her og brukte et skiftregister.

Trinn 4: Mini værstasjon med Attiny85/45: muligheter/konklusjoner

Mini værstasjon med Attiny85/45: muligheter/konklusjoner
Mini værstasjon med Attiny85/45: muligheter/konklusjoner
Mini værstasjon med Attiny85/45: muligheter/konklusjoner
Mini værstasjon med Attiny85/45: muligheter/konklusjoner
Mini værstasjon med Attiny85/45: muligheter/konklusjoner
Mini værstasjon med Attiny85/45: muligheter/konklusjoner

Som sagt, jeg gjorde dette instruerbart for å vise at man kan lage en miniværstasjon med to attiny85 (selv med en attiny85+ 1 attiny45). Den sender bare fuktighet og temperatur ved hjelp av en DHT11. Attiny har imidlertid 5 digitale pinner å bruke, 6 selv med litt lureri. Derfor er det mulig å sende data fra flere sensorer. I prosjektet mitt- som vist på bildene på stripboard og på en profesjonell PCB (OSHPark)- sender/mottar jeg data fra en DHT11, fra en LDR og fra en PIR, alt bruker to attiny85's Begrensningen i å bruke en attiny85 som mottaker er imidlertid presentasjonen av dataene i en prangende stil. Siden minnet er begrenset: Tekster som "Temperatur, fuktighet, lysnivå, motivet nærmer seg" vil fylle verdifull minneplass ganske raskt. Likevel er det ingen grunn til å bruke to Arduino bare for å sende/motta temperatur og fuktighet. Dessuten er det mulig for å få senderen til å sove og bare få den til å våkne for å sende data si hvert 10. minutt og dermed mate den fra en knappcelle. Tydeligvis kan ikke bare temperatur- eller fuktighetsdata sendes, men man kan også sende en rekke små sendere jordfuktighetsavlesninger også, eller legg til et vindmåler eller en regnmåler

Trinn 5: Mini værstasjon: Antennen

Mini værstasjon: antennen
Mini værstasjon: antennen

Antennen er en viktig del av ethvert 433Mhz -oppsett. Jeg har eksperimentert med standard 17,2 cm 'stang' -antenne og hatt en kort flørt med en spoleantenne. Det som så ut til å fungere best er en spoleladet antenne som er lett å lage. Designet er fra Ben Schueler og ble tilsynelatende publisert i magasinet Elektor. En PDF med beskrivelsen av denne 'luftkjølte 433 MHz -antennen' er lett å følge. (Lenken forsvant, sjekk her)

Trinn 6: Legge til en BMP180

Legger til en BMP180
Legger til en BMP180

Vil du legge til barometrisk trykksensor som BMP180? sjekk min andre instruerbare om det.

Anbefalt: