Tutorial Belanja komponen

Tutorial › Memulai dengan Arduino

Bab 7: Arduino bergerak & bersuara

BAB 7
07

Arduino bergerak & bersuara

Arduino sudah bisa membaca dunia. Sekarang dia mengubahnya: mengatur terang lampu, membunyikan nada, memutar lengan servo, menyalakan beban besar lewat relay, dan menjalankan motor. Bab ini juga menjelaskan batas tenaga sebuah pin, supaya papanmu awet.

DI BAB INI KAMU BAKAL BISA

  • mengatur terang LED dengan PWM
  • membunyikan nada dan melodi
  • menggerakkan servo ke sudut tertentu
  • menyalakan beban lewat relay dengan aman
  • menjalankan motor DC lewat transistor

YANG DIBUTUHKAN

  • LED + resistor 220 Ω
  • buzzer pasif
  • servo SG90
  • modul relay 1 kanal
  • transistor TIP120, resistor 1 kΩ, dioda 1N4007, motor DC kecil
  • tempat baterai 4 × AA
  • lampu kecil 6 volt (untuk relay)

7.1PWM: LED redup-terang

PROYEK 7.115 MENIT · MUDAH

Pin digital cuma bisa nyala atau mati. Tapi kalau dinyalakan dan dimatikan sangat cepat, ratusan kali per detik, mata kita melihat rata-ratanya: LED terlihat redup. Teknik ini namanya PWM (pulse width modulation), dan hanya bisa dipakai di pin bertanda ~: 3, 5, 6, 9, 10, 11.

ATMEGA328P L TX RX ON UNO SCL SDA AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX1 RX0 POWER ANALOG IN DIGITAL (PWM~) 9 GND+−+−115510101515202025253030jihgfedcba+
Sama seperti proyek 3.2, tapi kabel kuning dipindah ke pin 9, salah satu pin PWM.
LED_NAPAS.INO
const int LED = 9;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  for (int terang = 0; terang <= 255; terang++) {1
    analogWrite(LED, terang);2
    delay(5);
  }
  for (int terang = 255; terang >= 0; terang--) {
    analogWrite(LED, terang);
    delay(5);
  }
}
  1. 1Nilai PWM berjalan dari 0 sampai 255.
  2. 2analogWrite(pin, nilai): 0 berarti selalu mati, 255 selalu nyala, 127 kira-kira separuh waktu nyala.

LED-nya menyala pelan lalu meredup, seperti bernapas. Gabungkan dengan potensiometer dari 6.1 dan kamu punya lampu yang terangnya diatur dengan tangan:

analogWrite(9, map(analogRead(A0), 0, 1023, 0, 255));
NAMA YANG MENIPU

Walaupun namanya analogWrite, pin Arduino tidak benar-benar mengeluarkan tegangan setengah. Dia tetap hanya 0 atau 5 volt, tapi berganti sekitar 490 kali per detik (pin 5 dan 6 sekitar 980 kali). Yang diatur adalah perbandingan lama nyala dan lama matinya. Untuk LED dan motor, hasilnya sama saja dengan tegangan yang lebih kecil.

7.2Buzzer: nada & melodi

PROYEK 7.215 MENIT · MUDAH

Ada dua jenis buzzer yang bentuknya mirip. Buzzer aktif langsung berbunyi "biiip" begitu diberi listrik. Buzzer pasif diam saja kalau cuma diberi listrik; dia harus digetarkan dengan frekuensi tertentu, dan karena itu bisa memainkan nada. Bab ini memakai buzzer pasif.

ATMEGA328P L TX RX ON UNO SCL SDA AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX1 RX0 POWER ANALOG IN DIGITAL (PWM~) 8 GND+−+−115510101515202025253030jihgfedcba+
Kaki bertanda + ke pin 8, kaki lain ke rel biru (GND).
NADA.INO
const int BUZZER = 8;

void setup() {
  tone(BUZZER, 440, 500);   // 440 Hz selama 0,5 detik
}

void loop() {
}

tone(pin, frekuensi, lama) membunyikan nada. Frekuensi dalam hertz: makin besar, makin tinggi suaranya. noTone(pin) menghentikannya. Untuk memainkan lagu, simpan nada dan lamanya di dua array, lalu putar dengan for seperti di 4.7.

MELODI.INO
const int BUZZER = 8;

// Twinkle Twinkle Little Star (lagu tradisional)
int nada[] = {262, 262, 392, 392, 440, 440, 392,
              349, 349, 330, 330, 294, 294, 262};
int lama[] = {400, 400, 400, 400, 400, 400, 800,
              400, 400, 400, 400, 400, 400, 800};

void setup() {
  for (int i = 0; i < 14; i++) {
    tone(BUZZER, nada[i], lama[i] * 0.9);1
    delay(lama[i]);
  }
}

void loop() {
}
  1. 1Nada dibunyikan 90% dari jatahnya, lalu diam sebentar. Tanpa jeda ini, dua nada yang sama berurutan akan menyatu jadi satu bunyi panjang.
NADADOREMIFASOLLASIDO'
Hz262294330349392440494523
CATATAN

tone() memakai salah satu pengatur waktu di dalam chip yang juga dipakai PWM pin 3 dan 11. Selama nada berbunyi, analogWrite() di dua pin itu tidak bekerja normal. Kalau proyekmu butuh keduanya, pakai pin PWM lain seperti 5, 6, atau 9.

COBA UBAH

Buat bel pintu: tombol di pin 2 (cara 3.4), dan setiap kali ditekan buzzer memainkan "ting-tong" dua nada, misalnya 659 Hz lalu 523 Hz.

7.3Servo: lengan yang patuh sudut

PROYEK 7.315 MENIT · MUDAH

Motor biasa berputar terus. Servo berbeda: kamu memberi angka sudut, 0 sampai 180 derajat, dan lengannya bergerak ke sudut itu lalu bertahan di sana. Di dalamnya ada motor kecil, roda gigi, dan sensor posisi. Servo dipakai untuk lengan robot, pintu otomatis, atau setir mobil RC.

ATMEGA328P L TX RX ON UNO SCL SDA AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX1 RX0 POWER ANALOG IN DIGITAL (PWM~) 9 5V GNDSG90
Kabel servo SG90: cokelat ke GND, merah ke 5V, oranye (sinyal) ke pin 9. Pakai kabel jumper male-male untuk menyambung konektornya.
SERVO_SAPU.INO
#include <Servo.h>1

Servo lengan;

void setup() {
  lengan.attach(9);2
}

void loop() {
  lengan.write(0);3
  delay(1000);
  lengan.write(90);
  delay(1000);
  lengan.write(180);
  delay(1000);
}
  1. 1Library Servo sudah ikut terpasang bersama Arduino IDE, tidak perlu diunduh.
  2. 2Memberi tahu bahwa servo bernama lengan tersambung di pin 9.
  3. 3Bergerak ke 0 derajat. Lengannya butuh waktu untuk sampai, jadi beri jeda sebelum perintah berikutnya.

Pasang tuas plastik (yang ikut di bungkus servo) di porosnya supaya gerakannya terlihat. Ganti isi loop() dengan lengan.write(map(analogRead(A0), 0, 1023, 0, 180));, pasang potensiometer seperti 6.1, dan servo akan mengikuti putaran tanganmu.

SERVO DAN DAYA USB

Saat mulai bergerak, servo menyedot arus cukup besar dalam sekejap. Satu SG90 tanpa beban umumnya aman dari pin 5V. Tapi kalau papan mendadak reset, Serial Monitor tersambung ulang sendiri, atau servo bergetar, artinya dayanya kurang. Untuk dua servo atau lebih, pakai baterai terpisah untuk kabel merah servo, dan satukan GND baterai dengan GND Arduino.

CATATAN

Library Servo memakai pengatur waktu yang sama dengan PWM pin 9 dan 10. Selama servo dipakai, analogWrite() di pin 9 dan 10 tidak bisa diandalkan, tapi servonya sendiri tetap boleh disambung ke salah satu pin itu.

7.4Relay: menyalakan beban besar

PROYEK 7.420 MENIT · SEDANG

Pin Arduino cuma kuat menyalakan LED. Untuk lampu, pompa air mini, atau kipas, dipakai relay: saklar yang ditekan oleh magnet kecil. Arduino cukup mengalirkan sedikit listrik ke magnetnya, dan "klik", saklar di sisi lain tersambung. Kedua sisi tidak bersentuhan secara listrik, jadi sisi beban boleh memakai sumber listrik lain.

ATMEGA328P L TX RX ON UNO SCL SDA AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX1 RX0 POWER ANALOG IN DIGITAL (PWM~) 7 5V GNDRELAY5VNOCOMNCVCCGNDIN4 × AA (6V)
Sisi kontrol: VCC ke 5V, GND ke GND, IN ke pin 7. Sisi beban: + baterai ke COM, NO ke lampu, lampu kembali ke − baterai.

Terminal sekrup hijau di modul relay punya tiga lubang:

  • COM (common): kaki bersama, selalu dipakai.
  • NO (normally open): tersambung ke COM hanya saat relay aktif. Ini yang dipakai untuk "nyalakan saat diperintah".
  • NC (normally closed): kebalikannya, tersambung ke COM saat relay tidak aktif.
RELAY.INO
const int RELAY = 7;
const bool AKTIF = LOW;1

void setup() {
  pinMode(RELAY, OUTPUT);
  digitalWrite(RELAY, !AKTIF);       // mulai dalam keadaan mati
}

void loop() {
  digitalWrite(RELAY, AKTIF);        // klik: lampu nyala
  delay(2000);
  digitalWrite(RELAY, !AKTIF);       // lampu mati
  delay(2000);
}
  1. 1Kebanyakan modul relay murah aktif LOW: relay menyala saat pin IN diberi LOW. Kalau relaymu malah aktif saat HIGH (perhatikan LED kecil di modulnya), ganti baris ini jadi HIGH. Bagian lain program tidak perlu diubah.
LISTRIK PLN 220 VOLT

Relay di kit biasanya bertuliskan "10A 250VAC", artinya sanggup menyambung listrik rumah. Tapi listrik 220 volt bisa membunuh, dan sambungan di breadboard dan kabel jumper tidak dirancang untuk itu. Semua latihan di tutorial ini memakai baterai. Kalau suatu saat proyekmu butuh menyalakan alat listrik rumah, kerjakan bersama orang yang paham instalasi listrik, pakai kotak tertutup, dan jangan pernah menyentuh terminal relay saat kabel PLN tersambung.

7.5Kenapa motor nggak boleh langsung ke pin

PROYEK 7.530 MENIT · SEDANG

Motor DC kecil, seperti yang ada di mainan, butuh arus ratusan miliampere saat berputar dan lebih besar lagi saat mulai bergerak. Satu pin Arduino sebaiknya tidak dibebani lebih dari sekitar 20 mA. Kalau motor dicolok langsung, motornya tidak kuat berputar, dan pinnya bisa rusak.

Solusinya transistor, komponen yang bekerja seperti keran: arus kecil dari pin Arduino ke kaki basis membuka jalan bagi arus besar dari kolektor ke emitor. Arus besarnya diambil dari baterai, bukan dari Arduino.

ATMEGA328P L TX RX ON UNO SCL SDA AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX1 RX0 POWER ANALOG IN DIGITAL (PWM~) 9 GND+−+−115510101515202025253030jihgfedcbaTIP120B C EMOTOR DC4 × AA (6V)
Pin 9 → resistor 1 kΩ → B (basis) TIP120. C (kolektor) → kaki − motor. E (emitor) → GND. Dioda 1N4007 dari kolektor ke + motor, dengan gelang perak menghadap ke + motor. Baterai 6 volt memberi daya ke motor, dan GND-nya disatukan dengan GND Arduino.
MOTOR_PWM.INO
const int MOTOR = 9;

void setup() {
  pinMode(MOTOR, OUTPUT);
}

void loop() {
  analogWrite(MOTOR, 255);     // kencang
  delay(2000);
  analogWrite(MOTOR, 120);     // pelan
  delay(2000);
  analogWrite(MOTOR, 0);       // berhenti
  delay(2000);
}

Karena pin 9 mendukung PWM, kecepatan motor bisa diatur seperti terang LED di 7.1. Nilai yang terlalu kecil, misalnya di bawah 80, mungkin belum cukup untuk membuat motor mulai berputar.

UNTUK APA DIODA ITU?

Motor berisi gulungan kawat. Saat arusnya diputus mendadak, gulungan itu melepaskan lonjakan tegangan balik yang bisa merusak transistor. Dioda yang dipasang terbalik di kaki motor memberi lonjakan itu jalan memutar yang aman. Komponen ini wajib untuk semua beban bergulung kawat: motor, relay, solenoid. Modul relay di 7.4 sudah punya dioda di papannya.

AWAS
  • GND baterai harus disatukan dengan GND Arduino. Tanpa itu, arus kecil dari pin 9 tidak punya jalan pulang dan transistor tidak membuka.
  • Jangan sambungkan + baterai ke pin 5V Arduino.
  • Kaki TIP120 dihitung dari kiri saat tulisan menghadapmu: B, C, E. Transistor jenis lain bisa punya urutan berbeda, jadi selalu cek lembar datanya.
CATATAN

Transistor TIP120 "memakan" sekitar 1 sampai 2 volt, jadi motor 6 volt terasa sedikit lebih lemah dibanding dicolok langsung ke baterai. Untuk motor yang lebih besar atau butuh berputar dua arah, pakai modul driver motor seperti L298N atau TB6612, yang berisi rangkaian transistor seperti ini plus perlindungannya.