Мазмуну:

Ардуино UNO менен аба ырайы станциясы: 7 кадам
Ардуино UNO менен аба ырайы станциясы: 7 кадам

Video: Ардуино UNO менен аба ырайы станциясы: 7 кадам

Video: Ардуино UNO менен аба ырайы станциясы: 7 кадам
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Ноябрь
Anonim
Ардуино БУУнун жардамы менен аба ырайы станциясы
Ардуино БУУнун жардамы менен аба ырайы станциясы

Түзгөн: Хазел Янг

Бул долбоор маалымат агымын көзөмөлдөө үчүн Arduino UNO тактасын, маалыматтарды чогултуу үчүн DHT22 сенсорун жана маалыматтарды көрсөтүү үчүн OLED экранын колдонгон метеостанция.

1 -кадам: Элементтердин тизмеси

Элементтердин тизмеси
Элементтердин тизмеси

1. Экран: OLED, 1.3 Display SH1106, I2C ак түс ---- PID: 18283

2. Сенсор: Санариптик нымдуулук жана температура сенсору DHT22 ---- PID: 7375

3. Туташат: Jumper Wires ---- PID: 10316 or 10318 or 10312 (узундугуна жараша) же катуу зымды 22 AWG ---- PID: 22490 колдонсоңуз болот

Нан тактасы ---- PID: 10686 же 10698 же 103142 (өлчөмүнө жараша)

4. Кубат: Бул кабель компьютердин USB порту менен гана туташа алат жана кабель IDE менен Arduino тактасынын ортосунда маалыматтарды берүү үчүн да колдонулат. USB CABLE, A to B, M/M, 0.5M (1.5FT) ---- PID: 29862

Же сиз муну тактаны иштетүү үчүн колдоно аласыз: 5V 2A AC/DC адаптери ---- PID: 10817.

2 -кадам: Салыштырмалуу киришүү

Салыштырмалуу киришүү
Салыштырмалуу киришүү
Салыштырмалуу киришүү
Салыштырмалуу киришүү

Экранды киргизүү: 1.3 OLED дисплей Ак

1. Сиз негизги орнотууларды жана сүрөттөмөлөрдү көрсөткөн документти таба аласыз:

Сенсордун киришүүсү: Нымдуулук жана температура сенсору DHT22 1. Сиз сүрөттөмөлөрдү көрсөткөн документти таба аласыз:

3 -кадам: Районду туташтыруу

Circuit туташуу
Circuit туташуу

DHT22 сенсору 2 -пинге сериялык маалыматтарды жөнөтөт. Ошентип, экинчи пинди сол жактан туташтырыңыз, "SDA" пин 2 -пинге туташтырылышы керек.

SSH1106 дисплейи үчүн ал аналогдук пинди берүү үчүн колдонот. Экрандын схемасы Arduino "A5" үчүн "SCL" пин жана Arduino "A4" үчүн "SDA" пин болот. Пикселдик позициянын маалыматтары үзгүлтүксүз берилип жатканда, программанын дисплей функциясы сенсордон маалыматтарды окуган сайын буйрукту бир гана жолу иштетет.

Сенсор да, экран да 3.3V менен Arduino'yү DC кубаттуулугу катары иштете алат. Бийликке жетүү үчүн, биз "VCC" казыктарын Arduino "3.3V" га туташтырышыбыз керек. Ал эми "GND" төөнөгүчтөрүн Arduino тактасындагы "GND" пинине туташтырса болот.

USB Aдан B кабелин колдонуңуз, Arudino'yu компьютерге туташтырыңыз.

4 -кадам: Компиляцияга даярдануу

Olikrausтун SSH1106 экраны үчүн "u8glib".

Adafruitтен DHT22 сенсору үчүн "DHT сенсор китепканасы". Сиз эки китепкананы жүктөп алышыңыз керек: DHT22 сенсордук китепкана:

U8glib:

Жана аларды ачуу үчүн IDEдеги "китепкананы башкаруу" колдонуңуз. Китепканаларды башкаруунун онлайн көрсөтмөсү:

5 -кадам: DHT22 Sensor Serial Port үчүн Test Code

DHT22 сенсорунун сериялык порту үчүн тесттик коэ (DHT22 китепканасынын ичинде >> мисалдар):

(Бул бөлүктү өткөрүп жиберсеңиз болот.)

Бул жөн гана DHT22 сенсорун текшерүү үчүн, адатта маалыматтарды окуйт

#кошуу

#кошуу

#кошуу

#кошуу

#кошуу

#аныктоо DHTPIN 2

#аныктоо DHTTYPE DHT22

DHT dht (DHTPIN, DHTTYPE);

жараксыз орнотуу () {

Serial.begin (9600);

Serial.println (F ("DHT22 тест!"));

dht.begin ();

}

void loop () {

// Ченөө ортосунда бир нече секунд күтө туруңуз.

кечигүү (2000);

// Окуу температурасы же нымдуулугу болжол менен 250 миллисекундка созулат!

// Сенсордун көрсөткүчтөрү дагы 2 секундага чейин болушу мүмкүн (бул өтө жай сенсор)

float h = dht.readHumidity ();

// Окуу температурасы Цельсий (демейки)

float t = dht.readTemperature ();

// Температураны Фаренгейт катары окуу (isFahrenheit = true)

float f = dht.readTemperature (true);

// Окуулар ишке ашпай калганын текшериңиз жана эрте чыгып кетиңиз (кайра аракет кылуу үчүн).

if (isnan (h) || isnan (t) || isnan (f)) {

Serial.println (F ("DHT сенсорунан окуу ишке ашкан жок!"));

кайтуу;

}

// Фаренгейт боюнча жылуулук индексин эсептөө (демейки)

float hif = dht.computeHeatIndex (f, h);

// Цельсий боюнча жылуулук индексин эсептөө (isFahreheit = false)

float hic = dht.computeHeatIndex (t, h, false);

Serial.print (F ("Нымдуулук:"));

Serial.print (h);

Serial.print (F ("% Температура:"));

Serial.print (t);

Serial.print (F ("° C"));

Serial.print (f);

Serial.print (F ("° F Жылуулук индекси:"));

Serial.print (hic);

Serial.print (F ("° C"));

Serial.print (hif);

Serial.println (F ("° F"));

}

// Программаны түзгөндөн кийин, маалыматты текшерүү үчүн TOOLS >> SERIAL MONITOR баскычын басыңыз.

// Тестирлөө программасынын аягы.

6 -кадам: Долбоордун коду

#кошуу

#кошуу

#кошуу

#кошуу

#кошуу

#аныктоо DHTPIN 2

#аныктоо DHTTYPE DHT22

#"U8glib.h" кошуу

U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);

DHT сенсору (DHTPIN, DHTTYPE);

жараксыз тартуу (жараксыз) {

u8g.setFont (u8g_font_unifont);

float h = sensor.readHumidity ();

// Окуу температурасы Цельсий (демейки)

float t = sensor.readTemperature ();

// Окуулар ишке ашпай калганын текшериңиз жана эрте чыгып кетиңиз (кайра аракет кылуу үчүн).

if (isnan (h) || isnan (t)) {

u8g.print ("Ката.");

үчүн (;;);

кайтуу;

}

u8g.setPrintPos (4, 10);

u8g.print ("Температура (C):");

u8g.setPrintPos (4, 25);

u8g.print (t);

u8g.setPrintPos (4, 40);

u8g.print ("Нымдуулук (%):");

u8g.setPrintPos (4, 55);

u8g.print (h);

}

жараксыз орнотуу (жараксыз) {

u8g.setRot180 ();

Serial.begin (9600);

sensor.begin ();

}

боштук цикл (жараксыз) {

// сүрөт укуругу

u8g.firstPage ();

кыл {

тартуу ();

} while (u8g.nextPage ());

// бир аз кечигүүдөн кийин сүрөттү калыбына келтирүү (2000);

}

// Негизги программанын аягы.

7 -кадам: Description

Description
Description

Андан кийин, Arduino тактасынын пин схемасын баштаңыз. Анткени сенсордук китепкана объектини жарыялоо үчүн маалыматтарды талап кылат.

Ал эми сенсордун маалыматын "Serial.print ()" деп аталган функцияны колдонуу менен санариптик 2 -пин аркылуу чыгуу маалыматын көзөмөлдөө менен текшере аласыз. Маалыматтарды берүү жыштыгы болжол менен ар бир 2 секундда 1 окууну түзөт (бул 0,5 Гц), Arduino IDEде программаланганда, цикл функциясынын ичиндеги кечигүүнү 2 секунддан ашык кылып коюшубуз керек. Ошентип, цикл функциясынын ичинде "кечиктирүү (2000)" бар. Бул маалыматтарды тез -тез жаңыртып турууну камсыз кылат. "Тартуу" функциясында, сериялык маалымат портунан маалыматтарды алыңыз жана "readHumidity" жана "readTemperature" функцияларын колдонуп, сандарды калкып коюңуз.

Нымдуулукту жана температураны "u8glib" файлындагы басып чыгаруу функциясын колдонуп басып чыгарыңыз. Сиз "setPrintPos" функциясындагы номерди өзгөртүү менен позицияны тууралай аласыз. Басып чыгаруу функциясы текстти жана сандарды түз көрсөтө алат.

Аппаратты орнотуу үчүн, сериялык портко 10 секунд кечигүү бериңиз. Андан кийин сенсордун баштоо функциясын чакырыңыз. Менин схемам боюнча экраным тескери болгон. Ошентип, мен дисплейди айландыруу үчүн "setRot180" функциясын да коштум.

Arduino тактасынын цикл функциясы негизги функция болуп саналат. Бул сенсор жаңыртылган сайын текстти жана маалыматтарды көрсөтүү үчүн тартуу функциясын чакырып турат.

Экран мындай көрүнөт:

Сиз Arduino UNOну компьютериңизден ажыратып, аны 5 мм DC адаптерин колдонуп, анын 2,1 мм кубат уячасына туташтыра аласыз. Ал программаны өзүнүн дискте сактайт жана иштетилгенден кийин программаны үзгүлтүксүз иштете алат.

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