Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /home/itstreet/public_html/classes/CMySQL.php on line 22

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/itstreet/public_html/classes/CMySQL.php on line 24
ITstreet -Arduino Nano, DHT11 i I2C 2004A LCD
Preskoči na sadržaj

ITstreet postovi

Arduino Nano, DHT11 i I2C 2004A LCD

Jedna neuobičajena kombinacija modula ovaj put od mene. Možda bi naslov pre mogao da bude nešto u stilu Stanlia i Olia. Kada pogledate dimenzije upotrebljenih komponenti, sve će vam biti jasno.

Arduino Nano, sa svojim minijaturnim dimenzijama 18x45mm i težinom od samo 7 grama deluje kao patuljak. Na tako malu ploču stalo je sve ono što je neophodno. Tu su u dva reda po petnaest pinova sa izlazima na 5V i 3,3V, sa analognim i digitalnim pinovima, Vin, GND, TX, RX... Svi su tu i u razmaku od 0,1", što će reći da su pogodni za prototipsku ploču. Oznake pinova su veoma sitno napisane i oni sa slabijim vidom (kao ja) će morati pred sobom da imaju pinout šemu. Moj primerak je Kineska kopija tako da je sa donje strane pored naponskog kontrolera AMS117, CH340G čip zadužen za komunikaciju sa računarom preko mini-B USB porta. Sa gornje strane su šest ICSP pinova bez oznaka, zatim četiri LED (TX, RX, ON i L). Dalje je kristal na standardnih 16MHz, ATMega328P i USB port.



Debeljko u ovom slučaju je LCD 2004A sa već zalemljenim I2C interfejsom. Ekran kao i u slučaju 1602 ispisuje karaktere ali po 20 njih u četiri reda. Ekran sa I2C interfejsom se malo drugačije povezuje od prethodno opisanog 1602 sa dodavanjem druge biblioteke ali uz samo četiri žice za povezivanje. Reklo bi se odličan izbor za razne projekte. Ali... uvek ima ali. Arduinu je potrebna adresa ekrana da bi preko I2C mogao da uspostavi vezu sa njim. U mom slučaju mi je trgovac istu dostavio (0x27) ali prilikom povezivanja sam imao velikih problema jer, pogađate, adresa nema veze sa ekranom koji sam dobio. Trgovac je naprasno zaboravio engleski jezik a ja kineski nikad nisam ni znao, tako da sam bio osuđen na preoravanje interneta. Čip zadužen sa komunikaciju I2C modula sa ekranom je u mom slučaju PCF8574AT i našao sam da je njegova adresa 0x3F i njenim unosom svi problemi su nestali. Pored pomenutog čipa i konektora, tu su još potenciometar za pozadinsko osvetljenje, džamper za isključivanje istog i power LED. Isti I2C interfejs se može naći i na drugim ekranima (1602, 1601...) ovog tipa, kao  stand alone varijanta za nadogradnju na one koji ga nemaju.





Treći sastojak ovog recepta je DHT11 senzor. Dakle, senzor a ne modul, što će reći da sam prilikom povezivanja dodao jedan otpornik od 10 kilooma. Neko će reći zašto DHT11 a ne DHT22? Jeste da je DHT11 neprecizan i da DHT22 nije nešto specijalno skuplji od njega ali se DHT11 često dobija u starter kitovima, ima ga svuda u online šopovima i generalno je prisutan tako da smatram da treba da se zna kako da se upotrebi. AOSONG je potpisao i ovaj senzor a na poleđini vidimo da radi na naponima od 3,3V do 5V. Takođe vidimo da relativnu vlažnost vazduha meru u rasponu od 20% do 95% a temperaturu od 0-50 stepeni celzijusa. Za relativnu vlažnost vazduha preciznost je ±5% a za temperaturu ±2°C. Očitavanja su na ceo broj a semplovanje je 1Hz. Sa donje strane ima četiri pina: VCC, data, N/C i gnd, gde se prvi povezuje na plus, data na digitalni pin na koji će slati podatke a poslednji na GND. Prilikom povezivanja sam upotrebio otpornik na 10 kilooma i povezao data pin sa njime na  5V. U specifikaciji stoji da treba 5K koji je dovoljan za razdaljinu do 20m ali njega nisam imao.



Nano, LCD i DHT11 povezujemo prema šemi. GND i VCC pinove sa LCD modula povezujemo na GND i 5V Arduina. SDA pin u ovom slučaju crvenom žicom spajamo sa A4 na Nanou, a SCL braon žicom na pin A5. Dakle na analogne pinove. DHT11 se povezuje prema oznakama, VCC na 5V, data na pin D4 a GND na GND. N/C (not conected) pin se ne koristi. Otpornikom od 10 kilooma povezujemo VCC i DATA pinove ispred samog senzora.



Na redu je skeč:

----------------------------
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPin 4
DHT dht;
LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7, 3, POSITIVE);
void setup()
{
  // activate LCD module
  lcd.begin (20, 4); // for 20 x 4 LCD module
  lcd.backlight();
  dht.setup(DHTPin);
}
void loop()
{
  float temp = dht.getTemperature();
  float vlaga = dht.getHumidity();
  lcd.setCursor(0, 0);
  lcd.print ("U vasem gradu je");
  lcd.setCursor(0, 1);
  lcd.print ("trenutno izmereno");
  lcd.setCursor(0, 2);
  lcd.print (temp);
  lcd.print(" C");
  lcd.setCursor(0, 3);
  lcd.print (vlaga);
  lcd.print (" %");
}
-------------------------------

Skeč je prilično poznat od ranije i u suštini je blago modifikovana verzija onog koji je upotrebljen za DHT22. Razlike su u dodatim bibliotekama vezanim za I2c interfejs. U mom slučaju, a i po onom što se može videti na mreži, najbolje se pokazala NewLiquidCrystal biblioteka. Nakon toga inicijalizujemo digitalni pin 4 na koji ćemo slati podatke sa DHT11 ali može biti i neki drugi. Nakon toga povezujemo LCD sa Arduinom, tako što mu dajemo I2C adresu uz još par parametara. Kao što sam već rekao u mom slučaju je 0x3F zbog PCF8574AT čipa ali to se razlikuje od modela do modela. Postoje I2C skeneri gde se skeč prebaci na Arduino i na serijal monitoru izađe koja je adresa u pitanju. U mom slučaju nijedan skeč mi nije prikazivao ništa i već sam počeo da mislim da sam dobio neispravan ekran. U void setup funkciji pokrećemo ekran, pozadinsko osvetljenje i DHT pin. U void loop funkciji pravimo dve promenljive i ispisujemo tekst u sva četiri reda ekrana.



Verifikujemo skeč i prebacujemo na Arduino Nano. Prethodno, pod tools biramo Nano ploču i port. Ako smo sve uradili kako treba, na ekranu bi trebalo da se prikažu očitavanja. Ukoliko ekran prikaže samo kockice u dva neparna reda, u pitanju je pogrešna I2C adresa. Izguglajte malo oznaku čipa ispod ili pustite neki od I2C skenera i rešite problem.

Ostavite poruku

Vaša mejl adresa neće biti objavljena.Označena polja su obavezna*

  1. Dejan Petrovic

    Sad tek vidim sam u Fritzing šemi pogrešno stavio VCC na GND a GND na 5V. GND ide na GND a VCC na 5V. Greška je u šemi, izvinite.