Minggu, 12 Oktober 2025

Program running text (tulisan berjalan) untuk Arduino Uno dan modul tampilan matriks LED 8×32 MAX7219




Program running text (tulisan berjalan) untuk Arduino Uno dan modul tampilan matriks LED MAX7219, menggunakan teks "SELAMAT DATANG".

Anda akan menggunakan pustaka MD_Parola dan MD_MAX72XX karena pustaka ini sangat efektif untuk membuat teks berjalan pada banyak modul MAX7219 yang disambung berantai (daisy-chained).

Persiapan Awal

1. Pemasangan Pustaka (Library Installation)

Anda perlu menginstal dua pustaka melalui Library Manager di Arduino IDE:

  • MD_MAX72XX

  • MD_Parola

Buka Sketch > Include Library > Manage Libraries... dan cari serta instal kedua pustaka tersebut.

2. Pengkabelan (Wiring)

Modul biasanya terdiri dari empat modul yang disambung berantai. Sambungkan pin-pin dari modul MAX7219 pertama ke Arduino Uno Anda (atau board yang kompatibel) sebagai berikut:

MAX7219 ModulPin Arduino Uno
VCC5V
GNDGND
DINPin Digital 11 (MOSI)
CLKPin Digital 13 (SCK)
CSPin Digital 10 (SS/LOAD)

Catatan Penting:

  • Disarankan untuk menggunakan pin SPI Hardware (Pin 11, 13, 10 pada Uno) untuk kinerja yang lebih baik.

  • Modul yang terdiri dari 4 modul dapat menarik arus yang cukup besar. Untuk penggunaan yang stabil, terutama jika kecerahan disetel tinggi, sebaiknya gunakan catu daya eksternal 5V terpisah untuk modul LED (pastikan GND Arduino dan GND catu daya eksternal terhubung).


Kode Program Arduino

Salin dan tempel kode berikut ke Arduino IDE Anda:

Arduino
#include <MD_Parola.h>
#include <MD_MAX72XX.h>
#include <SPI.h>

// Definisikan tipe hardware Anda. 
// Pilihan umum termasuk FC16_HW atau GENERIC_HW.
// Sesuaikan jika tampilan Anda tidak berfungsi.
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW

// Tentukan jumlah modul 8x8 yang disambung berantai.
// Untuk tampilan 8x32, jumlah modulnya adalah 4 (8 * 4 = 32)
#define MAX_DEVICES 4

// Tentukan pin CS (Chip Select) yang terhubung ke Arduino
#define CS_PIN 10 

// Teks yang akan ditampilkan
#define SCROLL_TEXT "SELAMAT DATANG"

// Buat objek MD_Parola
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// Kecepatan teks berjalan (dalam milidetik). Nilai yang lebih kecil = lebih cepat. (Misalnya 35 - 150)
const uint8_t SCROLL_SPEED = 70; 
// Efek teks, PA_SCROLL_LEFT adalah yang paling umum untuk teks berjalan
const textEffect_t SCROLL_EFFECT = PA_SCROLL_LEFT; 
// Penjajaran teks
const textPosition_t SCROLL_ALIGN = PA_LEFT; 
// Jeda setelah pesan selesai (dalam milidetik)
const uint16_t SCROLL_PAUSE = 0; 

void setup() {
  Serial.begin(57600);
  
  // Inisialisasi tampilan
  myDisplay.begin();
  
  // Atur intensitas (kecerahan) tampilan (0-15)
  // Atur ke nilai yang lebih rendah jika menggunakan daya dari USB Arduino
  myDisplay.setIntensity(4); 
  
  // Bersihkan tampilan
  myDisplay.displayClear();
  
  // Konfigurasi teks berjalan
  myDisplay.setTextAlignment(SCROLL_ALIGN);
  myDisplay.setTextEffect(SCROLL_EFFECT, SCROLL_EFFECT);
  myDisplay.setSpeed(SCROLL_SPEED);
  myDisplay.setPause(SCROLL_PAUSE);
  
  // Setel teks untuk animasi pertama (running text)
  myDisplay.displayScroll(SCROLL_TEXT, PA_LEFT, PA_SCROLL_LEFT, SCROLL_SPEED);
}

void loop() {
  // myDisplay.displayAnimate() adalah fungsi utama yang melakukan animasi teks.
  // Jika animasi selesai, kita akan me-reset-nya untuk mengulang.
  if (myDisplay.displayAnimate()) {
    // Reset animasi untuk mulai dari awal lagi (running text berulang)
    myDisplay.displayReset();
  }
}

Penjelasan Kode

Definisi

  • #define HARDWARE_TYPE MD_MAX72XX::FC16_HW: Mengatur tipe modul. FC16_HW umum digunakan untuk modul 4-in-1 (yang membentuk ). Jika tidak berfungsi, coba ganti dengan MD_MAX72XX::GENERIC_HW.

  • #define MAX_DEVICES 4: Menunjukkan ada 4 modul yang disambung, membentuk .

  • #define CS_PIN 10: Menentukan pin Chip Select (CS) atau LOAD yang terhubung ke Arduino.

  • MD_Parola myDisplay = MD_Parola(...): Membuat objek utama untuk mengontrol tampilan dan animasi.

  • #define SCROLL_TEXT "SELAMAT DATANG": Teks yang akan berjalan.

void setup()

  • myDisplay.begin(): Memulai komunikasi dengan modul MAX7219.

  • myDisplay.setIntensity(4): Mengatur kecerahan (0-15).

  • myDisplay.displayScroll(...): Mengatur teks dan parameter animasi awal:

    • SCROLL_TEXT: Teksnya.

    • PA_LEFT: Penjajaran teks.

    • PA_SCROLL_LEFT: Efek entri (masuk dari kanan).

    • SCROLL_SPEED: Kecepatan berjalan.

void loop()

  • if (myDisplay.displayAnimate()): Fungsi ini harus dipanggil di loop() untuk menjalankan animasi. Fungsi ini mengembalikan true ketika animasi saat ini selesai.

  • myDisplay.displayReset(): Jika animasi selesai, fungsi ini mengatur ulang tampilan ke awal, sehingga teks "SELAMAT DATANG" akan berjalan secara berulang.

Jam Digital dengan Arduino Uno, Dot Matrix (MAX7219), dan RTC DS3231



Panduan lengkap untuk membuat Jam Digital dengan Arduino Uno, Dot Matrix (MAX7219), dan RTC DS3231, lengkap dengan fitur teks berjalan yang menampilkan pesan "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya" secara bergantian.

🛠️ Komponen yang Dibutuhkan

  1. Arduino Uno x1

  2. Modul Dot Matrix (Disarankan modul -in- dengan chip MAX7219) x1

  3. Modul RTC DS3231 x1

  4. Kabel Jumper


🔌 Rangkaian Komponen (Wiring Diagram)

Proyek ini menggunakan dua jenis komunikasi: I2C untuk RTC DS3231 dan SPI untuk Dot Matrix MAX7219.

1. Koneksi RTC DS3231 (I2C)

DS3231 PinArduino Uno PinKeterangan
VCCCatu daya
GNDGNDGround
SCLA5Clock I2C
SDAA4Data I2C

2. Koneksi Dot Matrix MAX7219 (SPI)

MAX7219 PinArduino Uno PinKeterangan
VCCCatu daya
GNDGNDGround
DIN (Data In)D11Pin Data (MOSI)
CLK (Clock)D13Pin Clock (SCK)
CS (Chip Select/LOAD)D10Pin Chip Select

💻 Kode Program (Sketch Arduino)

1. Instalasi Library

Pastikan Anda telah menginstal dua library utama ini melalui Arduino IDE > Sketch > Include Library > Manage Libraries...:

  1. RTClib (oleh Adafruit)

  2. MD_Parola dan MD_MAX72xx (oleh MajicDesigns)

2. Kode Lengkap

Gunakan kode berikut. Logika di dalamnya akan menampilkan Jam selama 10 detik dan Teks Berjalan selama animasi teks selesai (sekitar 10 detik), dan berulang.

C++
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h" 

// --- DEFNISI HARDWARE ---
// Tipe hardware (umumnya FC16_HW untuk modul 4-in-1)
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW 
// Jumlah modul 8x8 yang dirangkai (biasanya 4)
#define MAX_DEVICES 4 

// Pin koneksi SPI ke Arduino Uno
#define CS_PIN    10 

// --- INISIALISASI OBJEK ---
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
RTC_DS3231 rtc; 

// --- VARIABEL GLOBAL ---
// Buffer untuk string waktu (HH:MM:SS)
char timeChar[9]; 

// Pesan Teks Berjalan
const char MESSAGE[] = "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya";

// Variabel untuk mengelola pergantian mode tampilan
unsigned long previousMillis = 0;
// Interval minimal untuk mode jam digital sebelum beralih ke teks berjalan (10 detik)
const long interval = 10000; 
bool isClockMode = true;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  
  // Inisialisasi Dot Matrix
  P.begin();
  P.setIntensity(0); // Kecerahan 0 (tergelap) sampai 15 (terang)
  P.displayClear();

  // Inisialisasi RTC
  if (! rtc.begin()) {
    Serial.println("Tidak dapat menemukan modul RTC");
    while (1); 
  }
  
  /* * HANYA JALANKAN SEKALI UNTUK MENGATUR WAKTU AWAL!
   * Setelah waktu diatur, beri komentar pada baris di bawah ini.
   * rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
   */
   
  // Atur mode tampilan awal menjadi jam
  P.setTextAlignment(PA_CENTER);
  P.setTextEffect(PA_PRINT, PA_NO_EFFECT);
  previousMillis = millis();
}

void loop() {
  // Fungsi ini WAJIB dijalankan. Akan mengembalikan TRUE jika animasi selesai.
  if (P.displayAnimate()) { 
    // Jika animasi teks berjalan selesai, atau sudah waktunya ganti mode
    unsigned long currentMillis = millis();
    
    // Logika Pergantian Mode Tampilan
    if (currentMillis - previousMillis >= interval || !isClockMode) {
      previousMillis = currentMillis;
      isClockMode = !isClockMode; // Balik mode
      
      // Persiapkan tampilan baru
      if (isClockMode) {
        // Mode Jam Digital
        P.setTextAlignment(PA_CENTER);
        P.setTextEffect(PA_PRINT, PA_NO_EFFECT); 
      } else {
        // Mode Teks Berjalan
        P.setTextAlignment(PA_LEFT);
        // Tampilkan teks berjalan ke kiri dengan kecepatan 50ms per kolom
        P.displayScroll(MESSAGE, PA_LEFT, PA_SCROLL_LEFT, 50); 
      }
    }
  }

  // Logika tampilan Jam Digital (hanya berjalan saat isClockMode = true)
  if (isClockMode) {
    DateTime now = rtc.now();
    // Format waktu ke HH:MM:SS
    sprintf(timeChar, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    P.print(timeChar);
  }
}

💡 Petunjuk Penggunaan Kode

  1. Pengaturan Waktu Awal:

    • Cari baris ini di fungsi setup(): // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    • Hapus tanda komentar (//) dan upload kode. Ini akan menyetel RTC ke waktu komputer Anda saat kode dikompilasi.

    • Setelah upload pertama berhasil, TAMBAHKAN KEMBALI TANDA KOMENTAR (//) pada baris tersebut. Jika tidak, jam akan disetel ulang setiap kali Arduino dinyalakan.

  2. Mode Tampilan:

    • Tampilan akan berada dalam Mode Jam Digital selama 10 detik.

    • Setelah itu, tampilan akan beralih ke Mode Teks Berjalan dan menampilkan "Waktu tidak akan pernah kembali, jadi hargailah setiap detiknya".

    • Setelah pesan selesai bergulir, tampilan akan kembali ke Mode Jam Digital, dan seterusnya.

Selasa, 30 September 2025

💾 Kode Arduino: Sensor Hujan dan Servo

 


💾
Kode Arduino: Sensor Hujan dan Servo

Ini adalah sketsa (sketch) Arduino yang menghubungkan sensor hujan digital dan sebuah servo motor.

C++



// Sertakan library Servo

#include <Servo.h>

 

// Definisikan pin

const int PIN_SENSOR_HUJAN = 8; // Pin Digital tempat sensor hujan dihubungkan (Output D0)

const int PIN_SERVO = 9;        // Pin PWM (~) tempat servo dihubungkan

 

// Buat objek Servo

Servo myservo;

 

// Definisikan posisi servo

const int POSISI_TERTUTUP = 10;  // Sudut servo saat "Tertutup" (Misalnya, 10 derajat)

const int POSISI_TERBUKA = 170; // Sudut servo saat "Terbuka" (Misalnya, 170 derajat)

 

void setup() {

  // Inisialisasi komunikasi serial untuk debugging

  Serial.begin(9600);

  Serial.println("Sistem Sensor Hujan dan Servo Aktif!");

 

  // Atur pin sensor hujan sebagai INPUT

  pinMode(PIN_SENSOR_HUJAN, INPUT);

 

  // Lampirkan objek servo ke pin

  myservo.attach(PIN_SERVO);

 

  // Set posisi awal servo ke posisi "Terbuka"

  myservo.write(POSISI_TERBUKA);

  Serial.println("Posisi awal: Terbuka");

}

 

void loop() {

  // Baca nilai dari sensor hujan (HIGH = Kering, LOW = Basah)

  // Catatan: Ini berlaku untuk modul sensor hujan yang memiliki output D0 (digital)

  int statusHujan = digitalRead(PIN_SENSOR_HUJAN);

 

  if (statusHujan == LOW) {

    // KONDISI 1: HUJAN TERDETEKSI (Sensor mengeluarkan LOW)

    Serial.println("💧 Hujan Terdeteksi! Servo bergerak ke posisi TERTUTUP.");

    // Gerakkan servo ke posisi "Tertutup"

    myservo.write(POSISI_TERTUTUP);

    delay(500); // Tunda sebentar agar servo punya waktu bergerak

  } else {

    // KONDISI 2: KERING (Sensor mengeluarkan HIGH)

    Serial.println("️ Kering. Servo bergerak ke posisi TERBUKA.");

    // Gerakkan servo ke posisi "Terbuka"

    myservo.write(POSISI_TERBUKA);

    delay(500); // Tunda sebentar agar servo punya waktu bergerak

  }

 

  // Tunda sebentar sebelum pembacaan berikutnya

  delay(2000); // Cek status hujan setiap 2 detik

}


🛠️ Konfigurasi Perangkat Keras (Wiring)

Anda perlu menghubungkan komponen ke papan Arduino (misalnya Arduino Uno) sebagai berikut:

1. Sensor Hujan (Modul Digital Output)

Pin Sensor

Pin Arduino

Keterangan

VCC

5V

Sumber daya

GND

GND

Ground

D0 (Digital Out)

Digital Pin 8

Input digital status hujan

Export to Sheets

2. Servo Motor (3 Kabel)

Kabel Servo

Pin Arduino

Keterangan

Coklat/Hitam

GND

Ground

Merah

5V

Sumber daya

Oranye/Kuning

Digital Pin 9 (PWM ~)

Sinyal kontrol servo

Export to Sheets

⚠️ Perhatian: Servo motor, terutama yang berukuran besar, dapat menarik arus yang besar. Untuk keandalan, sebaiknya servo ditenagai dari sumber daya eksternal yang terpisah dari 5V Arduino, tetapi pastikan GND Arduino dan sumber daya eksternal terhubung (common ground).


⚙️ Cara Kerja Kode

  1. #include <Servo.h>: Mengimpor library yang memudahkan kontrol motor servo.
  2. const int PIN_SENSOR_HUJAN = 8;: Sensor hujan dihubungkan ke pin digital 8. Output digital (D0) sensor hujan akan bernilai LOW saat basah/hujan dan HIGH saat kering.
  3. myservo.attach(PIN_SERVO);: Mengatur pin 9 sebagai pin kontrol untuk servo.
  4. void loop():
    • int statusHujan = digitalRead(PIN_SENSOR_HUJAN);: Membaca status pin 8.
    • if (statusHujan == LOW): Jika sensor basah (hujan), servo digerakkan ke posisi POSISI_TERTUTUP (10 derajat).
    • else: Jika sensor kering, servo digerakkan ke posisi POSISI_TERBUKA (170 derajat).
  5. Nilai POSISI_TERTUTUP dan POSISI_TERBUKA dapat Anda sesuaikan antara 0 hingga 180 derajat agar sesuai dengan mekanisme yang Anda buat (misalnya, penutup jendela).

 

Senin, 01 September 2025

( Project Ultrasonic dan Buzzer)

( Project Ultrasonic dan Buzzer) 

A. ALAT DAN BAHAN

     1. Arduino Uno
     2. Sensor Ultrasonic / HC-SR04
     3. Buzzer
     4. Kabel Jumper
B. GAMBAR RANGKAIAN
 Keterangan :
- Sensor Ultrasonic
   pin Trigger -----> Pin 11 Arduino
   pin Echo     -----> Pin 12 Arduino
   Vcc             -----> 5v Arduino
   Gnd            -----> GND Arduino

- Buzzer
  Kaki (+)       ----->Pin 4 Arduino
  Kaki (-)        ----->Pin GND Arduino



C. KODE PEMROGRAMAN
int trig = 11;
int echo = 12;
long durasi, jarak;

int pinBuzzer = 4;

void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);   
  pinMode(echo, INPUT);
  pinMode(pinBuzzer, OUTPUT);       
}

void loop() {
  digitalWrite(trig, LOW);
  delayMicroseconds(8);
  digitalWrite(trig, HIGH);
  delayMicroseconds(8);
  digitalWrite(trig, LOW);
  delayMicroseconds(8);

  durasi = pulseIn(echo, HIGH);
  jarak = (durasi / 2) / 29.1; 
  Serial.print(jarak);
  Serial.println(" cm");

  if(jarak < 60){
    digitalWrite(pinBuzzer, HIGH);
    delay(200);
    digitalWrite(pinBuzzer, LOW);
    delay(200);
    digitalWrite(pinBuzzer, HIGH);
    delay(200);
    digitalWrite(pinBuzzer, LOW);
    delay(1000);
  }else{
    digitalWrite(pinBuzzer, LOW);
  }
}

Selasa, 12 Agustus 2025

MEMBUAT PALANG PINTU OTOMATIS #1

 MEMBUAT PALANG PINTU OTOMATIS #1



langsung saja untuk bahan-bahan yang dibutuhkan sbb:
  • 1 buah Arduino UNO.
  • 1 buah sensor Ultrasonic HC-SR04
  • 1 Buah Servo, 
  • Breadboard/Projectboard 
  • Kabel jumper secukupnya,
Untuk Gambar Rangkaiannya sbb:

Keterangan Rangkaian :

  • Kabel Data Untuk Servo (Biasanya Berwarna Orange/kuning) ===> pin 10 Arduino

  • Pin Trigger Sensor Ultrasonic HC-SR04 ===> pin 8 Arduino

  • Pin Echo Sensor Ultrasonic HC-SR04 ===> pin 9 Arduino

  • Kabel VCC Untuk Servo (Biasanya Berwarna Merah) ===> 5V

  • Kaki VCC pada Sensor Ultrasonic HC-SR04 ===> 5V

  • Kaki ground atau kabel hitam pada masing-masing komponen ===> Gnd pada arduino

Source codenya sbb:
    // menambahkan lubrary Servo
    #include <Servo.h>
    
    // inialisasi variabel untuk servo
    Servo servo1;
    
    // inialisasi pin ultrasonic
    const int pinTRIGGER = 8;
    const int pinECHO = 9;
    
    // inialisasi variabel pembacaan sensor ultrasonic
    // gunakan "float" untuk angka dengan koma
    // atau gunakan "int" untuk angka tanpa koma
    float durasi, jarak;
    
    
    // ======================= program pengaturan awal ====================== //
    void setup()
    {
    // inialisasi baud rate serial monitor
    Serial.begin(9600);
    
    // inialisasi pin servo
    servo1.attach(10);
    
    // menulis derajat awal servo (menutup)
    servo1.write(0);
    
    // inialisasi stauts I/O pin
    pinMode(pinTRIGGER, OUTPUT);
    pinMode(pinECHO, INPUT);
    
    delay(1000);
    }
    
    
    // ============================== program utama ============================= //
    void loop()
    {
    //pembacaan sesnor ulrasonic
    //Mengaktifak pin Trigger selama 10mikrodetik
    //Lalu dia non aktif
    digitalWrite(pinTRIGGER, HIGH);
    delayMicroseconds(10);
    digitalWrite(pinTRIGGER, LOW);
    
    //Mengaktifkan pin Echo yang menerima pantulan gelombang ultrasonik
    //pulseIn = Lama durasi pin Echo menerima pantulan gelombang
    //Menghitung rumus jarak(Lama durasi dibagi dua)
    durasi = pulseIn(pinECHO, HIGH);
    jarak = ((durasi * 0.034) / 2);
    
    // menulis data pembacaan ultrasonic pada serial monitor
    // jadi kita tahu jarak obejak yang terbaca
    Serial.print("Jarak");
    Serial.println(jarak);
    
    
    // program buka tutup servo otomatis
    // jika jarak objek terbaca <= 7 cm
    // ubah dan sesuaikan jarak objek saat buka di sini, satuan cm
    if (jarak <= 7)
    {
    // servo membuka, mnuju derajat 90
    // ubah dan asesuaikan derajat buka di sini
    servo1.write(90);
    
    // delay membuka servo
    // di sini disetting 3 detik membukanya
    // ubah durasi buka di sini
    delay(3000);
    
    // servo menutup kembali, menuju derajat 0
    // ubah dan sesuaikan derajat tutup di sini
    servo1.write(0);
    }
    
    // jika jarak objek terbaca lebih dari pernyataan di atas
    else
    {
    // servo menutup, menuju derajat 0
    // ubah dan sesuaikan derajat tutup di sini
    servo1.write(0);
    }
    
    
    // delay program
    delay(100);
    
    }
    Atau bisa di download di link Ini

    Untuk link library bisa didownloaddi  Library Servo