Learn/ Coding/ Dasar IoT & Arduino
Referensi ยท Arduino ยท IoT

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

setup() โ€” Berjalan sekali saat Arduino dinyalakan. Gunakan untuk konfigurasi pin dan inisialisasi.
loop() โ€” Berjalan terus-menerus selama Arduino hidup. Letakkan logika utama di sini.
Pin Digital vs Analog โ€” Digital: 0 atau 1 (HIGH/LOW). Analog: nilai 0โ€“1023 (membaca sensor).

๐Ÿ—๏ธ 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

Pin 13 โ†’ LED bawaan Arduino ada di pin 13 (atau gunakan LED eksternal)
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)

Pin 2โ†’ Tombol Pin 13โ†’ LED
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

A0โ†’ Potensiometer / LDR / Sensor Suhu
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)

โš™๏ธ Install library: Sketch โ†’ Include Library โ†’ Manage Libraries โ†’ cari "DHT sensor library" by Adafruit
#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

๐Ÿ“ฒ Buat akun di blynk.cloud, buat template baru, tambahkan datastream, lalu salin Auth Token. Install library: Library Manager โ†’ "Blynk"
/* 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.