Kelebihan dan Kekurangan Arduino Nano Dibandingkan Arduino UNO

Kelebihan Arduino Nano dibandingkan Arduino UNO:

  • Arduino Nano ukurannya lebih kecil dibandingkan Arduino UNO
  • Arduino Nano cocok untuk dipasang di breadboardd

Kekurangan Arduino Nano dibandingkan Arduino UNO:

  • Beberapa modul tersedia sebagai shield untuk Arduino UNO, namun tidak dapat / sulit disambungkan ke Arduino Nano
  • Untuk prototyping yang cepat, kabel dapat langsung dimasukkan ke konektor pada Arduino UNO
  • Pada Arduino UNO terdapat konektor power supply. Pada Arduino Nano, power supply ini terhubung ke pin VIN, tidak melalui konektor khusus.

Berikut ini perbandingan ukuran Arduino UNO dan Nano. Arduino UNO lebih besar dibandingkan Arduino Nano.

Arduino UNO dan Arduino Nano
Arduino UNO dan Arduino Nano

Berikut ini Arduino Nano dipasang di breadboard. Pada rangkaian itu Arduino Nano dihubungkan dengan LCD OLED 0.91″

Arduino Nano di breadboard dengan OLED 0.91"
Arduino Nano terpasang di breadboard

Berikut ini Arduino UNO dengan modul shield TFT LCD 2.4″.  Shield dapat dipasang langsung di atas Arduino UNO. Shield ini tidak dapat dipasang ke breadboard.

Arduino UNO dan shield TFT LCD 2.4"
Arduino UNO dan shield TFT LCD 2.4″

Berikut ini foto konektor USB (di sebelah kiri) dan konektor power (di sebelah kanan) pada Arduino UNO.

Konektor USB dan power pada Arduino UNO
Konektor USB dan power pada Arduino UNO

Referensi

 

 

 

Baterai AAA untuk apa

Baterai AAA dipakai untuk peralatan elektronik yang kecil-kecil.

Dari sisi harga, jika dibandingkan harga baterai AAA mirip sekali dengan baterai AA, bahkan kadang-kadang sama.

Jika dibandingkan lagi dengan kapasitasnya, maka baterai AAA terasa lebih mahal dibandingkan AA.

Keunggulan utama baterai AAA adalah dimensinya lebih kecil dibandingkan AA, jadi pada beberapa aplikasi memang tidak ada pilihan harus menggunakan baterai AAA karena keterbatasan ukuran perangkat.

Pengukur Tekanan Darah

Berikut ini perangkat pengukur tekanan darah Omron HEM-7111. Perangkat ini menggunakan 4 buah baterai AAA tipe alkaline. Punggunaan baterai AAA nampaknya dengan pertimbangan dimensi alat yang harus kecil dan juga harus ringan.

Omron HEM-7111 Automatic Blood Pressure Monitor
Omron HEM-7111 Automatic Blood Pressure Monitor
Omron HEM-7111 Automatic Blood Pressure Monitor
Omron HEM-7111 Automatic Blood Pressure Monitor

Pengukur Temperatur dan Kelembaban HTC-1

Berikut ini pengukur kelembaban dan temperatur model HTC-1, dengan menggunakan 1 buah baterai AAA sebagai sumber dayanya.

Termometer elektronik HTC-1 pengukur kelembaban dan temperatur tampak belakang dengan baterai AAA
Termometer elektronik HTC-1
Termometer elektronik HTC-1 pengukur kelembaban dan temperatur tampak depan
Termometer elektronik HTC-1 pengukur kelembaban dan temperatur

Timbangan Digital Mini

Timbangan digital mini menggunakan 2 buah baterai AAA tampak belakang
Timbangan digital mini menggunakan 2 buah baterai AAA

Baterai AAA berapa volt

Tegangan baterai AAA tergantung tipe baterai tersebut.

Baterai AAA ada beberapa jenis, di antaranya:

  • Seng karbon
  • Alkaline
  • NiMH (Nickel-metal hydride)
  • NiCD (Nickel Cadmium)

Tegangan baterai AAA tipe seng karbon adalah 1,5 volt

Tegangan baterai AAA tipe alkaline adalah 1,5 volt

Tegangan baterai AAA tipe NiMH adalah 1,2 volt.

Tegangan baterai AAA tipe NiCD adalah  1,2 volt.

Berikut ini penampakan baterai AAA tipe NiMH dengan kapasitas sel 600 mAh.

Baterai AAA tipe NiMH kapasitas 600 mAh warna hijau
Baterai AAA tipe NiMH kapasitas 600 mAh

Berikut ini contoh penampakan baterai NiCD berbagai ukuran.

Baterai NiCD dengan ukuran Gumstick, AA dan AAA
Baterai NiCD dengan ukuran Gumstick, AA dan AAA

Baterai NiMH AAA pada gambar memiliki kapasitas 250 mAh.

Referensi

 

Baterai D berapa volt

Tegangan baterai D adalah 1,5 volt

Kapasitas baterai D adalah 8000 mAh (Eveready Heavy Duty)

Berikut ini contoh baterai D merek ABC

Seng karbon R20 (D)
Seng karbon R20 (D)

Perbandingan baterai D dengan baterai tipe lain dapat dilihat di artikel Kapasitas Baterai Seng Karbon dan Alkaline

Referensi

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.