Percobaan LCD TFT 2.4″ Untuk Arduino UNO

Berikut ini percobaan menyalakan LCD TFT 2.4″ dalam bentuk Shield untuk Arduino UNO.

Berikut ini penampakan Arduino UNO di sebelah shield LCD TFT 2.4″.

TFT LCD 2.4" Shield untuk Arduino UNO
Arduino UNO di sebelah TFT LCD

LCD Shield ini cocok dipasang di atas Arduino UNO. Kalau dipasang ke breadboard malah sulit, memerlukan kabel-kabel karena ukuran kakinya tidak sama dengan ukuran kaki di breadboard.

TFT LCD 2.4" Shield untuk Arduino UNO
Bagian belakang TFT LCD
 

Di bagian belakang TFT LCD ini ada slot untuk kartu memori SD card. Pada bagian belakang tertulis “http://tft.simkeim.com tftlcd for arduino uno (spiflash)”. Namun setelah dicek, domain simkeim.com ternyata tidak ada.

TFT LCD ini menggunakan chip SPFD5408, sehingga tidak kompatibel dengan library LCD dari Adafruit.

Cara menyalakan LCD ini dijelaskan oleh Joao Lopes di artikelnya sebagai berikut:

Cara instalasi library:

  • kunjungi situs https://github.com/JoaoLopesF/SPFD5408
  • klik di “Code”, kemudian klik di “Download ZIP”
  • file SPFD5408-master.zip akan ada di direktori download anda, biasanya di “Downloads”
  • Jalankan Arduino IDE
  • Klik di menu “Sketch” -> “Include Library” -> “Add .ZIP Library”
  • Pilih file SPFD5408-master.zip
  • library akan terinstall di direktori “Documents/Arduino/libraries/SPFD5408-master”
  • Contoh software dapat dilihat di sub direktori examples di bawah direktori tersebut.

Berikut ini screenshot hasil menjalankan contoh program di direktori /examples di library tersebut.

Berikut ini hasil menjalankan contoh program spfd5408_graphicstest.ino

TFT LCD 2.4" Shield untuk Arduino UNO
Pengujian menyalakan LCD dengan spfd5408_graphicstest.ino

 

Human Machine Interface Weinview MT6071iP

Berikut ini perangkat Human Machine Interface (HMI) tipe MT6071iP, buatan Weinview atau Weintek. Fungsi alat ini sebagai antar muka ke pengguna di lingkungan industri/pabrik.

Penampakan

Berikut ini tampak depan MT6071iP. Ukuran layar adalah 7 inch. Resolusi layar adalah 800×480. Layar dilengkapi layar sentuh resistif. Operasi alat ini tidak memerlukan keyboard / mouse.

Tampak depan Weinview MT6071iP dengan power supply 24 volt di sebelahnya
Tampak depan Weinview MT6071iP dengan power supply 24 volt di sebelahnya

Berikut ini tampak depan digelapkan sedikit, supaya kelihatan tulisannya.

Menguji tampilan dengan screencapture website Elektrologi
Menguji tampilan dengan screencapture website Elektrologi

 

Tampak belakang MT6071iP, paling kiri adalah konektor power supply, di tengah adalah konektor serial RS232 dan RS485, di kanan adalah konektor USB
Tampak belakang MT6071iP

Pada bagian belakang terdapat konektor power (warna hijau). Jalur power adalah chasis ground, power ground, dan power. Tegangan catu daya yang dapat diberikan adalah 10 volt sampai 28 volt.

Komunikasi ke perangkat lain menggunakan koneksi fisik RS232 dan RS485. Protokol yang digunakan misalnya RTU Modbus, sebagai client ataupun sebagai server. Untuk memasukkan program menggunakan kabel USB mikro yang dihubungkan ke komputer Windows 10.

 

Pada bagian pinggir sudah dilengkapi dengan karet, supaya memudahkan membuat panel yang tahap percikan air dan debu
Bagian pojok

Pada bagian pinggir sudah dilengkapi dengan karet, supaya memudahkan membuat panel yang tahap percikan air dan debu.

Produk ini tipenya adalah MT6071iP, namun literatur dan settingnya dari hasil penelitian sama dengan tipe MT8071iP.

Pemasangan di Panel

HMI Weintek ini dirancang untuk dipasang di panel. Untuk itu sudah disediakan sekrup dan dudukan agar mudah memasangnya di panel. Tidak perlu membuat lubang sekrup di panel.

Weintek HMI di Panel
Weintek HMI di Panel

Berikut ini contoh pemasangan HMI di sebuah panel elektrikal. Kabel dari HMI ditempel ke panel menggunakan tie-mount dan cable ties.

Tie mount untuk kabel di panel
Tie mount untuk kabel di panel

Komunikasi Serial

Untuk menghubungkan HMI ini ke perangkat lain mesti menggunakan port serial RS232 ataupun RS485. Protokol yang didukung adalah Modbus.

Berikut ini pin pada port DB9 untuk komunikasi RS232 maupun RS485

Daftar pin serial pada Weintek MT6071iP. COM1, COM2, RS232, RS485
Daftar pin serial pada Weintek MT6071iP

Susunan pin pada konektor DB9 ini berbeda dengan susunan pin yang umum dipakai pada DB9 di komputer desktop, sehingga perlu membuat kabel khusus untuk menyambungkannya.

Untuk menghubungkan HMI ini ke perangkat lain mesti menggunakan port serial RS232 ataupun RS485. Protokol yang didukung adalah Modbus.

Beberapa hal menarik yang dapat dikerjakan dengan Weintek MT6071iP ini di antaranya:

  • menghubungkan HMI ke Desktop PC menggunakan kabel serial RS232
  • menghubungkan HMI ke Raspberry PI menggunakan kabel serial RS232
  • menghubungkan HMI ke Raspberry PI menggunakan protokol RS485
  • menghubungkan HMI ke Arduino UNO/Nano PI menggunakan protokol RS485
  • menghubungkan HMI ke Arduino UNO/Nano PI menggunakan protokol RS232

 

Kabel Serial RS232

Untuk menghubungkan Weintek HMI ke desktop PC dapat menggunakan kabel RS-232C. Konektor yang umum dipakai di PC dan USB Serial adalah DB9.

Berikut ini pinout RS232 pada PC:

 

Pin SIG. Signal Name DTE (PC)
1 DCD Data Carrier Detect in
2 RXD Receive Data in
3 TXD Transmit Data out
4 DTR Data Terminal Ready out
5 GND Signal Ground
6 DSR Data Set Ready in
7 RTS Request to Send out
8 CTS Clear to Send in
9 RI Ring Indicator in

Ref: https://www.db9-pinout.com/

Sambungan kabelnya adalah sebagai berikut

Pin Weintek Sinyal Weintek Pin Desktop Sinyal Desktop Keterangan
5 GND 5 GND  
6 TXD 2 RXD  
7 RTS 8 CTS opsional
8 CTS 7 RTS opsional
9 RXD 3 TXD  

Sinyal yang diperlukan sekurang-kurangnya adalah GND , TXD dan RXD. RTS dan CTS hanya diperlukan kalau kita mengguanakan sinyal RTS dan CTS untuk handshaking.

 

Kabel serial untuk Weintek MT6071iP
Kabel serial untuk Weintek MT6071iP

Konektor DB9 yang dipakai untuk kedua konektor DB9 adalah jenis female.

Kabel serial untuk Weintek MT6071iP
Kabel serial untuk Weintek MT6071iP

Jika kabelnya terlalu pendek, dapat diperpanjang dengan menggunakan kabel straight DB9 female ke DB9 male.

Kabel serial untuk Weintek MT6071iP diperpanjang dengan kabel straight
Kabel serial untuk Weintek MT6071iP diperpanjang dengan kabel straight

Konektor DB9 kemudian dipasang ke HMI Weintek. Jika dipakai di tempat yang mengalami getaran, lebih baik jika sekrup pada konektor DB9 dipasang dengan kuat.

Weintek MT6071iP dengan kabel serial
Weintek MT6071iP dengan kabel serial

Jika di PC/Laptop tidak ada konektor serial RS232, maka untuk mendapatkan RS232 dapat menggunakan konverter USB to Serial, misal menggunakan merek BAFO sebagai berikut ini.

HMI Weintek MT6071iP dengan Kabel serial USB untuk ke desktop/laptop
Kabel serial USB BAFO

 

Referensi

1 VA berapa watt

Pertanyaan:

  • 1 VA berapa watt?
  • 1 kVA berapa watt

Jawaban:

VA adalah singkatan dari ‘volt ampere’. Volt adalah satuan tegangan, ampere adalah satuan arus. Watt adalah satuan daya.

Besaran VA biasa dipakai pada arus bolak-balik (AC). Untuk dapat mengubah VA menjadi watt, diperlukan informasi tambahan yaitu faktor daya (cos phi)

Ringkasnya:

  • Daya (watt) = Tegangan (volt) x arus (ampere) x cos(phi).

Untuk mengubah VA menjadi watt diperlukan angka faktor daya pada sistem tersebut. Faktor daya ini besarnya minimum 0, maksimum 1. Jadi 1 VA = (faktor daya) watt. Misalkan faktor daya 0,7 maka 1 VA = 0,7 watt.

1 kVA sama dengan 1000 VA, jadi 1 kVA  = 1000 x (faktor daya) watt. Misal faktor daya = 0,9 maka 1 kVA = 1000 x 0,9 = 900 watt.

Contoh lain:

Tegangan bolak-balik 220 volt, dengan arus 10 ampere. Faktor daya 0,7. Berapakah daya?

Jawab: P = V x A x cos (phi) = 220 volt x 10 ampere x 0,7 = 1540 watt

Referensi

Percobaan Penjadwal Periodik FreeRTOS Dengan 2 Task

Berikut ini percobaan 2 task periodik pada FreeRTOS

Spesifikasi

Task1:

  • Waktu eksekusi 4 detik
  • Perioda 10 detik (10,8 detik terukur)

Task2:

  • Waktu eksekusi 1 detik
  • Perioda 2 detik

Perangkat Lunak

// 1 task periodik dengan FreeRTOS Arduino Nano (ATmega328)
// template umum FreeRTOS di Arduino Nano  https://github.com/feilipu/Arduino_FreeRTOS_Library/blob/master/examples/AnalogRead_DigitalRead/AnalogRead_DigitalRead.ino
// contoh pemakaian vTaskDelayUntil dan xTaskGetTickCount dari https://github.com/feilipu/avrfreertos/blob/master/MegaBlink/main.c

#include "Arduino_FreeRTOS.h"
#include <semphr.h>

#define LED1  2
#define LED2  3
#define LED3  4
#define LED4  5

static void TaskBlinkLED1(void *pvParameters);
static void TaskBlinkLED2(void *pvParameters);

// task handle diperlukan jika ingin mengakses parameter suatu task. optional
TaskHandle_t xHandle1 = NULL;

void TaskDummy(int LED_A, int LED_B, long int counter) {
  long int i;
  for (i = 0; i < counter; i++) {
    cli();
    digitalWrite(LED_A, LOW);
    digitalWrite(LED_B, HIGH);
    sei();
    asm("nop");
    cli();
    digitalWrite(LED_A, HIGH);
    digitalWrite(LED_B, LOW);
    sei();
    asm("nop");
  }
  digitalWrite(LED_A, LOW);  // matikan semua LED
  digitalWrite(LED_B, LOW);
}

void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);

  xTaskCreate(
    TaskBlinkLED1
    ,  "Task1"  // A name just for humans
    ,  100  // This stack size can be checked & adjusted by reading the Stack Highwater
    ,  NULL
    ,  2  // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.
    ,  &xHandle1 );
xTaskCreate(
    TaskBlinkLED2
    ,  "Task2"  // A name just for humans
    ,  100  // This stack size can be checked & adjusted by reading the Stack Highwater
    ,  NULL
    ,  3  // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.
    ,  &xHandle1 );    
}

void loop() {
}

static void TaskBlinkLED1(void *pvParameters) // Main Red LED Flash
{
  TickType_t xLastWakeTime;
  /* The xLastWakeTime variable needs to be initialised with the current tick
    count.  Note that this is the only time we access this variable.  From this
    point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
    API function. */
  xLastWakeTime = xTaskGetTickCount();
  while (1)
  {
    Serial.println(millis());
    Serial.println(xLastWakeTime); // cetak last wake time, untuk debugging. hanya untuk slow system

    TaskDummy(LED1, LED2, 10000L / 0.172 * 4 ); // 4 detik waktu eksekusi
    vTaskDelayUntil( &xLastWakeTime, ( 10000L / portTICK_PERIOD_MS ) ); // 10 detik perioda

  }
}

static void TaskBlinkLED2(void *pvParameters) // Main Red LED Flash
{
  TickType_t xLastWakeTime;
  /* The xLastWakeTime variable needs to be initialised with the current tick
    count.  Note that this is the only time we access this variable.  From this
    point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
    API function. */
  xLastWakeTime = xTaskGetTickCount();
  while (1)
  {
    Serial.println(millis());
    Serial.println(xLastWakeTime); // cetak last wake time, untuk debugging. hanya untuk slow system

    TaskDummy(LED3, LED4, 10000L / 0.172 ); // 1 detik waktu eksekusi
    vTaskDelayUntil( &xLastWakeTime, ( 2000L / portTICK_PERIOD_MS ) ); // 2 detik perioda

  }
}

 

Pengukuran

Berikut ini adalah tampilan kedua buah task di layar osiloskop.

Sinyal warna kuning adalah Task 1

Sinyal warna biru adalah Task 2.

 

Pengukuran pewaktuan dengan osiloskop
Pengukuran pewaktuan dengan osiloskop

Referensi

Percobaan Penjadwal Periodik Dengan FreeRTOS pada Arduino Nano

Pada percobaan ini dilakukan penjadwalan untuk sebuah task periodik pada sistem operasi FreeRTOS. Mikroprosesor yang dipakai adalah Arduino Nano (ATmega328).

Pengukuran akan dilakukan dengan video dengan kecepatan 25 frame per detik, sehingga pemilihan waktu eksekusi dan periode tidak boleh terlalu kecil. Untuk percobaan dipilih waktu eksekusi 4 detik, dengan perioda task adalah 10 detik.

Task 4 detik dibuat menggunakan TaskDummy yang sudah dibuat di percobaan sebelumnya. Pemilihan waktu 4 detik dapat dilakukan dengan menggunakan parameter fungsi yang sesuai.

Perangkat Keras

Perangkat keras yang digunakan adalah Arduino Nano dengan 2 buah LED terhubung ke pin 2 dan pin 3.

Implementasi Program

Berikut ini source code percobaan tersebut.

// 1 task periodik dengan FreeRTOS Arduino Nano (ATmega328)
// template umum FreeRTOS di Arduino Nano  https://github.com/feilipu/Arduino_FreeRTOS_Library/blob/master/examples/AnalogRead_DigitalRead/AnalogRead_DigitalRead.ino
// contoh pemakaian vTaskDelayUntil dan xTaskGetTickCount dari https://github.com/feilipu/avrfreertos/blob/master/MegaBlink/main.c

#include "Arduino_FreeRTOS.h"
#include <semphr.h>

#define LED1  2
#define LED2  3

static void TaskBlinkLED1(void *pvParameters);

// task handle diperlukan jika ingin mengakses parameter suatu task. optional
TaskHandle_t xHandle1 = NULL;

void TaskDummy(int LED_A, int LED_B, long int counter) {
  long int i;
  for (i = 0; i < counter; i++) {
    cli();
    digitalWrite(LED_A, LOW);
    digitalWrite(LED_B, HIGH);
    sei();
    asm("nop");
    cli();
    digitalWrite(LED_A, HIGH);
    digitalWrite(LED_B, LOW);
    sei();
    asm("nop");
  }
  digitalWrite(LED_A, LOW);  // matikan semua LED
  digitalWrite(LED_B, LOW);
}

void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);

  xTaskCreate(
    TaskBlinkLED1
    ,  "TaskBlinkLED1"  // A name just for humans
    ,  100  // This stack size can be checked & adjusted by reading the Stack Highwater
    ,  NULL
    ,  2  // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.
    ,  &xHandle1 );
}

void loop() {
}

static void TaskBlinkLED1(void *pvParameters) // Main Red LED Flash
{
  TickType_t xLastWakeTime;
  /* The xLastWakeTime variable needs to be initialised with the current tick
    count.  Note that this is the only time we access this variable.  From this
    point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
    API function. */
  xLastWakeTime = xTaskGetTickCount();
  while (1)
  {
    Serial.println(millis());
    Serial.println(xLastWakeTime); // cetak last wake time, untuk debugging. hanya untuk slow system

    TaskDummy(LED1, LED2, 10000L / 0.172 * 4 ); // 4 detik waktu eksekusi
    vTaskDelayUntil( &xLastWakeTime, ( 10000L / portTICK_PERIOD_MS ) ); // 10 detik perioda

  }
}

Pengukuran Dengan Video

Pengukuran dilakukan dengan merekam kedipan LED selama kurang lebih 30 detik. Kecepatan frame video yang dihasilkan adalah 25 frame per detik.

Berikut ini rekaman video lampu kedip yang dihasilkan.

Analisis frame per frame dilakukan dengan menggunakan aplikasi DaVinci Resolve 16.

Tampilan DaVinci Resolve 16
Tampilan DaVinci Resolve 16

Video dapat ditampilkan dengan mode “Media”,  “Cut” maupun “Timeline”. DaVinci Resolve secara default menampilkan waktu dalam format HH:MM:SS, namun tampilan ini dapat diubah menjadi tampilan nomor frame untuk memudahkan analisis.

Berikut ini hasil analisis video LED tersebut:

Transisi Frame
OFF -> ON 161
ON -> OFF 262
OFF->ON 432
ON->OFF 534
OFF->ON 704
ON->OFF 805
OFF->ON 975

Analisis durasi waktu eksekusi

  • 262-161 = 101 frame = 4,04 detik
  • 534-432=102 frame =  4,08 detik
  • 805-704 = 101 frame = 4,04 detik.

Analisis Perioda Task

  • 432-161= 271 frame = 10.85 detik
  • 534-262= 272 frame = 10.88 detik
  • 704-432= 272 frame= 10.88 detik
  • 805-534= 271 frame = 10.85 detik
  • 975-704= 271 frame= 10.85 detik

Durasi atau waktu eksekusi adalah 4,04 detik ~ 4,08 detik

Periode Task yang terukur adalah antara 10.85 detik sampai 10.88 detik.

Pengukuran Dengan Osiloskop

Sebagai perbandingan juga dilakukan pengukuran tegangan pada LED dengan osiloskop. Berikut ini rekaman video pengukuran dengan osiloskop

Berikut ini pengukuran perioda task dengan menggunakan fitur cursor  pada osiloskop.

Pengukuran perioda task pada FreeRTOS
Pengukuran perioda task

Dari hasil pengukuran perioda didapatkan angka 10,80 detik. Hasil ini cukup  sesuai dengan analisis frame video.

Berikut ini pengukuran durasi task.

Pengukuran durasi task pada FreeRTOS
Pengukuran durasi task

Didapatkan hasil angka durasi task adalah 4,1 detik, cukup mendekati angka 4,08 detik dari hasil analisis frame.

Analisis

Dari hasil perhitungan di atas, dapat didapatkan bahwa

  • durasi eksekusi dari TaskDummy sudah cukup mendekati hasil yang diinginkan
  • durasi perioda task berbeda cukup jauh , sekitar 8%

Dari hasil studi literatur didapatkan bahwa Timer Tick pada library FreeRTOS di Arduino Nano yang dipakai menggunakan osilator pada WDT (Watch Dog Timer). Osilator WDT ini menurut literatur datasheet tidak menggunakan kristal, dan periodanya tergantung dengan temperatur ruangan. Jadi perbedaan periode dari seharusnya 10 detik menjadi 10.8 detik dapat dijelaskan.

Referensi

Task Dummy Untuk FreeRTOS

Pada percobaan FreeRTOS dengan penjadwal periodik, diperlukan suatu task (pekerjaan) dengan waktu eksekusi yang diketahui.

Berikut ini sifat-sifat yang diperlukan dari task tersebut:

  • waktu eksekusi diketahui
  • waktu eksekusi dapat diubah-ubah dengan mengubah parameternya
  • status task dapat dimonitor dari luar mikroprosesor
  • status yang perlu diketahui: RUNNING, READY, BLOCKING, STOP.

Solusi

  • Task berupa iterasi yang jumlah iterasi dapat diubah-ubah dengan parameter.
  • Pengaruh parameter terhadap waktu eksekusi diukur. Pengukuran terbaik dengan menggunakan alat ukur eksternal seperti osiloskop. Jika tidak ada osiloskop, alternatifnya menggunakan fungsi millis() pada Arduino.
  • Task Dummy melakukan aktivitas membuat 2 buah LED berkedip secara komplementer. Jika kedua lampu nampak menyala, artinya task dalam keadaan RUNNING. Jika salah satu saja yang menyala, artinya task sedang berhenti, artinya dalam keadaan READY atau BLOCKING. Jika kedua lampu mati, artinya task sedang tidak aktif.

Berikut ini kode fungsi Task Dummy pada Arduino.

 

void TaskDummy(int LED_A, int LED_B, long int counter) {
  long int i;
  for (i = 0; i < counter; i++) {
    cli();
    digitalWrite(LED_A, LOW);
    digitalWrite(LED_B, HIGH);
    sei();
    asm("nop");
    cli();
    digitalWrite(LED_A, HIGH);
    digitalWrite(LED_B, LOW);
    sei();
    asm("nop");
  }
  digitalWrite(LED_A, LOW);  // matikan semua LED
  digitalWrite(LED_B, LOW);
}

DigitalWrite menyalakan dan mematikan LED A dan LED B. LED yang dipakai sebagai output dapat diatur melalui parameter fungsi. cli() fungsinya untuk disable interrupt, agar perubahan LED_A dan LED_B terjadi secara serentak. sei() fungsinya untuk mengaktifkan kembali interupsi. Instruksi assembly “nop” dipakai untuk menambah waktu iterasi.

Berikut ini program lengkapnya

// Contoh TaskDummy
// dengan output ke osiloskop juga
#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
}

void TaskDummy(int LED_A, int LED_B, long int counter) {
  long int i;
  for (i = 0; i < counter; i++) {
    cli();
    digitalWrite(LED_A, LOW);
    digitalWrite(LED_B, HIGH);
    sei();
    asm("nop");
    cli();
    digitalWrite(LED_A, HIGH);
    digitalWrite(LED_B, LOW);
    sei();
    asm("nop");
  }
  digitalWrite(LED_A, LOW);  // matikan semua LED
  digitalWrite(LED_B, LOW);
}

// the loop function runs over and over again forever
void loop() {
  unsigned long waktu_awal;
  unsigned long waktu_akhir;
  waktu_awal = millis();
  TaskDummy(LED1, LED2, 10000L);
  waktu_akhir = millis();
  Serial.print("waktu: ");
  Serial.println(waktu_akhir - waktu_awal);
  digitalWrite(LED_BUILTIN, HIGH);
  TaskDummy(LED1, LED2, 10000L);
  digitalWrite(LED_BUILTIN, LOW);
}

Durasi TaskDummy dalam milisekon dapat diamati di port serial. Berikut ini tampilan port serial.

Dari tampilan tersebut dapat diketahui bahwa waktu eksekusi task dummy adalah 173 ms.

Berikut ini foto pengukuran dengan osiloskop. Dari gambar nampak waktu yang diperlukan untuk task dummy adalah 172 ms

Berikut ini foto percobaan.

Osiloskop yang dipakai

Referensi

Raspberry Pi dengan Display LCD 20×4 I2C Dengan Bahasa C

Pada artikel ini dibahas cara menghubungkan Raspberry Pi dengan display LCD 20×4 yang menggunakan antar muka I2C

Raspberry Pi 2 dengan LCD 20x4 di breadboard dengan kabel cobbler
Raspberry Pi 2 dengan LCD 20×4

Berikut ini penampakan display LCD 20×4 dan antar muka I2C berbasis IC PCF8574 yang dipasang di belakang LCD 20×4 tersebut. Antar muka I2C ini memudahkan karena mengurangi jumlah kabel yang diperlukan serta mengurangi jumlah pin yang diperlukan di mikroprosesor Raspberry PI.

LCD 20x4 dan interface I2C PCF8574
LCD 20×4 dan interface I2C PCF8574

Perangkat keras

Berikut ini perangkat keras yang diperlukan

  • Raspberry Pi versi 2,3 atau 4
  • Bidirectional level converter
  • PCF8574 dapat berupa IC lepasan atau modul
  • Breadboard
  • Raspberry Pi Cobbler
  • LCD 20×4

Perangkat Lunak

  • Library Wiring PI
  • Aplikasi Python SMBUS
  • Aplikasi I2C tools

Prosedur

  • Rakit perangkat keras
  • Aktifkan I2C di raspi-config
  • install i2c-tools
  • install python-smbus
  • install wiringpi
  • Cek alamat PCF8574 dengan software i2cdetect
  • Compile program lcd.c (source)
  • Jalankan program lcd.c

Referensi

  • I2C LCD to Raspberry Pi in Chttp://www.bristolwatch.com/rpi/i2clcd.htm
  • Source code http://www.bristolwatch.com/rpi/code/i2clcd.txt
  • I2C Library (Wiring Pi) http://wiringpi.com/reference/i2c-library/
  • Connecting an LCD Screen to Raspberry Pi With a Logic Converter  https://maker.pro/raspberry-pi/tutorial/connecting-an-lcd-screen-to-raspberry-pi-with-a-logic-converter
  • Control a HD44780 LCD display via I2C with the Raspberry Pi https://tutorials-raspberrypi.com/control-a-raspberry-pi-hd44780-lcd-display-via-i2c/
  • How to Setup an I2C LCD on the Raspberry Pi https://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
  • How to Setup an LCD on the Raspberry Pi and Program It With Python https://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-python

Pompa Wasser PB-60EA Booster Pump Pompa Pendorong

Berikut ini foto-foto dan manual pompa air Wasser tipe PB-60EA (Booster Pump).

Foto  Pompa

Berikut ini foto-foto pompa dari berbagai sudut.

Pompa Wasser PB-60EA Booster Pump tampak samping warna biru dan hitam
Tampak samping
Pompa Wasser PB-60EA Booster Pump tampak samping warna biru dan hitam
Tampak samping
Pompa Wasser PB-60EA Booster Pump tampak samping warna biru dan hitam
Penampakan pompa
Pompa Wasser PB-60EA Booster Pump tampak samping warna biru dan hitam
Tampak samping dengan konverter 3/4 inch ke 1/2 inch dari bahan kuningan.
Pompa Wasser PB-60EA Booster Pump tampak samping warna biru dan hitam. Ada Warning di bagian listrik dan petunjuk pemasangan di bagian motor
Tampak samping, ada peringatan dan petunjuk pemasangan.

Foto Bagian Dalam

Berikut ini foto-foto bagian dalam pompa.

Motor pompa bagian stator
Motor pompa bagian stator
Motor bagian dudukan rotor
Motor bagian dudukan rotor
Bagian elektronik dari pompa Wasser PB-60EA. . Paling besar adalah kapasitor 4 uF.
Bagian elektronik. Paling besar adalah kapasitor 4 uF.
Bagian elektronik. Nampak ada transistor BT134
Bagian elektronik dengan TRIAC BT134

 

Papan rangkaian berisi rangkaian TRIAC dan resistor
Papan rangkaian berisi rangkaian TRIAC dan resistor
Papan rangkaian bagian bawah
Papan rangkaian bagian bawah
sketsa skema rangkaian

 

 

Manual

Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (cover)
Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 1)
 
Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 2)
Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 3)

 

Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 4)

 

Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 5)
 
Manual pompa Wasser PB-60EA
Manual pompa Wasser PB-60EA (halaman 6)

Foto Kemasan

Referensi

  • Datasheet BT134 http://www.farnell.com/datasheets/1815181.pdf

Percobaan Arduino Nano Dengan SoftwareSerial

Arduino Nano & UNO hanya menggunakan prosesor ATmega328 yang hanya memiliki 1 port serial asinkron. Jika perlu lebih dari 1 port serial, maka kita perlu menggunakan software yang berfungsi sebagai port serial. Library yang diperlukan adalah SoftwareSerial (https://www.arduino.cc/en/Reference/softwareSerial)

Berikut ini diuraikan percobaan menggunakan library SoftwareSerial pada Arduino Nano

Komponen yang diperlukan:

  • Arduino Nano / Arrduino UNO
  • Modul USB Serial, bisa yang FTDI ataupun yang CH340
  • Komputer desktop/laptop dengan 2 port USB yang bebas
  • 2 kabel USB mini
  • breadboard
  • kabel-kabel breadboard

Perangkat lunak yang diperlukan

Diagram Software Serial
Diagram Software Serial
Percobaan software serial dengan arduino nano dan modul USB to serial converter di breadboard
Rangkaian Arduino Nano dan modul USB Serial Converter

Modul USB serial yang digunakan memiliki pilihan 5 volt dan 3,3 volt. Board Arduino Nano memiliki tegangan 5 volt, sehingga dipilih tegangan 5 volt.

Perangkat lunak sebagai berikut:

// ide dari https://www.arduino.cc/en/Tutorial/LibraryExamples/SoftwareSerialExample

#include <SoftwareSerial.h>
// RX: pin 2
// TX: pin 3
SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
// put your setup code here, to run once:
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Native USB only
}
Serial.println(“percobaan software serial”);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println(“Hello, world from software serial”);

}

void loop() {
// baca karakter, dan kirim kembali

if (mySerial.available())
Serial.write(mySerial.read()); // karakter yang diterima di mySerial ditampilkan di Serial
if (Serial.available())
mySerial.write(Serial.read());

}

Compile program, kemudian upload.

Jalankan Serial Monitor di Arduino untuk memonitor data yang dikirim dari port serial hardware di Arduino. Pastikan baud rate cocok dengan yang disetting di program (115200bps)

Jalankan software terminal (RealTerm) di Windows, atur port ke port USB Serial. Hati-hati tertukar dengan port Arduino. Pastikan baud rate cocok dengan yang disetting di program (9600 bps)

Kirimkan karakter dari Serial Monitor Arduino. Karakter tersebut akan muncul di RealTerm

Kirimkan karakter dari RealTerm. Karakter tersebut akan muncul di Serial Monitor Arduino

Tampilan RealTerm dan Serial Monitor
Tampilan RealTerm dan Serial Monitor

 

Percobaan Simulasi Sistem Kendali Dengan ESP32 dan op-amp LM358

Berikut ini percobaan melakukan simulasi sistem kendali dengan mikroprosesor ESP32 dan rangkaian op-amp.

Sistem yang dikendalikan adalah simulasi sistem kendali posisi. Kecepatan diasumsikan memiliki orde 1. Sistem disimulasikan dengan op-amp LM358.

Berikut ini baru foto-foto dan gambarnya saja. source code dan diagram detail masih dalam pembuatan.

Output dari port serial
Output dari port serial
Output di osiloskop
Output di osiloskop
Rangkaian kendali digital tampak atas di breadboard
Rangkaian kendali digital tampak atas
Rangkaian kendali digital dengan ESP32 dan op-amp LM358  tampak samping
Rangkaian tampak samping

Referensi

 

 

Digital to Analog Converter (DAC) pada ESP32

Berikut ini percobaan menggunakan DAC (Digital to Analog Converter) pada mikroprosesor ESP32. Modul yang digunakan adalah Lolin32 Lite dari Wemos.

Pemrograman dilakukan di Arduino, jadi sebelumnya harus melakukan instalasi library ESP32 untuk Arduino.

Program DAC yang dicoba adalah sebagai berikut.

#define DAC1 25
// output di pin 25 (DAC1)

void setup() {
Serial.begin(115200);

}
int Value = 255; //255= 3.3V 128=1.65V

void loop() { // Generate a Sine wave
int i;
for (i = 0; i < 256; i++) {
dacWrite(DAC1, i);
}
for (i = 255; i >= 0; i--) {
dacWrite(DAC1, i);
}
}

 

Output diambil dari pin 25. Tampilan sinyal pada pin 25 adalah sebagai berikut:

 

Sinyal output dari DAC pada ESP32
Sinyal output dari DAC pada ESP32

Tegangan maksimum adalah 2,76 volt.

Tegangan minimum adalah -0,36 volt. Kurang jelas kenapa tegangan dapat menjadi negatif.

Frekuensi adalah 360,4 Hz. Perioda adalah 0.0027 detik.

Waktu untuk konversi 1 sampel adalah 5,42 ms.

Frekuensi DAC adalah 184525 Hz.

Amplifier Operasional LM358 Dengan Input Negatif

Apa yang terjadi jika op-amp LM358 diberi input negatif?

Sebuah integrator dapat memberikan output tegangan negatif. Untuk itu perlu dikaji, apa yang terjadi jika sinyal tegangan negatif ini masuk ke op-amp di tahap selanjutnya.

Batas Maksimum LM358

Pada datasheet LM358, disebutkan bahwa input voltage Vi mempunyai nilai minimal -0,3 volt. Jika nilai input lebih kecil dari angka ini, perilaku sistem dapat tidak normal, bahkan bisa rusak dengan cepat maupun lambat.

LM358 Absolute Maximum Ratings
LM358 Absolute Maximum Ratings

Percobaan

Pada percobaan dibuat rangkaian buffer op-amp LM358, dengan input dari integrator dari tahap selanjutnya. Sinyal dari buffer ini mengandung tegangan negatif dan tegangan biasa.

Buffer op-amp unity gain
Buffer op-amp unity gain

 

sinyal Input dan Ouput pada sebuah Buffer op-amp LM358
Input dan Ouput Buffer LM358

Input adalah sinyal warna biru  muda. Output adalah sinyal warna kuning.

Sinyal input berasal dari output sebuah integrator dari tahap sebelumnya. Sinyal ini awalnya bernilai 0 volt, kemudian menuju negativ (- 0,56 volt), kemudian naik menuju saturasi maksimum.

Output buffer adalah sinyal warna kuning. Ketika input negatif cukup besar, output menuju saturasi maksimum. Ketika tegangan input sudah lebih dari 0,3 volt ( di gambar cursor X2 menunjukkan tegangan -280 mV), output sudah mulai ‘normal’, yaitu menunjukkan 0 volt. Output LM358 tidak dapat negatif walaupun inputnya negatif. Setelah input lebih besar dari 0 volt, barulah buffer berfungsi sebagamana mestinya.

Pada sebuah buffer op-amp, seharusnya tegangan output sama dengan tegangan input. Namun hal ini tidak berlaku jika inputnya negatif. Ternyata perilaku buffer ini ada 2 macam: ketika input negatif besar (lebih kecil dari – 0,3 volt), dan negatif kecil (antara – 0,3 volt dan 0 volt)

Kesimpulan

Jika tegangan input buffer kurang dari 0,3 volt, maka output akan menuju saturasi maksimum.

Referensi

 

Percobaan Integrator Dengan Op Amp LM358

Pada tulisan ini disampaikan percobaan pembuatan integrator berbasis operational amplifier.

Parameter Sistem

  • tipe op amp: LM358
  • Tegangan power supply: tunggal, 3,2 volt dari sebuah modul ESP32 Lolin32 Lite
  • Pengukuran dengan osiloskop GW Instek 1152A-U
  • Sinyal dari pembangkit sinyal GW Instek AFG-2012

Berikut ini adalah rangkaian yang digunakan:

Rangkaian buffer dan integrator berbasis LM358
Rangkaian buffer dan integrator berbasis LM358

Power supply tunggal dengan tegangan adalah 3,2 volt, berasal dari sebuah modul ESP32 Lolin32 Lite. Sebagai referensi ground, digunakan pembagi tegangan resistor 2k2 dan 1k, menghasilkan tegangan 1,02 volt.

Operational amplifier menggunakan LM358. Pertimbangannya adalah op amp ini dapat bekerja dengan single supply, dengan tegangan supply dapat mencapai 3 volt. op-amp juga dapat menerima tegangan input yang sudah mendekati 0 volt. op-amp ini bukan jenis rail-to-rail, sehingga tetap akan terjadi clipping di output jika output mendekati tegangan supply.

Op-amp lain yang sering dipakai untuk aplikasi single supply tegangan rendah adalah LM324. LM324 memiliki kemampuan output sampai VCC – 1,5 volt. Jadi kalau diberi VCC 5 volt, output op-amp dapat mulai dari 0 volt sampai 3,5 volt.

Nilai resistor 100k dan kapasitor 10uF. Dari hasil pengukuran, nilai tepat dari resistor adalah 101,5 k dan kapasitor 9,1 uF. Tujuan pemilihan nilai ini adalah untuk mendapatkan parameter time-constant sekitar 1 detik.

Percobaan

Rangkaian dibuat dengan breadboard. Input dengan sinyal persegi dari generator sinyal GW Instek AFG-2012. Output diukur dengan osiloskop GW Instek GDS-1152A-U. Tegangan , nilai resistor dan nilai kapasitor diukur dengan osiloskop dan juga multimeter Kyoritsu KEW 1021R.

Kapasitor pada integrator menggunakan kapasitor non-polar, supaya tegangan pada kapasitor tersebut dapat bernilai positif dan negatif. Jika dipakai kapasitor polar seperti elektrolit, maka kapasitor hanya berfungsi pada 1 polaritas saja.

Set up rangkaian dengan breadboard, osiloskop GDS 1152A-U dan generator sinyal GwInstek AFG-2012
Set up rangkaian dengan breadboard, osiloskop dan generator sinyal

Berikut ini pengukuran sinyal input yang berasal dari sinyal generator.

Sinyal input dari generator sinyal
Sinyal input dari generator sinyal

Sinyal diukur di channel 1 (sinyal kotak di bawah warna kuning). Frekuensi 0,1 Hz. Amplitudo 2 Vpp. Tegangan terukur adalah 40 mV di bagian low, dan 2,160 di bagian HIGH.

Berikut ini sinyal output dari output integrator.

sinyal output integrator di atas, sinyal dari generator sinyal di bagian bawah. pengukuran besar sinyal output.
Sinyal output integrator

Sinyal diukur di channel 2 (sinyal atas warna biru).

Tegangan output integrator naik jika input LOW. Tegangan akan naik dengan kemiringan sesuai time constant, sampai mencapai saturasi. Tegangan maksimum output op amp adalah 1,84 volt, jadi ini adalah tegangan saturasi output op amp.

Jika input HIGH, output integrator akan turun dengan kemiringan sesuai time constant. Tegangan terendah pada output integrator adalah 40 mV.

Ketika input berubah dari HIGH ke LOW, output sejenak berubah menjadi negatif (diukur mencapai -0.6 volt). Tegangan negatif ini berasal dari tegangan yang tersimpan di kapasitor.

Rangkaian Clamp Dioda

Output integrator dapat negatif. Jika terlalu negatif dapat mengganggu/merusak komponen selanjutnya. Berikut ini hasil percobaan menambah diode clamp pada output integrator. Clamp pertama adalah rangkaian diode clamp konvensional.

tanpa clamp dan dengan clamp dioda 1N4148
Perbandingan tanpa clamp dan dengan clamp dioda 1N4148

Tanpa clamp, tegangan minimum adalah -680 mV

Dengan rangkaian clamp dioda 1N4148, tegangan minimum adalah 400 mV

 

Berikut ini rangkaian clamp dengan perubahan sedikit. Pada rangkaian clamp biasa, anoda disambungkan ke 0 volt. Pada rangkaian ini, anoda disambungkan ke tegangan 0,7 volt supaya tegangan output tidak dapat negatif.

Berikut ini hasil percobaan output integrator dengan diode clamp hasil modifikasi.

Dioda clamp dan resistor 1k
Dioda clamp dan resistor 1k

Dengan dioda clamp 1N4148 dan resistor 1k, maka tegangan minimum integrator adalah 120 mV

Dioda clamp dan resistor 10k
Dioda clamp dan resistor 10k

Dengan dioda clamp 1N4148 dan resistor 10k, maka tegangan minimum integrator adalah 0 mV

Dari percobaan didapat rangkaian clamp terbaik adalah dengan dioda 1N4148 dan resistor 10k.

Analisis

  • Tegangan supply 3,2 volt dari ESP32 dapat menjadi power supply untuk LM358.
  • Tegangan saturasi atas op-amp adalah 1,84 volt

Referensi

 

 

Konfigurasi Dan Fungsi pin Arduino UNO

Berikut ini penjelasan konfigurasi dan fungsi masing-masing pin dari Arduino Uno dengan prosesor ATmega328P.

Pinout Arduino UNO
Pinout Arduino UNO

Daftar Pin Arduino

IOREF

Referensi 5 volt untuk shield yang memerlukannya

RESET

Reset pada ATmega328. Perlu sinyal LOW untuk mereset Arduino. Terhubung ke PC6 dan PCINT pada ATmega328.

3.3V

Catu daya 3,3 volt untuk shield yang memerlukannya. Tegangan 3,3 volt ini berasal dari regulator LP2985-33DBVR.

GND

Ground, 0 volt.

VIN

Tegangan input DC 7~12 volt. Masuk ke regulator internal 5 volt (NCP1117ST50T3G). Tidak melalui dioda pengaman, sehingga tidak ada pengecekan polaritas.

A0

Input analog 0

Terhubung ke pin PC0 pada ATmega328

A1

Input analog 1

Terhubung ke pin PC1 pada ATmega328

A2

Input analog 2

Terhubung ke pin PC2 pada ATmega328

A3

Input analog 3

Terhubung ke pin PC3 pada ATmega328

A4

Input analog 4

Terhubung ke pin PC4 pada ATmega328

Berfungsi juga sebagai SDA untuk komunikasi I2C

A5

Input analog 5

Terhubung ke pin PC5 pada ATmega328

Berfungsi juga sebagai SCL untuk komunikasi I2C

13

Terhubung ke pin PB5 pada ATmega328

12

Terhubung ke pin PB4 pada ATmega328

~11

Terhubung ke pin PB3 pada ATmega328

~10

Terhubung ke pin PB2 pada ATmega328

~9

Terhubung ke pin PB1 pada ATmega328

8

Terhubung ke pin PB0 pada ATmega328

7

Terhubung ke pin PD7 pada ATmega328

6

Terhubung ke pin PD6 pada ATmega328

5

Terhubung ke pin PD5 pada ATmega328

4

Terhubung ke pin PD4 pada ATmega328

3

Terhubung ke pin PD3 pada ATmega328

2

Terhubung ke pin PD2 pada ATmega328

1

Berfungsi sebagai TXD pada komunikasi serial

Terhubung ke pin PD1 pada ATmega328

0

Berfungsi sebagai RXD pada komunikasi serial

Terhubung ke pin PD0 pada ATmega328

Referensi

 

 

Menyalakan Lampu Dengan Arduino Uno

Menyalakan Lampu Dengan Arduino Uno dapat dilakukan dengan berbagai cara, tergantung jenis lampu yang ingin dinyalakan.

Berikut ini adalah beberapa variasi lampu yang dapat dinyalakan dengan Arduino UNO:

  • LED tegangan kecil & arus kecil
  • LED tegangan besar / arus besar
  • Lampu bohlam
  • Lampu 220 volt

 

LED tegangan kecil & arus kecil

Untuk LED tegangan kecil dan arus kecil dapat dinyalakan langsung dari port Arduino. Harap diperhatikan bahwa tegangan pin pada Arduino UNO hanya maksimum 5 volt, sehingga hanya dapat menyalakan 2 LED seri. Arus yang dapat diambil dari port Arduino juga terbatas, sehingga arus pada LED juga terbatas. Menurut spesifikasi teknis Arduino UNO, arus maksimum di setiap port adalah 20 mA. Arus maksimum pada VCC ATmega328 adalah 200 mA, sehingga hal ini juga harus diperhatikan.

LED output
LED output

LED Tegangan Besar / Arus Besar

Untuk tegangan lebih dari 5 volt ataupun arus lebih dari 20 mA, maka perlu komponen tambahan berupa transistor untuk memperkuat arus & tegangan.

Berikut ini cara memperkuat tegangan pada output  Arduino, supaya dapat menggunakan catu daya 12 volt untuk menyalakan LED.

Penguat arus digital dengan transistor NPN
Penguat arus digital dengan transistor NPN

Lampu bohlam kecil

Lampu bohlam kecil memerlukan arus agak besar. Untuk memperkuat arus, dapat digunakan transistor NPN , seperti pada gambar berikut ini.

Penguat output digital dengan transistor NPN

Lampu 220 volt

Untuk menghubungkan Arduino ke tegangan 220 volt, umumnya dapat menggunakan relay elektromekanik ataupun relay solid state (SSR). Berikut ini contoh cara menghubungkan Arduino ke lampu 220 volt dengan relay elektromekanik.

Referensi