Satura rādītājs:

Mini laika stacija ar Attiny85: 6 soļi (ar attēliem)
Mini laika stacija ar Attiny85: 6 soļi (ar attēliem)

Video: Mini laika stacija ar Attiny85: 6 soļi (ar attēliem)

Video: Mini laika stacija ar Attiny85: 6 soļi (ar attēliem)
Video: Акула-убийца. Кровавая резня в Нью Джерси 2024, Jūlijs
Anonim
Mini laika stacija ar Attiny85
Mini laika stacija ar Attiny85
Mini laika stacija ar Attiny85
Mini laika stacija ar Attiny85
Mini laika stacija ar Attiny85
Mini laika stacija ar Attiny85

Nesenā instrukcijā Indigod0g aprakstīja mini laika staciju, kas darbojas diezgan labi, izmantojot divus Arduinos. Varbūt ne visi vēlas upurēt 2 Arduinos, lai iegūtu mitruma un temperatūras rādījumus, un es komentēju, ka vajadzētu būt iespējai veikt līdzīgu funkciju ar diviem Attiny85. Es domāju, ka runāt ir viegli, tāpēc es labāk lieku savu naudu tur, kur ir mana mute.

Patiesībā, ja es apvienoju divas iepriekšējās pamācības, kuras es uzrakstīju:

2 vadu LCD interfeiss Arduino vai Attiny un datu saņemšana un nosūtīšana starp Attiny85 (Arduino IDE 1.06), tad lielākā daļa darba jau ir paveikta. Atliek tikai nedaudz pielāgot programmatūru.

Es izvēlējos divu vadu LCD risinājumu ar maiņu reģistru, nevis I2C LCD, jo Attiny maiņu reģistru ir vieglāk ieviest nekā I2C kopni. Tomēr … ja jūs, piemēram, vēlaties lasīt BMP180 vai BMP085 spiediena sensoru, jums jebkurā gadījumā ir nepieciešams I2C, lai jūs varētu izmantot arī I2C LCD. TinyWireM ir laba I2C bibliotēka Attiny (taču tai ir nepieciešama papildu vieta).

BOM Raidītājs: DHT11 Attiny85 10 k rezistors 433MHz raidītāja modulis

Uztvērēja Attiny85 10k rezistora 433 MHz uztvērēja modulis

Displejs 74LS164 maiņu reģistrs 1N4148 diode 2x1k rezistors 1x1k mainīgais rezistors LCD displejs 2x16

1. solis: mini laika stacija ar Attiny85: raidītājs

Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs
Mini laika stacija ar Attiny85: raidītājs

Raidītājs ir ļoti vienkārša Attiny85 konfigurācija ar uzvilkšanas rezistoru atiestatīšanas līnijā. Raidītāja modulis ir pievienots digitālajai tapai "0", un DHT11 datu tapa tiek pievienota 4. digitālajai tapai. Pievienojiet 17,2 cm vadu kā antenu (lai iegūtu labāku antenu, skatiet 5. soli). Programmatūra ir šāda:

// derēs Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // bibliotēkas #include // No Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin, kur ir pieslēgts jūsu raidītājs // mainīgie float h = 0; pludiņš t = 0; int pārraide_t = 0; int pārraide_h = 0; int pārsūtīšanas_dati = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. mitrums; t = DHT11. temperatūra; // Es zinu, es šeit izmantoju 3 veselus mainīgos // kur es varētu izmantot 1 //, bet tas ir tikai tāpēc, lai būtu vieglāk sekot pārraidei_h = 100* (int) h; pārraidīt_t = (int) t; pārraides_dati = pārsūtīt_h+pārsūtīt_t; man.transmit (pārsūtīt_datus); kavēšanās (500); }

Programmatūra datu nosūtīšanai izmanto Mančestras kodu. Tas nolasa DHT11 un saglabā temperatūru un mitrumu 2 atsevišķos pludiņos. Tā kā Mančestras kods nesūta pludiņus, bet gan veselu skaitli, man ir vairākas iespējas: 1- sadalīt pludiņus divos veselos skaitļos un nosūtīt tos 2- nosūtīt katru pludiņu kā veselu skaitli 3- nosūtīt abus pludiņus kā veselu skaitli Ar 1. iespēju man ir jāapvieno veseli skaitļi uztvērējā atkal peld, un man ir jānosaka, kurš vesels skaitlis ir kas, padarot kodu garu. Ar 2. iespēju man joprojām ir jānosaka, kurš vesels skaitlis ir paredzēts mitrumam un kurš temperatūrai. Es nevaru iet tikai ar secību, ja viens vesels skaitlis tiek pazaudēts pārsūtīšanā, tāpēc man vajadzētu nosūtīt veselam skaitlim pievienotu identifikatoru. Izmantojot 3. opciju, es varu nosūtīt tikai vienu veselu skaitli. Acīmredzot tas padara rādījumus nedaudz mazāk precīzus - 1 grādu robežās - un nevar nosūtīt temperatūru zem nulles, taču tas ir tikai vienkāršs kods, un ir veidi, kā to novērst. Pagaidām tas ir tikai par principu. Tātad, ko es daru, es pārvēršu pludiņus par veseliem skaitļiem un reizinu mitrumu ar 100. Tad es pievienoju temperatūru reizinātajam mitrumam. Ņemot vērā faktu, ka mitrums nekad nebūs 100% maksimālais skaitlis, ko es saņemšu, ir 9900. Ņemot vērā faktu, ka temperatūra arī nebūs augstāka par 100 grādiem, maksimālais skaitlis būs 99, tāpēc lielākais nosūtītā skaitlis ir 9999, un to ir viegli atdalīt uztvērēja pusē. Protams mans aprēķins, kurā es izmantoju 3 veselus skaitļus, ir pārmērīgs, jo to varētu viegli izdarīt ar 1 mainīgo. Es tikai vēlējos, lai kodam būtu vieglāk sekot. Kods tagad tiek apkopots šādi:

Binārās skices lielums: 2, 836 baiti (no 8, 192 baitiem), lai tas ietilptu Attiny 45 vai 85. Šī bibliotēka ir piemērota arī DHT22. Es izmantoju versiju 1.08. Tomēr Attiny85 var būt problēmas ar DHT22 lasīšanu ar zemākām bibliotēkas versijām. Man ir apstiprināts, ka 1.08 un 1.14 - lai gan strādā pie parastā Arduino - ir grūtības lasīt DHT22 Attiny85. Ja Attiny85 vēlaties izmantot DHT22, izmantojiet šīs bibliotēkas 1.20 versiju. Tas viss ir saistīts ar laiku. Bibliotēkas 1.20 versija ir ātrāk lasāma. (Paldies par šo lietotāja pieredzi Jeroen)

2. solis: neliela laika stacija ar Attiny85: uztvērējs

Mini laika stacija ar Attiny85: uztvērējs
Mini laika stacija ar Attiny85: uztvērējs

Atkal Attiny85 tiek izmantots pamata konfigurācijā ar atiestatīšanas tapu augstu ar 10 k rezistoru. Uztvērēja modulis ir pievienots 1. digitālajai tapai (mikroshēmas 6. tapa). LCD ir pievienots ciparu tapām 0 un 2. Pievienojiet 17,2 cm vadu kā antenu. Kods ir šāds:

#iekļaut

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fiziskā pin 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 ("Mitrs:"); LCD drukāšana (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Kods ir diezgan vienkāršs: pārsūtītais vesels skaitlis tiek saņemts un saglabāts mainīgajā “m”. Tas tiek dalīts ar 100, lai iegūtu mitrumu, un 100 modulis norāda temperatūru. Tātad, pieņemsim, ka saņemtais vesels skaitlis bija 33253325/100 = 333325 % 100 = 25 Šis kods tiek apkopots kā 3380 baiti, un tāpēc to var izmantot tikai ar attiny85, nevis ar 45

3. solis: neliela laika stacija ar Attiny85/45: displejs

Mini laika stacija ar Attiny85/45: displejs
Mini laika stacija ar Attiny85/45: displejs
Mini laika stacija ar Attiny85/45: displejs
Mini laika stacija ar Attiny85/45: displejs

Displejam vislabāk ir atsaukties uz manu pamācību divu vadu displejā. Īsāk sakot, parasts 16x2 displejs izmanto maiņu reģistru, lai tas varētu darboties ar divām digitālām tapām. Protams, ja vēlaties izmantot I2C gatavu displeju, tas ir, iespējams, bet tad jums ir jāievieš I2C protokols Attiny. Tinywire protokols to var izdarīt. Lai gan daži avoti saka, ka tas sagaida 1 Mhz pulksteni, man nebija problēmu (citā projektā) to izmantot 8Mhz. Jebkurā gadījumā es šeit vienkārši neuztraucos un izmantoju maiņu reģistru.

4. solis: mini laika stacija ar Attiny85/45: Iespējas/Secinājumi

Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi
Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi
Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi
Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi
Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi
Mini laika stacija ar Attiny85/45: Iespējas/Secinājumi

Kā jau minēts, es to darīju pamācāmu, lai parādītu, ka var izveidot mini laika staciju ar diviem attiny85 (pat ar vienu attiny85+ 1 attiny45). Tas nosūta tikai mitrumu un temperatūru, izmantojot DHT11. Tomēr Attiny ir 5 digitālās tapas, ko izmantot, 6 pat ar kādu viltību. Tāpēc ir iespējams nosūtīt datus no vairākiem sensoriem. Manā projektā- kā redzams attēlos uz sloksnes un profesionālā PCB (OSHPark)- es sūtu/saņemu datus no DHT11, no LDR un no PIR, izmantojot Attiny85 kā uztvērēja izmantošanas ierobežojums ir datu pasniegšana bezgaumīgā stilā. Tā kā atmiņa ir ierobežota: tādi teksti kā “Temperatūra, mitrums, gaismas līmenis, tuvojas objekts” diezgan ātri aizpildīs vērtīgo atmiņas vietu. Tomēr nav iemesla izmantot divus Arduino, lai tikai nosūtītu/saņemtu temperatūru un mitrumu. Turklāt ir iespējams lai raidītājs dotos gulēt un tikai pamostos, lai nosūtītu datus, sakot ik pēc 10 minūtēm, un tādējādi barotu tos no pogas šūnas. Acīmredzot var nosūtīt ne tikai datus par temperatūru vai mitrumu, bet var nosūtīt virkni mazu raidītāju augsnes mitruma rādījumus vai pievienojiet anemometru vai lietus mērītāju

5. solis: mini laika stacija: antena

Mini meteostacija: antena
Mini meteostacija: antena

Antena ir svarīga jebkura 433Mhz iestatīta sastāvdaļa. Esmu eksperimentējis ar standarta 17,2 cm “stieņa” antenu un īsi flirtēju ar spoles antenu. Vislabāk šķita, ka antena ir viegli uztaisāma. Dizains ir no Bena Šuelera un acīmredzot tika publicēts žurnālā “Elektor”. PDF ar šīs “gaisa dzesēšanas 433 MHz antenas” aprakstu ir viegli ievērot. (Saite pazuda, pārbaudiet šeit)

6. darbība: BMP180 pievienošana

BMP180 pievienošana
BMP180 pievienošana

Vai vēlaties pievienot barometriskā spiediena sensoru, piemēram, BMP180? pārbaudiet manu citu pamācību par to.

Ieteicams: