Thyristor AC Switch, 3.3V/5V logic, AC 220V/5A (peak 10A)

[ [ images & links ] ]

Unit ketiga yang hendak dikemukakan yang bisa dengan mudah dipergunakan untuk mengendalikan daya adalah unit modul triac (thyristor). Sebelumnya sudah disampaikan penggunaan SSR, relay shield, dan modul dua relai. Modul yang akan dipergunakan adalah seperti yang terlihat di Gambar 1, Gambar 2 dan Gambar 3. Modul ini diproduksi oleh RobotDyn dan sudah bisa dibeli di toko online di lokal Indonesia.

Gambar 1. [sumber]

Gambar 2. [sumber]

Gambar 3. [sumber]

Di modul/papan ini sudah terdapat beberapa komponen pendukung selain komponen utama berupa triac BTA-16 600B, yang terpenting adalah MOC3042. Komponen ini adalah 6-Pin DIP Zero-Cross Optoisolators Triac Driver Output, artinya papan ini hanya bisa bekerja mengikuti pengaturan zero crossing. Salah satu diskusi mengenai mengapa fasilitas zero cross dipergunakan ada di electronics.stackexchange.com.

enter image description hereGambar 4. [sumber]enter image description hereGambar 5. [sumber]

 

Dikutip dari halaman RobotDyn:

If you need to control the AC power (lights, home equipment’s), a thyristor is what you need. This is a very common thyristor module with very low on-resistance and a control voltage, that is compatible with any 3.3V or 5V micro-controller or mechanical switch. This allows you to control high-power devices with very low-power control mechanisms.
This board has an optoisolator to protect your micro-controller from high AC currents.
We also left more space, if you need to install the heat sink for thyristor.

  • GND to GND
  • Signal (VCC) to Digital I/O, or 3.3V~5V

Pengujian dengan Arduino Uno.

Gambar 6.

const uint8_t IND_LED_PIN = LED_BUILTIN;
const uint16_t DELAY02 = 2000; 

#define BLINK_DELAY 500

#define TRIAC_ON HIGH
#define TRIAC_OFF LOW

#define LED_PORT PORTD
#define LED_ARRAY_GND 6
#define LED_ARRAY_LAST (LED_ARRAY_GND-6)
#define LD1 (LED_ARRAY_GND-1)
#define LD2 (LED_ARRAY_GND-2)
#define LD3 (LED_ARRAY_GND-3)
#define LD4 (LED_ARRAY_GND-4)
#define LD5 (LED_ARRAY_GND-5)
#define LD6 (LED_ARRAY_GND-6)

#define KY1 13
#define KY2 (LED_ARRAY_GND-1)
#define KY3 (LED_ARRAY_GND-2)
#define KY4 (LED_ARRAY_GND-3)

#define SIG A0


int buttonState = 0; // variable for reading the pushbutton status
uint8_t btn1, btn2, btn3, btn4; 


void buttonSafeInit(void)
{
  for (int i = KY1; i >= KY4; i--)
  {
    pinMode(i, INPUT);
    delay(1);
  }

  for (int i = KY1; i >= KY4; i--)
  {
    digitalWrite(i, HIGH);
    delay(1);
  }  
}

void ledArrayInit(void)
{
  // Urutan (eksekusi) kode dalam fungsi ini jangan ditukar;

  digitalWrite(LED_ARRAY_GND,HIGH);
  
  for (int i = LD1; i >= LD6; --i)
  {
    digitalWrite(i, LOW);
    delay(1);
  } 
   
  for (int i = LED_ARRAY_GND; i >= LED_ARRAY_LAST; --i)
  {
    pinMode(i, OUTPUT);
  } 

  // LOW yang kedua
  for (int i = LED_ARRAY_GND; i >= LED_ARRAY_LAST; --i)
  {
    digitalWrite(i, LOW);
  }  
}  

void ledBlinkTest(void)
{
  for (int i = LD1; i >= LED_ARRAY_LAST; --i)
  {
    digitalWrite(i, HIGH);
    delay(100);
  }  
  delay(500);
  for (int i = LD1; i >= LED_ARRAY_LAST; --i)
  {
    digitalWrite(i, LOW);
    delay(100);
  }  
}

void safeTRIACinit(void)
{
  digitalWrite(SIG, LOW);
  delay(100);
  pinMode(SIG, OUTPUT);
}

void triacTest001(void)
{
  digitalWrite(SIG, LOW);
  delay(2000);
  digitalWrite(SIG, HIGH);
  delay(2000);
}

void triacTest002(void)
{
  digitalWrite(SIG, TRIAC_ON);
  delay(DELAY02);
  digitalWrite(SIG, TRIAC_OFF);
  delay(DELAY02);
}

void triacTest003(void)
{
  digitalWrite(SIG, TRIAC_ON);
  LED_PORT |= (0b00111111);
  delay(DELAY02 * 2);
  digitalWrite(SIG, TRIAC_OFF);
  LED_PORT &= ~(0b00111111);
  delay(DELAY02);
}

void setup(void)
{
  safeTRIACinit();
  // delay(2);

  buttonSafeInit();
  // delay(2);

  ledArrayInit();
  // delay(2);

  pinMode(IND_LED_PIN, OUTPUT);
  digitalWrite(IND_LED_PIN, LOW);
  delay(200);
}


void loop(void)
{
  delay(1000);
  digitalWrite(IND_LED_PIN, HIGH);
  delay(1000);
  
  // ledBlinkTest();

  triacTest003();

  digitalWrite(IND_LED_PIN, LOW);
}

Gambar 7.

Gambar 8.

Modul solid state relay

Mengenai EMR (Electromechanical Relay) telah dicatatkan di dua post terdahulu, di link ini dan di link ini. Dalam post ini akan diungkap mengenai penggunaan SSR (Solid State Relay).

Ada banyak tipe dan instalasi SSR, salah satu modul yang cukup mudah ditemui dalam bidang elektronika adalah seperti pada Gambar 1 dan Gambar 2.

Gambar 1.

http://artofcircuits.com/wp-content/uploads/2016/06/1-CH-2A-240VAC-SSR-Module-2.jpgGambar 2. [sumber]

Gambar 3. [sumber]

Pada tabel di Gambar 3 (screenshot dari datasheet) bisa dilihat bahwa tipe G3MB ini sudah discontinued, artinya secara resmi sebenarnya produksinya telah dihentikan oleh produsennya. Di sana tabel yang sama juga bisa dilihat bahwa ada dua jenis SSR tipe ini, yang menggunakan zero crossing dan yang tidak (disebut juga random turn-on). Jenis G2MB-202P adalah jenis yang di dalamnya terdapat zero cross.

Gambar 4. [sumber]

Sekadar sebagai gambaran untuk mempermudah membayangkan cara kerja SSR, dapat dilihat rangkaian pada Gambar 4. Prinsip/dasar kerjanya tidaklah rumit, triac berfungsi sebagai sakelar utama, dibantu oleh phototriac sebagai sakelar yang menghubungkan antara input dengan sakelar utama. Phototriac memberikan isolasi galvanis, artinya input (misalnya dari Arduino) tidak terhubung langsung secara elektrikal dengan triac.

Jika suatu saat diperlukan atau dikehendaki prinsip blok rangkaian pada Gambar 4 bisa diwujudkan dengan komponen-komponen distrik seperti pada Gambar 5. Namun untuk banyak keperluan modul SSR yang sudah dalam bentuk yang terintegrasi lebih memudahkan, seperti pada Gambar 6 yang merupakan komponen utama dari papan pada Gambar 1 dan Gambar 2.

Image result for omron g3mbGambar 5. [sumber]

Gambar 6. [sumber]

SSRGambar 7. [sumber]

Rangkaian papan SSR pada [ps2id url=’#gambar2′ offset=’300′]Gambar 2[/ps2id] dapat lebih mudah dipahami dengan melihat pada Gambar 7. Semua komponen terdapat di papan SSR (lihat Gambar 2), tidak diperlukan lagi komponen tambahan. Tiga masukan berasal dari pengendali digital, semisal papan Arduino M0 atau GPIO Raspberry Pi atau papan TI Launchpad. Polaritas catu daya jangan sampai terbalik meskipun di papan telah dipasang diode.

Gambar 8. Ringkasan spesifikasi papan SSR Omron G3MB [sumber]

Gambar-gambar berikut adalah contoh penerapan papan SSR.

Image result for arduino ssrGambar 9. [sumber]Image result for arduino ssr ACGambar 10. [sumber]Image result for arduino omron ssr wiring ACGambar 11. [sumber]

Gambar 11.

Uji coba untuk melakukan pemrograman pengujian awal bisa dilakukan dengan konfigurasi DC seperti pada Gambar 11. Meski harus tetap diingat bahwa SSR ini adalah untuk beban AC (lihat [ps2id url=’#gambar6′ offset=’300′]Gambar 6[/ps2id]), bukan beban DC. Sehingga meskipun SSR sudah dimatikan (off) tetap ada aliran arus DC ke beban.

const uint8_t IND_LED_PIN = LED_BUILTIN;
const uint16_t DELAY02 = 2000; 

#define BLINK_DELAY 500

#define SSR_ON HIGH
#define SSR_OFF LOW

#define LED_SRC 7

#define CH1 8
#define CH2 9




void safeSSRinit(void)
{
  digitalWrite(CH1, LOW);
  digitalWrite(CH2, LOW);
  delay(100);
  pinMode(CH1, OUTPUT);
  pinMode(CH2, OUTPUT);
}


void ssrTest001(void)
{
  digitalWrite(CH1, LOW);
  delay(2000);
  digitalWrite(CH1, HIGH);
  delay(2000);

  digitalWrite(CH2, LOW);
  delay(2000);
  digitalWrite(CH2, HIGH);
  delay(2000);  
}

void ssrTest002(void)
{
  digitalWrite(CH1, SSR_ON);
  delay(DELAY02);
  digitalWrite(CH1, SSR_OFF);
  delay(DELAY02);
}

void testPola01(void)
{
  digitalWrite(LED_SRC, HIGH);
  ssrTest002();
  digitalWrite(LED_SRC, LOW);
}

void testPola02(void)
{
  digitalWrite(LED_SRC, HIGH);

  digitalWrite(CH1, SSR_ON);
  delay(DELAY02);
  digitalWrite(LED_SRC, LOW);
  delay(DELAY02);
  digitalWrite(CH1, SSR_OFF);
  delay(DELAY02);

  digitalWrite(LED_SRC, LOW);
}

void testPola03(void)
{
  delay(DELAY02);
  digitalWrite(IND_LED_PIN, HIGH);
  delay(DELAY02);
  digitalWrite(CH1, SSR_ON);
  delay(DELAY02);  
  digitalWrite(LED_SRC, HIGH);
  delay(DELAY02);
}

void testPola04(void)
{
  digitalWrite(LED_SRC, LOW);
  delay(DELAY02);
  digitalWrite(CH1, SSR_ON);
  delay(DELAY02);
  digitalWrite(LED_SRC, HIGH);
  delay(DELAY02);
  digitalWrite(CH1, SSR_OFF);
  delay(DELAY02);
  digitalWrite(LED_SRC, LOW);
}

void setup(void)
{
  safeSSRinit();
  delay(10);

  pinMode(LED_SRC, OUTPUT);
  digitalWrite(LED_SRC, LOW);

  pinMode(IND_LED_PIN, OUTPUT);
  digitalWrite(IND_LED_PIN, LOW);

  delay(1000);
  digitalWrite(IND_LED_PIN, HIGH);
  delay(1000);
  
  // ssrTest001();

  for (int i = 0; i < 3; ++i)
  {
    /* code */
    // ssrTest002();
    // testPola01();
    // testPola02();
    // testPola03();
    testPola04();
  } 
  digitalWrite(IND_LED_PIN, LOW);
}


void loop(void)
{

}

Dengan kode yang sama, bisa dilakukan pengujian untuk beban AC seperti pada Gambar 12 dengan daya AC, tegangan listrik sebesar kurang-lebih 220 V dari jala-jala PLN. Hasil unjuk kerja akan berbeda dengan percobaan pada Gambar 11 (beban DC). Pada pengendalian beban AC, pemutusan berlangsung seperti yang seharusnya sebab kondisi latching dan (terutama) holding akan terhenti saat nilai arus turun menuju crossing.

Gambar 12.

Untuk mempelajari lebih lanjut tentang pengoperasian SSR, silakan membaca dokumen dan artikel berikut:

 

DT COMBO AVR 51

Pada post sebelumnya, saya sudah membuat catatan mengenai sistem papan DST-51. Sedang pada post ini saya membuat catatan mengenai DT-COMBO AVR-51. Papan ini juga merupakan papan lama yang saya miliki saat belajar beralih dari arsitektur MCS-51 (seperti AT89C52/AT89S52) ke arsitektur Atmel AVR. Sebelum papan Arduino banyak tersedia dengan harga yang relatif terjangkau seperti sekarang ini, papan yang disebut minimum sistem adalah papan mikrokontroler yang tersedia untuk belajar. Peningkatan dari minimum sistem dengan beberapa pelengkap seperti DT-COMBO AVR-51, lebih memudahkan bagi mereka yang belajar.

Catatan ini saya buat karena sistem ini sudah semakin tua, dikhawatirkan manual akan semakin sulit ditemukan. Selain itu ada hack kecil hasil tinkering yang semakin memudahkan penggunaan sistem ini.

http://www.innovativeelectronics.com/innovative_electronics/images/DT-COMBO/DT-COMBO%20AVR-51.gifGambar 1. Penampakan asli [sumber]

Salah satu keunggulan papan seperti ini untuk belajar adalah sudah tersedianya komponen-komponen tambahan yang memudahkan proses belajar. Bahkan di tahap lanjutan juga akan mempermudah proses prototyping. Misalnya adalah keberadaan push-button dan LED, seperti yang terlihat di Gambar 1.

Gambar 2.

Papan DT-COMBO milik saya terlihat di Gambar 2. Ada dua hal yang saya kombinasikan di sistem itu, yang pertama adalah soket ZIF seperti yang juga terlihat di Gambar 3. Soket ini memudahkan proses untuk mengganti-ganti IC yang dipakai pada papan sistem, juga mengurangi kemungkinan (kaki) IC rusak pada saat bongkar-pasang di papan.

Gambar 3.

Gambar 4.

Pada Gambar 2, dan lebih jelas lagi pada Gambar 4, terlihat bahwa saya mempergunakan USBasp untuk melakukan pemrograman di papan sistem DT-COMBO (menggunakan header yang tersedia). USBasp bisa dibuat sendiri karena rancangannya telah sengaja disebarluaskan di Internet.

Gambar-gambar berikut saya kutip dari manual yang juga saya cantumkan link-nya di bagian bawah post ini.

Gambar 5. Port

Gambar 6.

 

Gambar 7.

Gambar 8.

 

Manual dan file-file untuk DT-COMBO AVR-51:

 

 

 

 

 

Arduino Uno plus ZIF socket

Tinkering ini bisa jadi tergolong pada proyek “ya karena saya bisa” (just because I can). Sekalipun masih tetap bermanfaat, utak-atik ini lebih merupakan kesenangan dan keisengan.

Gambar 1.

Gambar 2.

 

Arduino (dan sistem yang kompatibel dengannya) sebenarnya terdiri dari dua bagian yang utuh menjadi satu. Di satu bagian adalah hardware, perangkat keras, berupa papan Arduino. Di satu bagian lain adalah software (perangkat lunak), yang juga terdiri dari dua bagian yaitu firmware/bootloader yang terdapat di papan Arduino dan bagian lain adalah Arduino IDE yang dipakai oleh pengguna untuk menyusun program yang akan dimasukkan ke mikrokontroler (papan Arduino). Umumnya Arduino IDE-lah yang lebih dikenal sebagai bagian software.

Karena itu papan Arduino dapat dipakai tanpa mempergunakan bootloader {{1}} dan sistem masih berfungsi dengan baik. Misalnya pada Arduino Mega, Arduino Uno, Arduino Nano, dan Arduino Micro, pengguna bisa langsung menggunakan mikrokontroler AVR dari keluarga ATmega. Pengguna bisa mempergunakan header untuk port ISP/ICSP untuk melakukan pemrograman μC tanpa bantuan bootloader untuk melakukan pemrograman melalui USB port.

Dari Gambar 2, bisa dilihat bahwa kabel pita/kabel pelangi dihubungkan semi permanen ke ICSP port di papan Arduino agar dapat memudahkan proses pemrograman dengan perangkat keras pemrogram seperti USBasp. Dengan demikian papan Arduino Uno bisa juga difungsikan sebagai papan untuk memprogram mikrokontroler Atmel AVR ATmega328P tanpa bootloader Arduino.

Berikutnya adalah mengenai ZIF socket. Pada Gambar 1 dan Gambar 2, bisa dilihat ZIF (Zero Insertion Force) {{2}} adalah benda berwarna hijau tempat IC mikrokontroler dipasang. ZIF memudahkan pengguna untuk memindahkan dan memasang kembali IC. Jadi, untuk mempergunakan papan Arduino Uno sebagai papan mikrokontroler tanpa bootloader Arduino, soket ZIF sebenarnya tidak diperlukan. Itu sebabnya di awal saya sebut utak-atik ini sebagai “just because I can”.  Tetapi, lagi, ZIF memudahkan jika saya hendak mengganti IC yang sedang diprogram. Segala yang mempermudah dan mempercepat proses layak untuk dipertimbangkan untuk dimiliki atau dibuat.

[[1]]Not using a bootloader: If you want to use the full program space (flash) of the chip or avoid the bootloader delay, you can burn your sketches using an external programmer. ~Arduino.cc [[1]] [[2]]Stands for “Zero Insertion Force.” ZIF is a type of CPU socket on a computer motherboard that allows for the simple replacement or upgrade of the processor. Processors that use a ZIF socket can easily be removed by pulling a small release lever next to the processor and lifting it out. The replacement processor is then placed in the socket and secured by pushing the lever in the opposite direction — hence the phrase, “zero insertion force.” I suppose there is some force required to push the lever, but it is significantly less than non-ZIF sockets, which require special tools to force the processor out. ~techterms.com [[2]]

 

ATtiny85 development board

[ [ images & links ] ]

Gambar 1.

Gambar 2.

https://i.stack.imgur.com/gpt63.pngGambar 3.

Gambar 4.

Gambar 5.

Gambar 6.

Gambar 7.

Gambar 8.

Gambar 9.

Gambar 10.

Gambar 11.

Jika tertarik untuk mempergunakan papan yang mikrokontrolernya dapat diisi bootloader yang stabil, bisa membaca di halaman ini.

 

Digispark

[ [ images & links ] ]

Image result for digisparkGambar 1. [sumber]

Image result for digisparkGambar 2. [sumber]

Image result for digisparkGambar 3. [sumber]

Image result for digispark attiny85 kickstarterGambar 4. [sumber]

Image result for digispark attiny85 kickstarterGambar 5. [sumber]

Pin outs:

  • All pins can be used as Digital I/O
  • Pin 0 → I2C SDA, PWM (LED on Model B)
  • Pin 1 → PWM (LED on Model A)
  • Pin 2 → I2C SCK, Analog In
  • Pin 3 → Analog In (also used for USB+ when USB is in use)
  • Pin 4 → PWM, Analog (also used for USB- when USB is in use)
  • Pin 5 → Analog In

Gambar 6.Gambar 7.

Program Upload

As opposed to most arduinos, to upload a new program to the device this should not be connected to the USB port. With the device unpluggled click on upload in the Arduino IDE and then connect the device to the USB port. The system will automatically detect it and upload the code.

Gambar 8. Koneksi dengan USBasp

Gambar 9.

Gambar 10.

Gambar 11.

Gambar 12. Jika menggunakan “t85_aggressive.hex”, pemrograman berlangsung otomatis

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(0, OUTPUT); //LED on Model B
  pinMode(1, OUTPUT); //LED on Model A  or Pro
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(1, HIGH);
  delay(400);               // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(1, LOW); 
  delay(400);               // wait for a second
}

Linux Rules

If you are running GNU/Linux and getting errors on upload or other strange results you might need to add the USB device to udev. You must place the udev rules below into a file named /etc/udev/rules.d/49-micronucleus.rules

Create the /etc/udev/rules.d/49-micronucleus.rules file with this content (setting up the correct permissions for user and group if desired):

# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules    (preferred location)
#   or
# /lib/udev/rules.d/49-micronucleus.rules    (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

Then restart the system or run this command to apply the rules:

udevadm control --reload-rules

DST-51 + USBasp

Papan DST-51 V3.7 adalah papan sistem mikrokontroler yang saya beli dulu sekali saat beralih dari arsitektur MCS-51 ke arsitektur AVR. Itu saat sebelum era booming sistem papan Arduino di pasaran lokal. Beberapa tahun ini, papan itu jarang dipakai. Sampai hari ini saya coba menggunakannya kembali dengan USBasp. Pekerjaan “terbesarnya” hanya membeli lem pada kabel pelangi (header) dan mengurutkan ISP Port di papan itu.

Gambar 1. Koneksi papan DST-51 ke laptop melalui USBasp dan USB hub

[table id=6 /]

Gambar 2. Hubungan kabel pada ISP PORT di papan DST-51

Gambar 3. Hubungan kabel ke konverter ISP 10 pin ke 6 pin

Gambar 4. Hubungan kabel ke konverter ISP 10 pin ke 6 pin

Image result for (ISP | ICSP) adapter 10 6Gambar 5. ISP 6 pin dan 10 pin [sumber]

Image result for atmega16 pinoutGambar 6. ATmega16/32 & Arduino pinout [sumber]

Gambar 7. Uji membaca ATmega16 menggunakan AVRDUDE