Мазмуну:

Attiny85 менен мини -метеостанциясы: 6 кадам (сүрөттөр менен)
Attiny85 менен мини -метеостанциясы: 6 кадам (сүрөттөр менен)

Video: Attiny85 менен мини -метеостанциясы: 6 кадам (сүрөттөр менен)

Video: Attiny85 менен мини -метеостанциясы: 6 кадам (сүрөттөр менен)
Video: Как сделать ловушку для пальцев из бумаги [Легко и просто] 2024, Ноябрь
Anonim
Attiny85 менен мини аба ырайы станциясы
Attiny85 менен мини аба ырайы станциясы
Attiny85 менен мини аба ырайы станциясы
Attiny85 менен мини аба ырайы станциясы
Attiny85 менен мини аба ырайы станциясы
Attiny85 менен мини аба ырайы станциясы

Жакында көрсөтмө берген Indigod0g, эки Arduino колдонуп, абдан жакшы иштеген мини -метеостанцияны сүрөттөгөн. Балким, ар ким нымдуулукту жана температуранын көрсөткүчтөрүн алуу үчүн 2 Arduinosту курмандыкка чалгысы келбеши мүмкүн жана мен муну эки Attiny85 менен окшош функцияны аткаруу мүмкүн экенин айттым. Менимче, сүйлөшүү оңой, андыктан акчамды оозума салганга жакшы.

Чынында, эгер мен мурунку эки көрсөтмөнү бириктирсем, мен мындай деп жазгам:

2-Wire LCD интерфейси Arduino же Attiny and Attiny85 (Arduino IDE 1.06) ортосунда маалыматтарды кабыл алуу жана жөнөтүү, анда иштин көбү бүткөн. Болгону программаны бир аз ыңгайлаштыруу керек.

Мен I2C ЖКнын ордуна сменалык реестр менен эки зымдуу LCD чечимди тандадым, анткени Attinyде сменалык реестр I2C автобусуна караганда ишке ашыруу оңой. Бирок, эгер сиз, мисалы, BMP180 же BMP085 басым сенсорун окууну кааласаңыз, анда I2C керек, андыктан I2C LCDди да колдонсоңуз болот. TinyWireM - Attinyдеги I2C үчүн жакшы китепкана (бирок бул кошумча орунду талап кылат).

BOM өткөргүч: DHT11 Attiny85 10 к каршылыгы 433MHz өткөргүч модулу

Алуучу Attiny85 10k каршылыгы 433 MHz кабыл алуучу модуль

Дисплей 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 // китепканалар #кошуу // Роб Тиллаардан #кошуу DHT11; #define DHT11PIN 4 #dexine TX_PIN 0 // өткөргүңүз туташкан пин // өзгөрмөлөр калкып h = 0; float 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.temperature; // Билем, мен бул жерде 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 менен Mini Weather Station: Алуучу

Attiny85 менен мини аба ырайы станциясы: алуучу
Attiny85 менен мини аба ырайы станциясы: алуучу

Кайра Attiny85 негизги конфигурацияда 10 к каршылыгы менен бийикке тартылган Reset пини менен колдонулат. Алуучу модулу санарип пин 1ге (чипте пин 6) тиркелет. ЖК антенна катары 17.2 см зымды тиркеп, 0 жана эки сандык казыктарга тиркелет. Код төмөнкүчө:

#кошуу

#include 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.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Код өтө жөнөкөй: берилген бүтүн сан "m" өзгөрмөсүндө кабыл алынат жана сакталат. Бул нымдуулукту берүү үчүн 100гө бөлүнөт жана 100дүн модулу температураны берет. Демек, алынган бүтүн сан 33253325/100 = 333325 % 100 болгон дейли = 25Бул код 3380 байтты түзөт, ошондуктан 45 менен эмес, attiny85 менен гана колдонсо болот

3 -кадам: Attiny85/45 менен Mini Weather Station: Дисплей

Mini Weather Station With Attiny85/45: Дисплей
Mini Weather Station With Attiny85/45: Дисплей
Mini Weather Station With Attiny85/45: Дисплей
Mini Weather Station With Attiny85/45: Дисплей

Дисплей үчүн мен эки зымдуу дисплейдеги көрсөтмөмө кайрылганым жакшы. Кыскача айтканда, жалпы 16x2 дисплей эки цифралуу пин менен иштей алышы үчүн shiftregister колдонот. мүмкүн, бирок андан кийин Аттини боюнча I2C протоколун ишке ашыруу керек. Tinywire протоколу муну кыла алат. Кээ бир булактар 1 МГц саат күтөт деп айтышса да, менде 8MhzAnywayде колдонуу үчүн эч кандай кыйынчылык болгон жок (башка долбоордо), мен бул жерде убара болгон жокмун жана нөөмөт реестрин колдондум.

4 -кадам: Attiny85/45 менен Mini Weather Station: Мүмкүнчүлүктөр/Жыйынтыктар

Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар
Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар
Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар
Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар
Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар
Mini Weather Station With Attiny85/45: Мүмкүнчүлүктөр/Жыйынтыктар

Жогоруда айтылгандай, мен мини -аба бекетин эки аттиний 85 менен жасай аларын көрсөтүш үчүн кылдым (ал тургай бир attiny85+ 1 attiny45 менен). Бул DHT11ди колдонуп, нымдуулукту жана температураны гана жөнөтөт., 6 ал тургай кээ бир амалкөйлүк менен. Ошондуктан дагы сенсорлордон маалыматтарды жөнөтүүгө болот. Менин долбоорумда- стриптиздеги жана профессионалдык ПХБдагы сүрөттөрдө көрүнгөндөй- мен DHT11ден, LDRден жана PIRден маалыматтарды колдонуп/алам. Attiny85ти кабыл алуучу катары колдонуунун чектөөсү - бул маалыматтарды жаркыраган стильде көрсөтүү. Эстутум чектелүү болгондуктан: "Температура, нымдуулук, жарыктын деңгээли, темага жакындап келүү" сыяктуу тексттер баалуу эстутум мейкиндигин бат эле толтурат. Ошентсе да, температураны жана нымдуулукту жөнөтүү/алуу үчүн эки Arduino колдонууга эч кандай себеп жок. Ар бир 10 мүнөттө маалыматтарды жөнөтүү үчүн уктатуу үчүн гана ойготуу жана аны баскычтын клеткасынан берүү. Ачык айтканда, температура же нымдуулук жөнүндөгү маалыматтар гана жөнөтүлбөстөн, бирөө жөнөтүүчү кичинекей өткөргүчтөргө ээ болушу мүмкүн. топурактын нымдуулугунун көрсөткүчтөрүн, же анемометрди же жамгыр өлчөгүчтү кошуңуз

5 -кадам: Mini Weather Station: Антенна

Мини аба ырайы станциясы: Антенна
Мини аба ырайы станциясы: Антенна

Антенна 433Mhz орнотуунун маанилүү бөлүгү болуп саналат. Мен стандарттуу 17.2 см 'rod' антеннасы менен эксперимент жүргүздүм жана антеннасы бар кыска флиртке ээ болдум. Дизайн Бен Шюелерден келген жана, кыязы, 'Электор' журналына жарыяланган. Бул "Аба муздатуучу 433 МГц антенна" сүрөттөлүшү бар PDFти ээрчүү оңой. (Шилтеме жоголду, бул жерден текшериңиз)

6 -кадам: BMP180 кошуу

BMP180 кошуу
BMP180 кошуу

BMP180 сыяктуу барометрдик басым сенсорун кошкуңуз келеби? менин башка көрсөтмөмдү текшериңиз.

Сунушталууда: