Агуулгын хүснэгт:

Attiny85 мини цаг уурын станц85: 6 алхам (зурагтай)
Attiny85 мини цаг уурын станц85: 6 алхам (зурагтай)

Видео: Attiny85 мини цаг уурын станц85: 6 алхам (зурагтай)

Видео: Attiny85 мини цаг уурын станц85: 6 алхам (зурагтай)
Видео: Guessing app's passcode using ATTINY85 Arduino board #shorts 2024, Долдугаар сарын
Anonim
Attiny85 бүхий мини цаг уурын станц
Attiny85 бүхий мини цаг уурын станц
Attiny85 бүхий мини цаг уурын станц
Attiny85 бүхий мини цаг уурын станц
Attiny85 бүхий мини цаг уурын станц
Attiny85 бүхий мини цаг уурын станц

Саяхан зааварласан Indigod0g нь хоёр Arduino ашиглан маш сайн ажилладаг мини цаг уурын станцын талаар тайлбарлав. Чийглэг, температурын заалтыг авахын тулд хүн бүр 2 Arduino -ийг золиослохыг хүсдэггүй байж магадгүй, ижил төстэй функцийг хоёр Attiny85 -тэй хийх боломжтой гэж би хэлсэн. Ярилцах нь амархан гэж би бодож байгаа болохоор мөнгөө амандаа хийчихсэн нь дээр.

Үнэн хэрэгтээ хэрэв би өмнөх хоёр зааварчилгааг нэгтгэвэл би дараахь зүйлийг бичсэн болно.

Arduino эсвэл Attiny-д зориулсан 2 утастай LCD интерфейс, Attiny85 (Arduino IDE 1.06) хооронд өгөгдөл хүлээн авах, илгээх, дараа нь ихэнх ажлыг аль хэдийн хийсэн болно. Зөвхөн програм хангамжийг бага зэрэг өөрчлөх хэрэгтэй.

Би I2C LCD -ээс илүү ээлжийн бүртгэлтэй хоёр утастай lcd шийдлийг сонгосон, учир нь Attiny дээр ээлжийн бүртгэлийг хийх нь I2C автобуснаас илүү хялбар байдаг. Гэсэн хэдий ч хэрэв та жишээ нь BMP180 эсвэл BMP085 даралтын мэдрэгчийг уншихыг хүсвэл танд I2C хэрэгтэй, тиймээс та I2C LCD ашиглаж болно. TinyWireM бол Attiny дээрх I2C -ийн сайн номын сан юм (гэхдээ энэ нь нэмэлт зай шаарддаг).

BOM дамжуулагч: DHT11 Attiny85 10 к резистор 433MHz дамжуулагч модуль

Хүлээн авагч Attiny85 10k эсэргүүцэл 433 МГц хүлээн авагч модуль

Дэлгэц 74LS164 ээлжийн бүртгэл 1N4148 диод 2x1k резистор 1x1k хувьсах эсэргүүцэл LCD дэлгэц 2x16

Алхам 1: Attiny85 бүхий мини цаг уурын станц: дамжуулагч

Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч
Attiny85 бүхий мини цаг уурын станц: дамжуулагч

Дамжуулах шугам дээр асаах эсэргүүцэл бүхий Attiny85 -ийн маш энгийн тохиргоо юм. Дамжуулагч модулийг '0' дижитал зүү дээр хавсаргасан бөгөөд DHT11 өгөгдлийн зүү нь дижитал зүү 4. 17.2 см -ийн утсыг антен болгон залгаарай. (илүү сайн антенны хувьд 5 -р алхамыг үзнэ үү). Програм хангамж дараах байдалтай байна.

// Attiny дээр ажиллах болно // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // library #include // Rob Tillaart -аас #include dht DHT11; #define DHT11PIN 4 #dexine TX_PIN 0 // таны дамжуулагч холбогдсон зүү // хувьсагчид float h = 0; хөвөх 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. чийгшил; t = DHT11. температур; // Би энд 3 бүхэл тоон хувьсагч ашиглаж байгааг мэдэж байна // энд 1 -ийг ашиглаж болох юм // гэхдээ энэ нь transmit_h = 100* (int) h -ийг дагахад илүү хялбар байдаг. transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); саатал (500); }

Програм хангамж нь өгөгдлийг илгээхдээ Манчестерийн кодыг ашигладаг. Энэ нь DHT11 -ийг уншиж, температур, чийгшлийг 2 тусдаа хөвөгч хэсэгт хадгалдаг. Манчестерийн код нь хөвөгч илгээдэггүй, гэхдээ бүхэл тоо байдаг тул надад хэд хэдэн сонголт байна: 1- хөвөгчийг бүхэл тоонд хувааж, тэдгээрийг илгээх2- хөвөгч бүрийг бүхэл тоогоор илгээх3- хоёр хөвөгчийг нэг бүхэл тоо болгон илгээх 1-р сонголтоор би нэгтгэх хэрэгтэй. Бүхэл тоонууд хүлээн авагч дээр дахин хөвж, би ямар бүхэл тоо болохыг тодорхойлох ёстой бөгөөд кодыг урт салхинд хийлээ 2 -р сонголтоор би аль бүхэл тоо нь чийгшил, аль нь температурыг тодорхойлох шаардлагатай хэвээр байна. Дамжуулах явцад нэг бүхэл тоо алдагдсан тохиолдолд би дарааллаар явж чадахгүй, тиймээс би бүхэл тоонд хавсаргасан таних тэмдэг илгээх шаардлагатай болно. 3 -р сонголтоор би ганцхан бүхэл тоог илгээж болно. Мэдээжийн хэрэг, энэ нь уншилтыг арай нарийвчлалтай болгодог - 1 градусын дотор, тэгээс доош температурыг илгээх боломжгүй, гэхдээ энэ бол энгийн код бөгөөд үүнээс гарах арга замууд байдаг. Одоогийн байдлаар энэ бол яг л зарчим юм. Тиймээс би юу хийж байна вэ гэвэл би хөвөгчийг бүхэл тоо болгож, чийгшлийг 100 -аар үржүүлж, дараа нь чийгийг 100 хувь нэмнэ. Миний авах хамгийн дээд тоо бол 9900. Температур нь 100 градусаас хэтрэхгүй байх тул хамгийн их тоо нь 99 байх тул миний илгээсэн хамгийн өндөр тоо нь 9999 бөгөөд үүнийг хүлээн авагчийн талд салгахад хялбар байдаг. Миний 3 бүхэл тоонуудыг ашигладаг миний тооцоо хэтэрхий их байна, учир нь үүнийг 1 хувьсагчаар хялбархан хийж болно. Би зүгээр л кодыг дагахад хялбар болгохыг хүссэн юм.

Хоёртын ноорогны хэмжээ: 2, 836 байт (хамгийн ихдээ 8, 192 байт), ингэснээр миний ашиглаж буй dht.h номын сан Attiny 45 эсвэл 85NOTE -д багтах болно. Энэ номын сан нь DHT22 -д тохиромжтой. Би 1.08 хувилбарыг ашиглаж байна. Гэсэн хэдий ч Attiny85 нь номын сангийн доод хувилбартай DHT22 уншихад асуудалтай байж магадгүй юм. 1.08 ба 1.14 нь ердийн Arduino дээр ажилладаг боловч Attiny85 дээр DHT22 уншихад бэрхшээлтэй байдаг нь надад батлагдсан. Хэрэв та Attiny85 дээр DHT22 ашиглахыг хүсвэл энэ номын сангийн 1.20 хувилбарыг ашиглаарай. Энэ бүхэн цаг хугацаатай холбоотой. Номын сангийн 1.20 хувилбар нь илүү хурдан уншдаг. (Jeroen хэрэглэгчийн туршлагад баярлалаа)

Алхам 2: Attiny85 бүхий мини цаг уурын станц: хүлээн авагч

Attiny85 бүхий мини цаг уурын станц: хүлээн авагч
Attiny85 бүхий мини цаг уурын станц: хүлээн авагч

Дахин Attiny85 нь үндсэн тохиргоонд ашиглагддаг бөгөөд Reset зүү нь 10 к резистороор өндөр татагдсан байдаг. Хүлээн авагчийн модулийг дижитал 1 -р зүү дээр бэхэлсэн (чип дээрх 6 -р зүү). LCD нь 0 ба 2 дижитал тээглүүрт залгагдсан бөгөөд антенны хувьд 17.2 см хэмжээтэй утсыг холбоно.

#оруулах

#LiquidCrystal_SR lcd (0, 2, TWO_WIRE) оруулах; #define RX_PIN 1 // = физик зүү 6 хүчингүй тохиргоо () {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 ("Чийглэг:"); lcd хэвлэх (м/100); lcd.setCursor (0, 1); lcd.print ("Темп"); lcd.хэвлэх (m%100); }}

Код нь маш энгийн: дамжуулсан бүхэл тоог хүлээн авч 'm' хувьсагчид хадгална. Үүнийг 100 -д хувааж, чийгшил, 100 -ийн модуль нь температурыг өгдөг. Тиймээс хүлээн авсан бүхэл тоо нь 33253325/100 = 333325 % 100 байсан гэж үзье. = 25Энэ кодыг 3380 байт болгон хөрвүүлдэг тул 45 -тай биш зөвхөн attiny85 -т ашиглах боломжтой.

Алхам 3: Attiny85/45 бүхий мини цаг уурын станц: Дэлгэц

Attiny85/45 бүхий мини цаг уурын станц: Дэлгэц
Attiny85/45 бүхий мини цаг уурын станц: Дэлгэц
Attiny85/45 бүхий мини цаг уурын станц: Дэлгэц
Attiny85/45 бүхий мини цаг уурын станц: Дэлгэц

Дэлгэцийн хувьд хоёр утастай дэлгэц дээр зааварчилгаа өгөх нь зүйтэй юм. Товчхондоо, 16х2 хэмжээтэй ердийн дэлгэц нь ээлжийн бүртгэлийг ашигладаг тул хоёр дижитал тээглүүртэй ажиллах боломжтой. бас боломжтой, гэхдээ дараа нь та Attiny дээр I2C протоколыг хэрэгжүүлэх хэрэгтэй. Tinywire протокол үүнийг хийж чадна. Зарим эх сурвалжууд 1 МГц давтамжтай цагийг хүлээж байгаа гэж хэлж байгаа ч 8Mhz дээр ашиглахад надад ямар ч асуудал байгаагүй (өөр төсөлд) Би зүгээр л санаа зовсонгүй, ээлжийн бүртгэл ашигласан.

Алхам 4: Attiny85/45 бүхий мини цаг уурын станц: Боломж/Дүгнэлт

Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт
Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт
Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт
Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт
Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт
Attiny85/45 мини цаг уурын станц: Боломж/Дүгнэлт

Өмнө дурьдсанчлан, би хоёр attiny85 -тай цаг агаарын мини станц хийх боломжтой гэдгийг харуулахын тулд үүнийг зааж өгсөн юм., 6 зарим нэг заль мэх хийсэн ч гэсэн. Тиймээс, илүү олон мэдрэгчээс өгөгдөл илгээх боломжтой. Миний төсөлд, самбар дээрх зургууд болон мэргэжлийн ПХБ (OSHPark) дээрх зургуудаас харж болно. Attiny85 -ийг хүлээн авагч болгон ашиглах хязгаарлалт нь өгөгдлийг гялалзсан хэв маягаар танилцуулах явдал юм. Санах ой хязгаарлагдмал тул: "Температур, чийгшил, гэрлийн түвшин, сэдэв ойртож байна" гэх мэт текстүүд санах ойн үнэ цэнэтэй орон зайг маш хурдан дүүргэх болно. Гэсэн хэдий ч хоёр Arduino -г температур, чийгшил илгээх/хүлээн авахад ашиглах ямар ч шалтгаан байхгүй. Мэдээллийг 10 минут тутамд илгээж, товчлуурын нүднээс оруулахын тулд дамжуулагчийг унтуулж, зөвхөн сэрээх хэрэгтэй. Мэдээж зөвхөн температур, чийгшлийн өгөгдлийг илгээж болох төдийгүй жижиг дамжуулагч дамжуулах боломжтой. хөрсний чийгийн уншилт эсвэл анемометр эсвэл борооны тоолуур нэмнэ үү

Алхам 5: Мини цаг уурын станц: Антен

Мини цаг уурын станц: Антен
Мини цаг уурын станц: Антен

Антен нь 433 МГц -ийн тохиргооны чухал хэсэг юм. Би стандарт 17.2 см -ийн "саваа" антенныг туршиж үзсэн бөгөөд ороомог антентай богино сээтэгнүүртэй байсан. Хамгийн сайн ажилладаг зүйл бол ороомогтой антен юм. Энэхүү загварыг Бен Шюелерээс авсан бөгөөд 'Elektor' сэтгүүлд хэвлэгдсэн бололтой. Энэхүү "Агаараар хөргөсөн 433 МГц антен" гэсэн тайлбартай PDF файлыг дагаж мөрдөхөд хялбар байдаг. (Холбоос алга болсон, эндээс үзнэ үү)

Алхам 6: BMP180 нэмэх

BMP180 нэмж байна
BMP180 нэмж байна

BMP180 шиг барометрийн даралт мэдрэгчийг нэмэхийг хүсч байна уу? Энэ талаар миний зааж өгсөн бусад зүйлийг шалгаарай.

Зөвлөмж болгож буй: