Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Selasa, 26 Maret 2024

[Modbus] Menampilkan Sensor Suhu Infra Red ke Matrix P10

 



Sambungan dari praktek membaca sensor suhu infra red RS-WD-HW-N01 yang saya bahas sebelumnya disini , saya akan ajarkan bagaimana menampilkan suhunya di dot matrix display P10. Display dot matrix ini paling umum digunakan di layar sekolah, toko, masjid dll, ini sangat banyak yang membahas di blog maupun youtube, dengan harga yang sangat murah (menyebabkan 10 tahun lalu saya berhenti jadi pengrajin display led matrix), namun kali ini kebetulan ada proyek dan akan saya bagi ilmunya secara perlahan.


PINOUT 



Pinoutnya berupa header 2x8 dan beberapa seller online shop diluar sana menjual header converter ke arduino uno seperti gambar diatas. Jika ingin buat sendiri tentunya tidak akan menjadi kesulitan. Untuk tegangan 5 volt sebaiknya diberikan terpisah dari arduino dengan adaptor 5v yang mempunyai ampere lebih tinggi.



LIBRARY


Library asli dibuat oleh produsen aslinya yaitu FREETRONICS dan dapat di unduh disini. Pemilihan portnya berbasiskan port SPI dimana akan memanfaatkan 2 pin MOSI (13) dan SCK (11). Sedangkan pemilihan pin OE (output enable) harus berhubungan dengan timer1 sehingga kakinya jangan dirubah dari nomer 9.




Untuk menambahkan font yang lebih keren, beberapa pengembang elektronika mikrokontroller di Indonesia berkreasi dengan library DMD3 yang bisa di googling sendiri. 


 SCRIPT 


Saya bagi aja langsung dan semoga bermanfaat untuk belajar kalian maupun tugas di sekolah/kampus.


/*      Sensor Suhu Infra merah
       Tampilan ke Led Matrix P10   
	type : RS-WD-HW-N01 RS485
	www.aisi555.com
	ahocool@gmail.com
*/

#include "BIG7SEGMENT.h"
#include "DMD3.h"
#include "DejaVuSans9.h"
#include "bmz9.h"
#include "bmz6x7.h"

#include <SoftwareSerial.h>
SoftwareSerial mod(12, 10); // RX (A) , TX (B) ke rs485 sensor 


DMD3 display (1,1);


byte baca[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};//perintah baca suhu


byte bufferDataModbus[18];
byte *ptr;

int incomingByte ;

int suhune, puluhan, satuan;

bool terima = false;
unsigned long previousMillis = 0;


char dmdBuff1[10]; //Suhu Digit Depan koma
char dmdBuff2[10]; //belakang koma


void scan()
{
    display.refresh();
}

void setup() {
  Serial.begin(9600);
  Serial.println(F("Sensor infra red ke p10"));
  Serial.println(F("http://www.aisi555.com"));
  Serial.println();
 
  mod.begin(4800);
  ptr = bufferDataModbus;

    Timer1.initialize(1350);
    Timer1.attachInterrupt(scan);
    Timer1.pwm(9,255);
 
}

void loop() {
 unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= 5000) {
    // timer baca sensor tiap 5 detik 
    previousMillis = currentMillis;   
    //kirim perintah ke modbus baca suhu
   mod.write(baca, sizeof(baca));

   
   
    }

  //check modbus timeout
  long millisResponModbus = millis() + 1000;
  while (!mod.available())
  {
    if (millisResponModbus < millis())
    {
      break;//timeout
    }
  }
 
 // baca data serial yang masuk dari modbus lalu simpan pada pointer
  while (mod.available())
  { 
    byte b = mod.read();
    *ptr++ = b;
    Serial.print("0x");
    Serial.print(String(b, HEX));
    Serial.print(" ");
    delay(2);
    terima = true;
  }


if (terima){
	ptr = bufferDataModbus;

	suhune = (ptr[3] *256) + ptr[4];
	puluhan = suhune / 10;
	satuan = suhune % 10;

	Serial.print("Suhu = ");
	Serial.print(puluhan);
	Serial.print(",");
	Serial.print(satuan);
	Serial.println(" Celcius");

	memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
	terima =false;

    display.clear();

    //tulis suhu ke p10
    display.setFont(BIG7SEGMENT);
    sprintf(dmdBuff1, "%.2d", puluhan);
    sprintf(dmdBuff2, "%.1d", satuan);

    display.drawText(0, 0, dmdBuff1);
    display.setFont(bmz9);
    display.drawText(26, -1, "C");
    display.drawRect(22,1,24,3,1);

    display.setFont(bmz6x7);
    display.drawRect(22,13,23,14,1);
    display.drawText(25, 8 , dmdBuff2);
}


}

Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (28) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (76) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika