Aplikasi Running Text dengan Keypad dan Sensor DHT11 pada Dot Marix






Tujuan [Kembali]


Tujuan aplikasi ini adalah untuk menampilkan hasil pengkuran DHT11 pada dot matrix.


Alat dan Bahan [Kembali]


1. Arduino Uno R3
2. LED Dot matrix 8x8
3. Max7219
4. Keypad 3x4
5. DHT11
6. Resistor
7. Arduino IDE
8. Proteus


Teori [Kembali]


1. Arduino Uno R3

Arduino Uno R3 adalah papan pengembangan mikrokontroler yang berbasis chip ATmega328P. Arduino Uno memiliki 14 digital pin input / output (atau biasa ditulis I/O, dimana 14 pin diantaranya dapat digunakan sebagai output PWM antara lain pin 0 sampai 13), 6 pin input analog, menggunakan crystal 16 MHz antara lain pin A0 sampai A5, koneksi USB, jack listrik, header ICSP dan tombol reset. Hal tersebut adalah semua yang diperlukan untuk mendukung sebuah rangkaian mikrokontroler. Spesifikasi arduino uno R3 dapat dilihat pada tabel 2.1 dan arduino uno R3 dapat dilihat pada gambar 2.1.




2. LED Dot Matrix

Dalam layar dot matrix, beberapa LED yang kabel bersama-sama dalam baris dan kolom. Hal ini dilakukan untuk meminimalkan jumlah pin yang diperlukan untuk mengusir mereka. Misalnya, 8 × 8 matriks LED (ditampilkan di bawah) akan membutuhkan 64 I / O pin, satu untuk setiap pixel LED. Dengan kabel semua anoda bersama-sama dalam baris (R1 melalui R8), dan katoda dalam kolom (C1 melalui C8), jumlah yang diperlukan pin I / O dikurangi menjadi 16. Setiap LED ditujukan demi baris dan jumlah kolom. Pada gambar bawah ini, jika R4 adalah ditarik tinggi dan C3 ditarik rendah, LED di baris keempat dan kolom ketiga akan dihidupkan. Karakter dapat ditampilkan oleh pemindaian cepat baik baris atau kolom.


Matriks LED digunakan dalam percobaan ini adalah ukuran 5 × 7. Kita akan belajar bagaimana menampilkan karakter yang masih dalam format standar 5 7 × pixel. Gambar di bawah menunjukkan yang LED harus diaktifkan untuk menampilkan abjad Inggris 'A'. Para 7 baris dan 5 kolom dikendalikan melalui pin mikrokontroler. Sekarang, mari kita lihat secara detail cara kerjanya. 
Misalkan, kita ingin menampilkan A. alfabet Kami akan memilih kolom C1 (yang berarti C1 ditarik rendah dalam kasus ini), dan kolom hapus lainnya dengan memblokir jalan tanah mereka (salah satu cara untuk melakukan hal itu adalah dengan menarik C2 melalui C5 pin untuk tinggi logika). Sekarang, kolom pertama aktif, dan Anda perlu mengaktifkan LED di baris R2 melalui R7 kolom ini, yang dapat dilakukan dengan menerapkan tegangan bias maju untuk baris ini. Selanjutnya, pilih kolom C2 (dan hapus semua kolom lainnya), dan menerapkan bias maju ke R1 dan R5, dan sebagainya. Oleh karena itu, dengan memindai seluruh kolom cepat (> 100 kali per detik), dan menyalakan LED masing-masing di setiap baris kolom itu, kegigihan visi datang untuk bermain, dan kami merasakan tampilan gambar seperti yang masih.


Tabel di bawah ini memberikan tingkat logika untuk diterapkan ke R1 melalui R7 untuk setiap kolom untuk menampilkan abjad 'A'.


Row nilai untuk menampilkan abjad A



3. Max 7219

MAX7219 adalah IC keluaran Maxim yang di gunakan untuk mengendalikan LED, seven segment atau running text. Satu buah IC ini dapat mengontrol LED sebanyak 64 buah, dan hanya membutuhkan 3 PIN dari mikrokontroller atau Arduino. Sehingga bisa menghemat kaki Arduino atau jenis IC controller lain nya.
Seperti halnya IC 74595, IC ini bisa di hubungkan dengan IC MAX7219 lain nya. Jika ingin mengendalikankan Segment sebanyak 16 buah, maka cukup menggunakan dua IC MAX7219, karena satu IC ini bisa mengendalikan 8 Seven Segment. Begitu seterus nya jika ingin menambah jumlah seven segment lain nya.

4. Keypad

Keypad merupakan antarmuka antara komunikasi perangkat elektronik dengan manusia yang disebut dengan istilah HMI (Human Machine Interface).
Keypad tersusun atas 16 buah push button yang dirangkai dengan konfigurasi dalam bentuk matrix, sehingga memiliki index baris dan kolom sehingga pin input ke Arduino dapat dikurangi.
Proses pembacaan dilakukan secara maktriks yaitu dengan menggunakan teknik scanning, dan pada proses tersebut hal yang dilakukan dengan memberikan umpan data pada 1 bagian dan memantau akan adanya feedback /umpan balik pada bagian lainnya.
Umpan data dilakukan di bagian baris dan feedback yang ada dilakukan pengecekan pada bagaian kolom.
Kondisi saat baris diberikan umpan data, baris lainnya dalam kondisi inversi.
Berikut contoh penekanan tombol keypad yang mudah diketahui dengan mencermati akan baris dan kolom mana yang ditekan :
Prinsip kerja keypad 4x4
Keypad yang ditekan pada no.5
B = Baris, K = Kolom.
Pada gambar ilustrasi diatas, penekanan tombol keypad yang ditekan yaitu “5”.
Seperti terlihat bahwa Baris-2 bernilai LOW, sedangkan Baris-1, Baris-3, dan Baris-4 adalah bernilai HIGH.
Kemudian dari ilustrasi tersebut diketahui bahwa data berasal dari penekanan Baris-2, dengan umpan balik pada Kolom-2, sehingga dapat disimpulkan bahwa tombol keypad yang ditekan yaitu “5”.
5. DHT11
Sensor suhu dan kelembaban type DHT11. Sensor suhu DHT11 adalah salah satu sensor yang dapat mengukur dua parameter yaitu suhu dan kelembaban udara (humadity). Untuk ukuran sensor saat ini cukup kecil sehingga memudahkan kita untuk menggunakannya. Berikut spesifikasi dari sensor DHT11

Spesifikasi :

Relative humidity
Resolution: 16Bit
Repeatability: ±1% RH
Accuracy: At 25°C ±5% RH Interchangeability: f
ully interchangeable Response time: 1 / e (63%) of 25°C 6s 1m / s air 6s
Hysteresis: <± 0.3% RH
Long-term stability: <± 0.5% RH / yr in

Temperaturea
Resolution: 16Bit
Repeatability: ±0.2°C
Range: At 25°C ±2°C Response time: 1 / e (63%) 10S

Electrical Characteristics
Power supply: DC 3.5~5.5V
Supply Current: measurement 0.3mA standby 60μ A Sampling period: more than 2 seconds

Pin Description
1, the VDD power supply 3.5~5.5V DC 
2, DATA serial data, a single bus
3, GND ground, the negative power

6. Resistor

Resistor merupakan salah satu komponen yang paling sering ditemukan dalam Rangkaian Elektronika. Hampir setiap peralatan Elektronika menggunakannya. Pada dasarnya Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam suatu rangkaian Elektronika. Resistor atau dalam bahasa Indonesia sering disebut dengan Hambatan atau Tahanan dan biasanya disingkat dengan Huruf “R”. Satuan Hambatan atau Resistansi Resistor adalah OHM (Ω). 



Sumber:

Rangkaian [Kembali]



Saat Arduino diaktifkan, pin DHT11 berlogika 1 dan mengirimkan data pengkuran ke mikrokontroler. Apabila tombol '*' ditekan maka dot matrix menampilkan nilai suhu, apabila tombol '#' ditekan maka akan menampilkan nilai kelembapan.

Flowchart [Kembali]



<

Program [Kembali]


#include <Keypad.h>
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <DHT.h>
#define DHTPIN A0     // Pin al que esta conectado el DHT11
#define DHTTYPE DHT11   // Tipo de sensor en este caso DHT11
DHT dht(DHTPIN, DHTTYPE);

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

PROGMEM unsigned char const CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};

int data = 12;    // pin DIN MAX7219
int load = 11;    // pin CS MAX7219
int clock = 13;  // pin CLK MAX7219
int maxInUse = 4;    // Banyak MAX7219
MaxMatrix m(data, load, clock, maxInUse);
byte buffer[10];

void setup(){
  m.init();
  m.setIntensity(15); // Intensitas Dot matrix 0-15
  Serial.println("Sensor DHT11");
  dht.begin();
}

void loop(){
 static char key;
char newKey = kpd.getKey();
if (newKey != NO_KEY) {
  key = newKey;
  Serial.print("New key=");
  Serial.println(key);
}
  int t = dht.readTemperature();
  char temp[4];
  itoa(t,temp,10);
  Serial.println(temp);
  if(key == '*')
  {
  printStringWithShift("Suhu: ", 100);
  printStringWithShift(temp, 100);
  printStringWithShift("C ", 100);
  delay(100);
  }
  else if(key == '#')
  {
  int h = dht.readHumidity();
  char hum[4];
  itoa(h,hum,10);
  Serial.println(hum);
  printStringWithShift(" Kelembaban: ", 100);
  printStringWithShift(hum, 100);
  printStringWithShift("% ", 100);
  delay(100);
  }
}


void printCharWithShift(char c, int shift_speed){
  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7*c, 7);
  m.writeSprite(32, 0, buffer);
  m.setColumn(32 + buffer[0], 0);

  for (int i=0; i<buffer[0]+1; i++)
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void printStringWithShift(char* s, int shift_speed){
  while (*s != 0){
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

void printString(char* s)
{
  int col = 0;
  while (*s != 0)
  {
    if (*s < 32) continue;
    char c = *s - 32;
    memcpy_P(buffer, CH + 7*c, 7);
    m.writeSprite(col, 0, buffer);
    m.setColumn(col + buffer[0], 0);
    col += buffer[0] + 1;
    s++;
  }
}

Program ini menggunakan Library Keypad.h, DHT.h, dan maxmatrix.h.

Link File  [Kembali]


Rangkaian dapat didownload DISINI
Program dapat didownload DISINI
Video tutorial dapat didownload DISINI