Dasar IoT & Arduino ๐ค
Pemrograman mikrokontroler Arduino menggunakan C++. Dari LED berkedip hingga sensor, aktuator, dan koneksi IoT dengan Blynk โ semuanya ada di sini!
๐ Konsep Dasar Arduino
๐๏ธ Struktur Program Arduino
// Semua program Arduino punya dua fungsi wajib ini: void setup() { // Dijalankan SEKALI saat Arduino menyala / reset // Gunakan untuk: // - Konfigurasi pin (pinMode) // - Inisialisasi Serial Monitor // - Koneksi WiFi, sensor, dll. Serial.begin(9600); // Mulai komunikasi serial (9600 baud) Serial.println("Arduino siap!"); } void loop() { // Dijalankan BERULANG TERUS-MENERUS // Ini adalah "jantung" program Arduino Serial.println("Halo dari Arduino!"); delay(1000); // Tunggu 1000ms = 1 detik }
๐ก LED Blink โ "Hello World" Arduino
const int LED_PIN = 13; // LED bawaan Arduino Uno void setup() { pinMode(LED_PIN, OUTPUT); // Set pin sebagai OUTPUT } void loop() { digitalWrite(LED_PIN, HIGH); // Nyalakan LED delay(500); // Tunggu 500ms digitalWrite(LED_PIN, LOW); // Matikan LED delay(500); // Tunggu 500ms // Total: LED kedip 1 kali per detik } // Variasi: Pola SOS (... --- ...) void kedip(int durasi) { digitalWrite(LED_PIN, HIGH); delay(durasi); digitalWrite(LED_PIN, LOW); delay(200); }
๐ Membaca Tombol (Button)
const int BTN_PIN = 2; const int LED_PIN = 13; void setup() { pinMode(BTN_PIN, INPUT_PULLUP); // INPUT_PULLUP: tombol aktif LOW (0) pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { int statusTombol = digitalRead(BTN_PIN); if (statusTombol == LOW) { // LOW = tombol ditekan (karena PULLUP) digitalWrite(LED_PIN, HIGH); // Nyalakan LED Serial.println("Tombol DITEKAN!"); } else { digitalWrite(LED_PIN, LOW); // Matikan LED } }
๐ก๏ธ Membaca Sensor Analog
const int SENSOR_PIN = A0; // Pin analog A0 const int LED_PIN = 9; // Pin PWM untuk kontrol kecerahan void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { int nilaiSensor = analogRead(SENSOR_PIN); // Baca nilai 0-1023 // Map nilai sensor ke rentang lain int kecerahan = map(nilaiSensor, 0, 1023, 0, 255); analogWrite(LED_PIN, kecerahan); // PWM: 0=mati, 255=terang penuh // Konversi ke tegangan float tegangan = nilaiSensor * (5.0 / 1023.0); Serial.print("Sensor: "); Serial.print(nilaiSensor); Serial.print(" | Tegangan: "); Serial.print(tegangan); Serial.println("V"); delay(500); }
๐ก๏ธ Sensor Suhu & Kelembaban (DHT11/DHT22)
#include <DHT.h> #define DHT_PIN 4 // Pin data DHT terhubung ke pin 4 #define DHT_TYPE DHT11 // DHT11 atau DHT22 DHT dht(DHT_PIN, DHT_TYPE); // Buat objek sensor void setup() { Serial.begin(9600); dht.begin(); Serial.println("Sensor DHT siap!"); } void loop() { delay(2000); // DHT butuh jeda minimal 2 detik antar pembacaan float suhu = dht.readTemperature(); // Celcius float kelembaban = dht.readHumidity(); // Persen (%) // Cek apakah pembacaan gagal if (isnan(suhu) || isnan(kelembaban)) { Serial.println("Gagal membaca sensor!"); return; } Serial.print("Suhu: "); Serial.print(suhu); Serial.println("ยฐC"); Serial.print("Kelembaban: "); Serial.print(kelembaban); Serial.println("%"); }
โ๏ธ Servo Motor
#include <Servo.h> // Library built-in Arduino IDE Servo servo1; // Buat objek servo const int SERVO_PIN = 9; void setup() { servo1.attach(SERVO_PIN); // Hubungkan servo ke pin 9 } void loop() { // Gerakkan servo dari 0ยฐ ke 180ยฐ bertahap for (int sudut = 0; sudut <= 180; sudut++) { servo1.write(sudut); // Set sudut (0-180 derajat) delay(15); } // Balik dari 180ยฐ ke 0ยฐ for (int sudut = 180; sudut >= 0; sudut--) { servo1.write(sudut); delay(15); } }
๐ฑ Blynk IoT โ Kontrol via Smartphone
/* Contoh: ESP8266/ESP32 + Blynk โ kontrol LED dari HP */ #define BLYNK_TEMPLATE_ID "TMPLxxxxxx" #define BLYNK_TEMPLATE_NAME "Proyek IoT Saya" #define BLYNK_AUTH_TOKEN "YourAuthTokenHere" #include <ESP8266WiFi.h> // Ganti ESP32WiFi.h jika pakai ESP32 #include <BlynkSimpleEsp8266.h> char ssid[] = "NamaWiFimu"; char pass[] = "PasswordWiFi"; const int LED_PIN = 2; // Fungsi otomatis dipanggil saat Virtual Pin V0 berubah dari aplikasi BLYNK_WRITE(V0) { int nilai = param.asInt(); // 1 = ON, 0 = OFF dari tombol di app digitalWrite(LED_PIN, nilai); } void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Koneksi ke Blynk Cloud } void loop() { Blynk.run(); // WAJIB ada โ proses komunikasi Blynk // Kirim data sensor ke Virtual Pin V1 setiap 2 detik static unsigned long lastSend = 0; if (millis() - lastSend > 2000) { Blynk.virtualWrite(V1, analogRead(A0)); lastSend = millis(); } }
๐ Referensi Fungsi Arduino
Pin & Digital
pinMode(pin, mode)
Set mode pin: INPUT, OUTPUT, INPUT_PULLUP
digitalWrite(pin, val)
Set pin digital: HIGH (1) atau LOW (0)
digitalRead(pin)
Baca nilai pin digital: HIGH atau LOW
analogWrite(pin, val)
PWM output, val = 0-255 (pin ~)
analogRead(pin)
Baca pin analog A0-A5, nilai 0-1023
Waktu & Utilitas
delay(ms)
Jeda eksekusi selama N milidetik
delayMicroseconds(us)
Jeda dalam mikrodetik
millis()
Milidetik sejak Arduino menyala (non-blocking)
micros()
Mikrodetik sejak Arduino menyala
map(val, in_min, in_max, out_min, out_max)
Konversi nilai antar rentang
constrain(val, min, max)
Batasi nilai dalam rentang
random(max)
Angka acak 0 s/d max-1
Mulai Proyek IoT Pertamamu!
Unduh Arduino IDE dari arduino.cc, hubungkan board Arduino Uno atau ESP8266 via USB, pilih Board & Port yang sesuai, lalu upload sketchmu! Gunakan Serial Monitor (Ctrl+Shift+M) untuk debug.