0% menganggap dokumen ini bermanfaat (0 suara)
161 tayangan63 halaman

E-Book Tutorial Esp32 Pada Arduino Ide

Dokumen ini menjelaskan cara menambahkan board ESP32 pada Arduino IDE, termasuk langkah-langkah instalasi dan pengujian. Selain itu, juga mencakup contoh kode untuk mengontrol LED menggunakan PWM dan menghubungkan sensor ultrasonik HC-SR04 dengan ESP32. Penjelasan mencakup skematik, program, dan cara kerja masing-masing contoh.

Diunggah oleh

Elsa Sumita
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
161 tayangan63 halaman

E-Book Tutorial Esp32 Pada Arduino Ide

Dokumen ini menjelaskan cara menambahkan board ESP32 pada Arduino IDE, termasuk langkah-langkah instalasi dan pengujian. Selain itu, juga mencakup contoh kode untuk mengontrol LED menggunakan PWM dan menghubungkan sensor ultrasonik HC-SR04 dengan ESP32. Penjelasan mencakup skematik, program, dan cara kerja masing-masing contoh.

Diunggah oleh

Elsa Sumita
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 63

MOSTERCHIP INDONESIA

IG: @MOSTERCHIPINDONESIA
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

1. MENAMBAHKAN BOARD ESP32 PADA IDE ARDUINO


Menginstal Add-on ESP32 di Arduino IDE
Untuk memasang papan ESP32 di Arduino IDE Kita, ikuti petunjuk berikut ini:
Pada Arduino IDE Kita, buka File > Preferences

Masukkan link berikut ini ke dalam bidang "Additional Board Manager URL":
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-
pages/package_esp32_index.json

Kemudian, klik tombol "OK":

Catatan: jika Kita sudah memiliki URL papan ESP8266, Kita dapat memisahkan URL
dengan koma sebagai berikut:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-
pages/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Open Board Manager. Tools > Boards > Board Manager

Cari ESP32 dan tekan tombol INSTALL untuk " ESP32 oleh Espressif System":

Tunggu beberapa detik hingga muncul tulisan “INSTALLED”


MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Instalasi Pengujian
Pilih Board Kita di Tools > Board (DOIT ESP32 DEVKIT V1)

Pilih Port (jika Kita tidak melihat Port COM di Arduino IDE Kita, Kita perlu
menginstal CP210x USB to UART Bridge VCP Drivers)
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Buka contoh berikut di bawah; File > Example > WiFi (ESP32) > WiFiScan

Sketsa baru terbuka di Arduino IDE Kita:

Tekan tombol Upload di Arduino IDE. Tunggu beberapa detik sementara kode
compiling dan uploading ke board Kita.

Jika Upload telah selesai maka akan muncul "Done Uploading".


MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Buka Serial Monitor disebelah kanan pada Arduino IDE dengan baud rate 115200:

Tekan tombol Enable on-board ESP32 dan Kita akan melihat jaringan yang
tersedia di dekat ESP32 Kita:

Penyelesaian Masalah
Jika Kita mencoba mengunggah sketsa baru ke ESP32 Kita dan Kita mendapatkan pesan
kesalahan ini “ Terjadi kesalahan fatal: Gagal menyambung ke ESP32: Waktu habis…
Menghubungkan… “. Artinya ESP32 Kita tidak dalam mode flashing/upload.

Setelah nama Board yang tepat dan port COM dipilih, ikuti langkah-langkah berikut:

Tahan tombol " BOOT " di papan ESP32 Kita

Tekan tombol " UPLOAD " di Arduino IDE untuk mengunggah sketsa Kita:

Setelah Kita melihat " Connect .... ” di Arduino IDE Kita, lepaskan jari dari tombol
“ BOOT “:
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Setelah itu, Kita akan melihat pesan “ Done uploading ”

IESP32 Kita harus menjalankan sketsa baru. Tekan tombol " Activate " untuk
memulai ulang ESP32 dan menjalankan sketsa baru yang diunggah.

2. UPLOAD CODE KE ESP32 MENGGUNAKAN ARDUINO IDE


2.1 Blink
a) PROGRAM
Blink
*/

// ledPin refers to ESP32 GPIO 23


const int ledPin = 23;

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin ledPin as an output.
pinMode(ledPin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Dalam kode ini, kita mengontrol LED yang terhubung ke GPIO 23.
const int ledPin = 23;

b) SKEMATIK
Catatan : selalu periksa pinout untuk spesifikasi board Kita sebelum merangkai sirkuit apa
pun.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

c) UPLOAD

Catatan: Jika Kita mendapatkan kesalahan berikut saat mencoba mengunggah kode, itu
berarti ESP32 Kita tidak dalam mode flashing/upload, maka lakukan seperti langkah
penyelesaian masalah diatas.
Failed to connect to ESP32: Timed out... Connecting...

d) DEMONSTRASI
Setelah mengupload kode, LED yang terhubung ke GPIO 23 akan berkedip setiap detik.

2.2 Pengontrol PWM LED ESP32


1) Bagian yang diperlukan
• ESP32 DOIT DEVKIT V1 Board – read best ESP32 development boards
• 3x 5mm LED
• 3x 330 Ohm resistor
• Breadboard
• Jumper wires

ESP32 memiliki pengontrol PWM LED dengan 16 saluran independen yang dapat
dikonfigurasi untuk menghasilkan sinyal PWM dengan properti yang berbeda.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Berikut langkah-langkah yang harus Kita ikuti untuk meredupkan LED dengan PWM
menggunakan Arduino IDE:

a) Pertama, Kita harus memilih saluran PWM. Ada 16 saluran dari 0 hingga 15.
b) Kemudian, Kita perlu mengatur frekuensi sinyal PWM. Untuk LED, frekuensi 5000 Hz
baik-baik saja untuk digunakan.
c) Kita juga perlu mengatur resolusi siklus tugas sinyal: Kita memiliki resolusi dari 1 hingga
16 bit. Kita akan menggunakan resolusi 8-bit, yang berarti Kita dapat mengontrol kecerahan
LED menggunakan nilai dari 0 hingga 255.
d) Selanjutnya, Kita perlu menentukan ke GPIO atau GPIO mana sinyal akan
muncul. Untuk itu Kita akan menggunakan fungsi berikut:

ledcAttachPin(GPIO, channel)

Fungsi ini menerima dua argumen, yang pertama adalah GPIO yang akan mengeluarkan
sinyal, dan yang kedua adalah saluran yang akan menghasilkan sinyal.
e) Terakhir, untuk mengontrol kecerahan LED menggunakan PWM, Kita menggunakan
fungsi berikut:

ledcWrite(channel, dutycycle)

Fungsi ini menerima sebagai argumen saluran yang menghasilkan sinyal PWM, dan siklus kerja.
Meredupkan LED

• SKEMATIK

(Skema ini menggunakan versi modul ESP32 DEVKIT V1 dengan 30 GPIO – jika Kita
menggunakan model lain, periksa pinout untuk papan yang Kita gunakan.)

• PROGRAM
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

// setting PWM properties


const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);

// attach the channel to the GPIO to be controlled


ledcAttachPin(ledPin, ledChannel);
}

void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

// decrease the LED brightness


for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
Kita mulai dengan menentukan pin yang dipasangi LED. Dalam hal ini LED terpasang
keGPIO 16.

const int ledPin = 16; // 16 corresponds to GPIO16

Kemudian, Kita mengatur properti sinyal PWM. Kita menentukan frekuensi 5000 Hz, memilih
saluran 0 untuk menghasilkan sinyal, dan menetapkan resolusi 8 bit. Kita dapat memilih
properti lain, yang berbeda dari ini, untuk menghasilkan sinyal PWM yang berbeda.

const int freq = 5000;


const int ledChannel = 0;
const int resolution = 8;

Dalam setup()Kita perlu mengonfigurasi PWM LED dengan properti yang telah Kita
tentukan sebelumnya dengan menggunakan ledcSetup()fungsi yang menerima sebagai
argumen, ledChannel, frekuensi, dan resolusi, sebagai berikut:

ledcSetup(ledChannel, freq, resolution);

Selanjutnya, Kita harus memilih GPIO yang akan menerima sinyal. Untuk itu gunakan
ledcAttachPin()fungsi yang menerima sebagai argumen GPIO tempat Kita ingin
mendapatkan sinyal, dan saluran yang menghasilkan sinyal. Dalam contoh ini, kita akan
mendapatkan sinyal di ledpin GPIO, yang sesuai denganGPIO 16. Saluran yang
menghasilkan sinyal adalah ledChannel, yang sesuai dengan saluran 0.

ledcAttachPin(ledPin, ledChannel);
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Dalam loop, Kita akan memvariasikan siklus tugas antara 0 dan 255 untuk meningkatkan
kecerahan LED.

for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){


// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

Dan kemudian, antara 255 dan 0 untuk mengurangi kecerahan.

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){


// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

Untuk mengatur kecerahan LED, Kita hanya perlu menggunakan ledcWrite()fungsi


yang menerima sebagai argumen saluran yang menghasilkan sinyal, dan siklus kerja.

ledcWrite(ledChannel, dutyCycle);

Karena kita menggunakan resolusi 8-bit, siklus tugas akan dikontrol menggunakan nilai dari
0 hingga 255. Perhatikan bahwa di ledcWrite()fungsinya kita menggunakan channel
yang menghasilkan sinyal, dan bukan GPIO.

• DEMONSTRASI
Upload kode ke ESP32 Kita. Pastikan Kita memilih Board dan port COM yang tepat. Lihatlah
rangkaian Kita. Kita harus memiliki LED redup yang meningkatkan dan menurunkan
kecerahan.

Mendapatkan Sinyal yang Sama pada GPIO yang Berbeda


Kita bisa mendapatkan sinyal yang sama dari saluran yang sama di GPIO yang
berbeda. Untuk mencapai itu, Kita hanya perlu melampirkan GPIO tersebut ke channel yang
sama di setup()

Mari kita ubah contoh sebelumnya untuk meredupkan 3 LED menggunakan sinyal PWM
yang sama dari channel yang sama.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• SKEMATIK

(Skema ini menggunakan versi modul ESP32 DEVKIT V1 dengan 30 GPIO – jika Kita menggunakan model
lain, periksa pinout untuk papan yang Kita gunakan.)

• PROGRAM
// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
const int ledPin2 = 17; // 17 corresponds to GPIO17
const int ledPin3 = 5; // 5 corresponds to GPIO5

// setting PWM properties


const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);

// attach the channel to the GPIO to be controlled


ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}

void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

ledcWrite(ledChannel, dutyCycle);
delay(15);
}

// decrease the LED brightness


for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}

Ini adalah kode yang sama dengan yang sebelumnya tetapi dengan beberapa
modifikasi. Kita telah mendefinisikan dua variabel lagi untuk dua LED baru, yang mengacu
padaGPIO 17danGPIO 5.

const int ledPin2 = 17; // 17 corresponds to GPIO17


const int ledPin3 = 5; // 5 corresponds to GPIO5

Kemudian, di setup(), kita telah menambahkan baris berikut untuk menetapkan kedua
GPIO ke saluran 0. Ini berarti bahwa kita akan mendapatkan sinyal yang sama, yang
dihasilkan pada saluran 0, di kedua GPIO.

ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);

• DEMONSTRASI
Upload sketsa baru ke ESP32 Kita. Pastikan Kita memilih board dan port COM yang
tepat. Sekarang, lihat rangkaian Kita:

Semua GPIO mengeluarkan sinyal PWM yang sama. Jadi, ketiga LED meningkatkan dan
menurunkan kecerahan secara bersamaan, menghasilkan efek yang disinkronkan.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

2.3 ESP32 dengan Sensor Ultrasonik HC-SR04 pada


Arduino IDE
Bagian yang Diperlukan
Untuk menyelesaikan tutorial ini Kita memerlukan bagian-bagian berikut:

• HC-SR04 Ultrasonic Sensor


• ESP32 (read Best ESP32 development boards)
• Breadboard
• Kabel Jumper

SKEMATIK
Hubungkan sensor ultrasonik HC-SR04 ke ESP32 seperti yang ditunjukkan pada diagram
skema berikut. Kita menghubungkan pin Trig ke GPIO 5 dan pin Echo ke GPIO 18, tetapi Kita
dapat menggunakan pin lain yang sesuai.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Sensor ultrasonik ESP32

VCC VIN

Trig GPIO 5

Echo GPIO 18

GND GND
PROGRAM
const int trigPin = 5;
const int echoPin = 18;

//define sound speed in cm/uS


#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distanceCm;
float distanceInch;

void setup() {
Serial.begin(115200); // Starts the serial communication
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculate the distance


distanceCm = duration * SOUND_SPEED/2;

// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;

// Prints the distance in the Serial Monitor


Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);

delay(1000);
}

CARA KERJA PROGRAM


Pertama, tentukan TRIG dan pin ECHO.

const int trigPin = 5;


const int echoPin = 18;

Dalam contoh ini, kita menggunakanGPIO 5danGPIO 18. Tetapi Kita dapat menggunakan
GPIO lain yang sesuai.
ISOUND_SPEEDvariabel menyimpan kecepatan suara di udara pada 20ºC. Kita
menggunakan nilai dalam cm/uS.

#define SOUND_SPEED 0.034

CM_TO_INCHvariabel memungkinkan kita untuk mengubah jarak dalam sentimeter ke inci.

#define CM_TO_INCH 0.393701

Kemudian, inisialisasi variabel berikut.

long duration;
float distanceCm;
float distanceInch;
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

duration variabel menghemat waktu perjalanan gelombang ultrasonik (waktu berlalu sejak
transmisi dan penerimaan gelombang pulsa). Itu distanceCm dan distanceInch, seperti
namanya, simpan jarak ke objek dalam sentimeter dan inci.

SETUP()
Dalam setup()inisialisasi komunikasi serial pada baud rate 115200 sehingga kita dapat
mencetak pengukuran pada Serial Monitor.

Serial.begin(115200); // Starts the serial communication

Tentukan pin trig sebagai OUTPUT—pin trigger memancarkan ultrasound. Dan tentukan pin
echo sebagai INPUT—pin echo menerima gelombang pantul dan mengirimkan sinyal ke
ESP32 yang sebanding dengan waktu tempuh.

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output


pinMode(echoPin, INPUT); // Sets the echoPin as an Input

LOOP()
Dalamloop(), baris berikut menghasilkan 10uS HIGH pulsa pada pin pemicu—ini berarti pin
akan memancarkan ultrasound. Perhatikan bahwa sebelum mengirim pulsa, kita memberikan
shortLOWpulsa untuk memastikan Kita bersihHIGHdetak.
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

Kita menggunakan pulseIn()fungsi untuk mendapatkan waktu tempuh gelombang suara:


duration = pulseIn(echoPin, HIGH);

Kemudian, kita cukup menghitung jarak ke suatu objek dengan memperhitungkan kecepatan
suara.
distanceCm = duration * SOUND_SPEED/2;

Ubah jarak menjadi inci:

distanceInch = distanceCm * CM_TO_INCH;

Dan terakhir, print hasilnya di Serial Monitor.

Serial.print("Distance (cm): ");


Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);

DEMONSTRASI
Upload program Kita. Jangan lupa untuk memilih board yang Kita gunakan di Tools >
Board. Juga, jangan lupa untuk memilih port COM yang tepat di Tools > Port .
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Setelah mengunggah, buka Serial Monitor pada baud rate 115200. Tekan tombol RST on-
board untuk memulai ulang papan dan itu akan mulai mencetak jarak ke objek terdekat pada
Serial Monitor. Sesuatu seperti yang ditunjukkan pada gambar di bawah ini.

2.4 ESP32 dengan HC-SR04 dan Layar OLED


MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Di bagian ini, kita akan menunjukkan contoh sederhana dengan ESP32 yang menampilkan
jarak pada layar OLED I2C.
Bagian yang Diperlukan
• HC-SR04 Ultrasonic Sensor
• ESP32
• Display OLED I2C
• Breadboard
• Kabel Jumper
SKEMATIK

LIBRARY & PROGRAM


Untuk menggunakan contoh ini, pastikan Kita telah menginstal library Adafruit SSD1306 dan
Adafruit GFX. Kita dapat menginstal library ini melalui Arduino Library Manager.
Buka Sketch > Library > Manage Libraries, cari “ SSD1306, ” dan instal library SSD1306 dari
Adafruit.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Setelah menginstal library SSD1306 dari Adafruit, ketik " GFX " di kotak pencarian dan instal
library.

Setelah menginstal library, restart Arduino IDE Anda.


Kemudian, cukup salin program berikut ke Arduino IDE Anda dan upload program tersebut
ke board.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels


#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)


Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int trigPin = 5;


const int echoPin = 18;

//define sound speed in cm/uS


#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
int distanceCm;
int distanceInch;

void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

pinMode(echoPin, INPUT); // Sets the echoPin as an Input

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(500);
display.clearDisplay();

display.setTextSize(2);
display.setTextColor(WHITE);
}

void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculate the distance


distanceCm = duration * SOUND_SPEED/2;

// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;

// Prints the distance in the Serial Monitor


Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);

display.clearDisplay();
display.setCursor(0, 25);
//Display distance in cm
display.print(distanceCm);
display.print(" cm");

// Display distance in inches


/* display.print(distanceInch);
display.print(" in");*/
display.display();

delay(500);
}

CARA KERJA PROGRAM


Mulailah dengan menyertakan pustaka yang diperlukan untuk tampilan OLED:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Tentukan lebar dan tinggi layar OLED. Kami menggunakan layar OLED 128x64:

#define SCREEN_WIDTH 128 // OLED display width, in pixels


#define SCREEN_HEIGHT 64 // OLED display height, in pixels
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Buat sebuahAdafruit_SSD1306objek yang disebut display untuk menangani tampilan


OLED.

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

Tentukan pin yang terhubung dengan sensor HC-SR04.

const int trigPin = 5;


const int echoPin = 18;

Buat variabel untuk menghemat jarak dan durasi antara transmisi dan penerimaan
gelombang suara.

long duration;
int distanceCm;
int distanceInch;

SETUP()

Dalam setup(), inisialisasi komunikasi serial pada baud rate 115200 sehingga kami dapat
mencetak hasilnya pada Serial Monitor.

Serial.begin(115200);

Tentukan pin trig sebagai OUTPUT dan pin echo sebagai INPUT.

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output


pinMode(echoPin, INPUT); // Sets the echoPin as an Input

Inisialisasi tampilan OLED:

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}

Atur ukuran dan warna font untuk tampilan.

display.setTextSize(2);
display.setTextColor(WHITE);

LOOP()
Dalam loop() adalah di mana kita akan mendapatkan jarak dan menampilkannya di
OLED.
Dapatkan jarak (kami sudah menjelaskan di bagian sebelumnya cara menghitung jarak).
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);

// Calculate the distance


distanceCm = duration * SOUND_SPEED/2;

// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;

Print Distance (jarak) pada Serial Monitor.

// Prints the distance on the Serial Monitor


Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);

Hapus tampilan di masing-masingloop()untuk menulis bacaan baru.

display.clearDisplay();

Atur kursor tampilan ke (0, 25).

display.setCursor(0, 25);

Baris berikut mencetak jarak dalam sentimeter di layar OLED.

// Display static text


display.print(distanceCm);
display.print(" cm");

Komentari baris sebelumnya dan batalkan komentar pada baris berikut jika Anda ingin
menampilkan pembacaan dalam inci.

/* Display distance in inches


display.print(distanceInch);
display.print(" in");*/

Terakhir, panggil display.display()untuk benar-benar menunjukkan pembacaan pada


OLED.

display.display();

Jarak diperbarui setiap 500 milidetik.

delay(500);

3. 1. Input Digital dan Output Digital ESP32 (Arduino IDE)


Dalam panduan ini, kita akan belajar cara membaca input digital seperti push button
dan mengontrol output digital seperti LED menggunakan ESP32 dengan Arduino IDE.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

1.1 Dasar-dasar ESP32


Kita akan memprogram ESP32 menggunakan Arduino IDE. Jadi, pastikan bahwa
Board ESP32 di Arduino IDE (Windows, Mac OS X, Linux) telah terinstal pada
software Arduino IDE.
1) Kontrol Output Digital ESP32
Pertama, Kita perlu mengatur GPIO yang akan kita kontrol sebagai
OUTPUT. Menggunakan fungsi pinMode() sebagai berikut:
pinMode(GPIO, OUTPUT);
Untuk mengontrol output digital, Kita hanya perlu menggunakan fungsi digitalRead(),
yang menerima sebagai perintah, GPIO (nomor int) yang Kita maksud, dan statusnya
HIGH atau LOW.
digitalWrite(GPIO, STATE);
Semua GPIO dapat digunakan sebagai output kecuali GPIO 6 hingga 11 (terhubung
ke flash SPI terintegrasi) dan GPIO 34, 35, 36 dan 39 (hanya input GPIO);
2) ESP32 Baca Input Digital
Pertama, atur GPIO yang ingin Kita baca sebagai INPUT, menggunakan fungsi
pinMode() sebagai berikut:
pinMode(GPIO, INPUT);
Untuk membaca input digital, seperti tombol, Kita menggunakan fungsi digitalRead(),
yang menerima sebagai perintah, GPIO (nomor int) yang Kita maksud.
digitalRead(GPIO);
Semua GPIO ESP32 dapat digunakan sebagai input, kecuali GPIO 6 hingga 11
(terhubung ke flash SPI terintegrasi).

3) Contoh Project
Untuk menunjukkan cara menggunakan input digital dan output digital, kita akan
membuat contoh project sederhana dengan tombol tekan dan LED. Kita akan
membaca status tombol dan menyalakan LED sesuai dengan yang diilustrasikan pada
gambar berikut.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

4) Bagian yang Diperlukan


Berikut daftar bagian yang Kita butuhkan untuk membangun sirkuit:

▪ ESP32
▪ LED 5mm
▪ Resistor 330 Ohm
▪ Push Button
▪ Resistor 10K Ohm
▪ Bread Board
▪ Kabel Jumper Male to Male

1.2 Diagram Skematik

Sebelum melanjutkan, Kita perlu merakit sirkuit dengan LED dan push
button. Kita akan menghubungkan LED ke GPIO 5dan push button untuk GPIO
4.

1.3 Kode Program

Salin kode berikut ke Arduino IDE Kita.

// Complete Instructions: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/

// set pin numbers


MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

const int buttonPin = 4; // the number of the pushbutton pin


const int ledPin = 5; // the number of the LED pin

// variable for storing the pushbutton status


int buttonState = 0;

void setup() {
Serial.begin(115200);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}

void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}

1) Cara Kerja Kode


Dalam dua baris berikut, Kita membuat variabel untuk menetapkan pin:
const int buttonPin = 4;
const int ledPin = 5;
push button terhubung keGPIO 4dan LED terhubung keGPIO 5. Saat menggunakan
Arduino IDE dengan ESP32, 4 sesuai denganGPIO 4dan 5 sesuai denganGPIO 5.
Selanjutnya, Kita membuat variabel untuk menahan status buttonstate. Secara
default, itu 0 (tidak ditekan).
int buttonState = 0;
Dalam setup(), Kita menginisialisasi tombol sebagai INPUT, dan LED sebagai
OUTPUT. Untuk itu, Kita menggunakan fungsi pinMode() menerima pin yang Kita
maksud, dan modenya: INPUT atau OUTPUT.
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);

Dalam loop() adalah tempat Kita membaca status buttonstate dan mengatur LED yang
sesuai.
Di baris berikutnya, Kita membaca status buttonstate dan menyimpannya dikeadaan
buttonstate. Seperti yang telah kita lihat sebelumnya, Kita menggunakan fungsi
digitalRead().
buttonState = digitalRead(buttonPin);
Pernyataan if berikut, memeriksa apakah status buttonstate adalah HIGH. Jika ya,
maka kita menyalakan LED menggunakan fungsi digitalWrite() yang menerima
sebagai perintah ledPin, dan state HIGH.
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Jika status buttonstate tidak HIGH, Kita mematikan LED. Setel saja LOW sebagai
perintah kedua dalam fungsi digitalWrite().
else {
digitalWrite(ledPin, LOW);
}

2) Mengupload Kode Program


Sebelum mengklik tombol upload, buka Tool > Board , dan pilih board yang Kita
gunakan. Dalam kasus saya, ini adalah board DOIT ESP32 DEVKIT V1.
Buka Tool > Port dan pilih port COM yang terhubung dengan ESP32. Kemudian,
tekan tombol upload dan tunggu pesan “ Done Uploading ”.

Jika Kita melihat banyak titik (…__…__) pada jendela debugging dan pesan “Failed
to connect to ESP32: Timed out waiting for packet header” , itu berarti Kita perlu
menekan tombol BOOT pada board ESP32 setelah titik mulai muncul.

1.4 Demonstrasi

Setelah mengunggah kode, uji sirkuit Kita. LED Kita akan menyala saat Kita menekan
tombol:

Dan mati saat Kita melepaskannya:


MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

4. 2. ESP32 ADC – Membaca Nilai Analog dengan Arduino IDE


Artikel ini menunjukkan cara membaca input analog dengan ESP32 menggunakan Arduino
IDE. Pembacaan analog berguna untuk membaca nilai dari resistor variabel seperti
potensiometer, atau sensor analog.

Membaca input analog dengan ESP32 semudah menggunakan fungsi


analogRead(GPIO), yang menerima sebagai perintah, GPIO yang ingin Kita baca.

2.1 Input Analog (ADC)


Membaca nilai analog dengan ESP32 berarti Kita dapat mengukur tingkat tegangan yang
bervariasi antara 0 V dan 3,3 V.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Tegangan yang diukur kemudian ditetapkan ke nilai antara 0 dan 4095, di mana 0 V sesuai
dengan 0, dan 3,3 V sesuai dengan 4095. Setiap tegangan antara 0 V dan 3,3 V akan
diberikan nilai yang sesuai di antaranya.

1) ADC adalah Non-linear


Idealnya, Kita akan mengharapkan reaksi linier saat menggunakan pin ADC ESP32. Namun,
itu tidak terjadi. Apa yang akan Kita dapatkan adalah reaksi seperti yang ditunjukkan pada
grafik berikut:

Reaksi ini berarti bahwa ESP32 Kita tidak dapat membedakan 3,3 V dari 3,2 V. Kita akan
mendapatkan nilai yang sama untuk kedua tegangan: 4095.
Hal yang sama terjadi untuk nilai tegangan yang sangat rendah: untuk 0 V dan 0,1 V Kita
akan mendapatkan nilai yang sama: 0. Kita harus mengingat hal ini saat menggunakan pin
ADC ESP32.
2) Fungsi analogRead()
Membaca input analog dengan ESP32 menggunakan Arduino IDE semudah
menggunakan fungsi analogRead(). Ia menerima sebagai perintah, GPIO yang ingin Kita
baca:
analogRead(GPIO);
ESP32 mendukung pengukuran di 18 pin berbeda. Hanya 15 yang tersedia pada
board DEVKIT V1 DOIT (versi dengan 30 GPIO).
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Ambil pinout papan ESP32 Kita dan temukan pin ADC. Ini disorot dengan batas merah pada
gambar di bawah.

Pin input analog ini memiliki resolusi 12-bit. Ini berarti bahwa ketika Kita membaca input
analog, jangkauannya dapat bervariasi dari 0 hingga 4095.
Catatan: Pin ADC2 tidak dapat digunakan saat Wi-Fi digunakan. Jadi, jika Kita
menggunakan Wi-Fi dan mengalami kesulitan mendapatkan nilai dari ADC2 GPIO,
Kita dapat mempertimbangkan untuk menggunakan ADC1 GPIO sebagai gantinya,
itu akan menyelesaikan masalah Kita.
3) Fungsi Berguna Lainnya
Ada fungsi lain yang lebih canggih untuk digunakan dengan pin ADC yang dapat berguna
dalam project lain.
▪ analogReadResolution(resolusi): mengatur bit sampel dan
resolusi. Ini bisa menjadi nilai antara 9 (0 – 511) dan 12 bit (0 –
4095). StKitarnya adalah resolusi 12-bit.
▪ analogSetWidth(lebar): mengatur bit sampel dan resolusi. Ini bisa
menjadi nilai antara 9 (0 – 511) dan 12 bit (0 – 4095). StKitarnya
adalah resolusi 12-bit.
▪ analogSetCycles(siklus): mengatur jumlah siklus per
sampel. Sekitarnya adalah 8. Rentang: 1 hingga 255.
▪ analogSetSamples(sampel): mengatur jumlah sampel dalam
kisaran. StKitarnya adalah 1 sampel. Ini memiliki efek meningkatkan
sensitivitas.
▪ analogSetClockDiv(atenuasi): mengatur pembagi untuk jam
ADC. StKitarnya adalah 1. Rentang: 1 hingga 255.
▪ analogSetAttenuation(pelemahan): mengatur redaman input untuk
semua pin ADC. StKitarnya adalahADC_11db. Nilai yang diterima:
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

▪ ADC_0db: tidak menetapkan redaman. ADC dapat


mengukur hingga sekitar 800 mV (input 1V = pembacaan
ADC 1088).
▪ ADC_2_5db: Tegangan input ADC akan dilemahkan,
memperpanjang rentang pengukuran hingga kira-
kira. 1100mV. (input 1V = pembacaan ADC 3722).
▪ ADC_6db: Tegangan input ADC akan dilemahkan,
memperpanjang rentang pengukuran hingga kira-kira. 1350
mV. (input 1V = pembacaan ADC 3033).
▪ ADC_11db: Tegangan input ADC akan dilemahkan,
memperpanjang rentang pengukuran hingga kira-kira. 2600
mV. (input 1V = pembacaan ADC 1575).
▪ analogSetPinAttenuation(pin, redaman): mengatur redaman input
untuk pin yang ditentukan. StKitarnya adalahADC_11db. Nilai redaman
sama dari fungsi sebelumnya.
▪ adcLampirkanPin(pin): Pasang pin ke ADC (juga menghapus mode
analog lain yang mungkin aktif). Mengembalikan hasil TRUE atau
FALSE.
▪ adcStart(pin),adcSibuk(pin)danresultadcEnd(pin): memulai
konversi ADC pada bus pin yang terpasang. Periksa apakah konversi
pada bus ADC pin sedang berjalan (mengembalikan TRUE atau
FALSE). Dapatkan hasil konversi: mengembalikan bilangan bulat 16-
bit.
4) Baca Nilai Analog dari Potensiometer dengan ESP32
Untuk melihat bagaimana semuanya terinstalasi, kita akan membuat contoh sederhana
untuk membaca nilai analog dari potensiometer.
Untuk contoh ini, Kita memerlukan bagian-bagian berikut:
▪ ESP32 DOIT DEVKIT V1 Board
▪ Potensiometer
▪ Bread Board
▪ Kabel Jumper Male to Male

2.2 Skema
Hubungkan potensiometer ke ESP32 Kita. Pin tengah potensiometer harus terhubung ke
GPIO 34. Kita dapat menggunakan diagram skema berikut sebagai referensi.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

2.3 Kode Program


Kita akan memprogram ESP32 menggunakan Arduino IDE, jadi pastikan Kita telah
menginstal add-on ESP32 sebelum melanjutkan:
Buka Arduino IDE Kita dan salin kode berikut.
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6)
const int potPin = 34;

// variable for storing the potentiometer value


int potValue = 0;

void setup() {
Serial.begin(115200);
delay(1000);
}

void loop() {
// Reading potentiometer value
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}

Kode ini hanya membaca nilai dari potensiometer dan mencetak nilai tersebut di Serial
Monitor.
Dalam kode, Kita mulai dengan menentukan GPIO yang terhubung dengan
potensiometer. Dalam contoh ini,GPIO 34.
const int potPin = 34;
Dalam setup(), inisialisasi komunikasi serial pada baud rate 115200.
Serial.begin(115200);
Dalam loop(), menggunakan analogRead() berfungsi untuk membaca input analog dari
potpin.
potValue = analogRead(potPin);
Terakhir, cetak nilai yang dibaca dari potensiometer di monitor serial.
Serial.println(potValue);
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Unggah kode yang diberikan ke ESP32 Kita. Pastikan Kita memilih papan kanan dan port
COM di menu Alat.

2.4 Demonstrasi
Setelah mengupload kode dan menekan tombol reset ESP32, buka Serial Monitor dengan
baud rate 115200. Putar potensiometer dan lihat nilainya berubah.

Nilai maksimum yang akan Kita dapatkan adalah 4095 dan nilai minimumnya adalah 0.

5. 3. ESP32 dengan Sensor


Gerak PIR menggunakan
Interupsi dan Timer
Tutorial ini menunjukkan cara mendeteksi gerakan dengan ESP32 menggunakan sensor
gerak PIR. Dalam contoh ini, ketika gerakan terdeteksi (interupsi dipicu), ESP32 memulai
pengatur waktu dan menyalakan LED selama beberapa detik yang telah ditentukan. Ketika
penghitung waktu selesai menghitung mundur, LED mati secara otomatis.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Dengan contoh ini kita juga akan mengeksplorasi dua konsep penting: interupsi dan timer.

3.1 Bagian yang Diperlukan


Untuk mengikuti tutorial ini Kita memerlukan bagian-bagian berikut:
▪ ESP32 DOIT DEVKIT V1 Board
▪ Sensor Gerak Mini PIR(AM312) atau Sensor Gerak PIR(HC-SR501)
▪ LED 5mm
▪ Resistor 330 Ohm
▪ Kabel Jumper Male to Male
▪ Bread Board

3.2 Pengertian Interupsi


Untuk memicu suatu peristiwa dengan sensor gerak PIR, Kita menggunakan
interupsi. Interupsi berguna untuk membuat sesuatu terjadi secara otomatis dalam program
mikrokontroler, dan dapat membantu memecahkan masalah waktu.
Dengan interupsi, Kita tidak perlu terus-menerus memeriksa nilai pin saat ini. Dengan
interupsi, ketika perubahan terdeteksi, suatu peristiwa dipicu (fungsi dipanggil).
Untuk mengatur interupsi di Arduino IDE, Kita menggunakan fungsi attachInterrupt(), yang
menerima sebagai perintah: pin GPIO, nama fungsi yang akan dieksekusi, dan mode:
attachInterrupt(digitalPinToInterrupt(GPIO), function,
mode);

Gangguan GPIO
Perintah pertama adalah nomor GPIO. Biasanya, Kita harus menggunakan
digitalPinToInterrupt (GPIO) untuk mengatur GPIO aktual sebagai pin interupsi. Misalnya,
jika Kita ingin menggunakanGPIO 27sebagai interupsi, gunakan:
digitalPinToInterrupt(27)
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Dengan papan ESP32, semua pin yang disorot dengan persegi panjang merah pada
gambar berikut dapat dikonfigurasi sebagai pin interupsi. Dalam contoh ini kita akan
menggunakanGPIO 27sebagai interupsi yang terhubung ke sensor PIR Motion.

Fungsi yang akan dipicu


Perintah kedua dari fungsi attachInterrupt() adalah nama fungsi yang akan dipanggil setiap
kali interupsi dipicu.
Mode
Perintah ketiga adalah mode. Ada 5 mode berbeda:
▪ LOW: untuk memicu interupsi setiap kali pin LOW;
▪ HIGH: untuk memicu interupsi setiap kali pin HIGH;
▪ CHANGE: untuk memicu interupsi setiap kali pin berubah nilai –
misalnya dari HIGH ke LOW atau LOW ke HIGH;
▪ FALLING: ketika pin berubah dari HIGH ke LOW;
▪ RISING: untuk memicu ketika pin berubah dari LOW ke HIGH.
Untuk contoh ini akan menggunakan mode RISING, karena ketika sensor gerak PIR
mendeteksi gerakan, maka GPIO yang terhubung akan berubah dari LOW ke HIGH.
3.3 Pengertian Timer
Dalam contoh ini kita juga akan memperkenalkan timer. Kita ingin LED tetap menyala
selama beberapa detik yang telah ditentukan setelah gerakan terdeteksi. Alih-alih
menggunakan fungsi delay() yang memblokir kode Kita dan tidak memungkinkan Kita
melakukan hal lain selama beberapa detik yang ditentukan, kita harus menggunakan
pengatur waktu.
1) Fungsi delay()
delay() sangat banyak digunakan pada rangkaian. Fungsi ini cukup mudah digunakan. Ia
menerima nomor int tunggal sebagai perintah. Angka ini menunjukkan waktu dalam milidetik
program harus menunggu sampai pindah ke baris kode berikutnya.
delay(time in milliseconds)

Saat kamu melakukan delay(1000) program Kita berhenti pada baris itu selama 1 detik.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

delay() adalah fungsi pemblokiran. Fungsi pemblokiran mencegah program melakukan hal
lain sampai tugas tertentu selesai. Jika Kita membutuhkan banyak tugas untuk dilakukan
secara bersamaan, Kita tidak dapat menggunakan delay().
Untuk sebagian besar project, Kita harus menghindari penggunaan penundaan dan
menggunakan pengatur waktu sebagai gantinya.
2) Fungsi milis()
Menggunakan fungsi yang disebut milis()Kita dapat mengembalikan jumlah milidetik yang
telah berlalu sejak program pertama kali dimulai.
millis()
Mengapa fungsi itu berguna? Karena dengan menggunakan beberapa matematika, Kita
dapat dengan mudah memverifikasi berapa banyak waktu yang telah berlalu tanpa
memblokir kode Kita.
3.4 Kontrol LED dengan milis()
Contoh kode berikut menunjukkan bagaimana Kita dapat menggunakan milis() berfungsi
untuk membuat project LED berkedip. yaitu menyalakan LED selama 1000 milidetik, dan
kemudian mematikannya.

// constants won't change. Used here to set a pin number :


const int ledPin = 26; // the number of the LED pin

// Variables will change :


int ledState = LOW; // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won't change :


const long interval = 1000; // interval at which to blink (milliseconds)

void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}

void loop() {
// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {


// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:


if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}

// set the LED with the ledState of the variable:


digitalWrite(ledPin, ledState);
}
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

1) Cara kerja kode program


Pada dasarnya, kode ini mengurangi waktu yang direkam sebelumnya (previousMillis) dari
waktu sekarang (currentMillis). Jika sisa lebih besar dari interval (dalam hal ini, 1000
milidetik), program memperbarui previousMillis variabel ke waktu saat ini, dan menyalakan
atau mematikan LED.
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
(...)
Karena cuplikan ini tidak memblokir, kode apa pun yang terletak di luar itu terlebih dahulu
jika pernyataan harus bekerja secara normal.
Kita sekarang seharusnya dapat memahami bahwa Kita dapat menambahkan tugas lain ke
fungsi loop() dan kode Kita akan tetap mengedipkan LED setiap satu detik.

Kita dapat mengunggah kode ini ke ESP32 Kita dan merakit diagram skematik berikut untuk
mengujinya dan mengubah jumlah milidetik untuk melihat cara kerjanya.

3.5 ESP32 dengan Sensor Gerak PIR


Setelah memahami konsep-konsep ini: interupsi dan pengatur waktu, mari kita lanjutkan
dengan project ini.
1) Skema Rangkaian
Rangkaian yang akan kita buat mudah untuk dirakit, kita akan menggunakan LED dengan
resistor. LED terhubung keGPIO 26. Kita akan menggunakan Sensor Gerak Mini AM312
PIR yang beroperasi pada 3.3V. Ini akan terhubung keGPIO 27. Cukup ikuti diagram
skema berikutnya.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Penting : Sensor Gerak Mini AM312 PIR yang digunakan dalam project ini beroperasi
pada 3.3V. Namun, jika Kita menggunakan sensor gerak PIR lain seperti HC-SR501 , ia
beroperasi pada 5V. Kita dapat memodifikasinya untuk beroperasi pada 3.3V atau
cukup menyalakannya menggunakan pin Vin.

Gambar berikut menunjukkan pinout sensor gerak AM312 PIR.

2) Mengunggah Kode
Setelah memasang kabel sirkuit seperti yang ditunjukkan pada diagram skematik, salin kode
yang diberikan ke Arduino IDE Kita.
Kita dapat mengunggah kode apa adanya, atau Kita dapat mengubah jumlah detik LED
menyala setelah mendeteksi gerakan. Cukup ubah timeseconds variabel dengan jumlah
detik yang Kita inginkan.

#define timeSeconds 10

// Set GPIOs for LED and PIR Motion Sensor


const int led = 26;
const int motionSensor = 27;

// Timer: Auxiliary variables


unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;

// Checks if motion was detected, sets LED HIGH and starts a timer
void IRAM_ATTR detectsMovement() {
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Serial.println("MOTION DETECTED!!!");
digitalWrite(led, HIGH);
startTimer = true;
lastTrigger = millis();
}

void setup() {
// Serial port for debugging purposes
Serial.begin(115200);

// PIR Motion Sensor mode INPUT_PULLUP


pinMode(motionSensor, INPUT_PULLUP);
// Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);

// Set LED to LOW


pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}

void loop() {
// Current time
now = millis();
// Turn off the LED after the number of seconds defined in the timeSeconds variable
if(startTimer && (now - lastTrigger > (timeSeconds*1000))) {
Serial.println("Motion stopped...");
digitalWrite(led, LOW);
startTimer = false;
}
}

3) Cara Kerja Kode


Mari kita lihat kodenya. Mulailah dengan menetapkan dua pin GPIO ke led dan motionsensor
variabel.
// Set GPIOs for LED and PIR Motion Sensor
const int led = 26;
const int motionSensor = 27;
Kemudian, buat variabel yang memungkinkan Kita mengatur timer untuk mematikan LED
setelah gerakan terdeteksi.
// Timer: Auxiliar variables
long now = millis();
long lastTrigger = 0;
boolean startTimer = false;
Itu now variabel memegang waktu saat ini. Itu lastTrigger variabel menahan waktu ketika
sensor PIR mendeteksi gerakan. Itu startTimer adalah variabel boolean yang memulai timer
ketika gerakan terdeteksi.
• setup()
Dalam setup(), mulai dengan menginisialisasi port Serial pada 115200 baud rate.
Serial.begin(115200);

Atur sensor Gerak PIR sebagai INPUT PULLUP.


pinMode(motionSensor, INPUT_PULLUP);
Untuk mengatur pin sensor PIR sebagai interupsi, gunakan: fungsi attachInterrupt() seperti
yang dijelaskan sebelumnya.
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement,
RISING);
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

Pin yang akan mendeteksi gerakan adalahGPIO 27dan itu akan memanggil fungsi
detectsmovement pada mode RISING.
LED adalah OUTPUT yang statusnya dimulai dari LOW.
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
• loop()
fungsi loop() terus berjalan berulang-ulang. Dalam setiap loop, now variabel diperbarui
dengan waktu saat ini.
now = millis();
Tidak ada lagi yang dilakukan di loop().
Tapi, ketika gerakan terdeteksi,detectsmovement() fungsi dipanggil karena kita telah mengatur
interupsi sebelumnya pada setup().
fungsi detectsmovement() mencetak pesan di Serial Monitor, menyalakan LED, menyetel
startTimer variabel boolean ke RIGHT dan memperbarui lastTrigger variabel dengan waktu
sekarang.
void IRAM_ATTR detectsMovement() {
Serial.println("MOTION DETECTED!!!");
digitalWrite(led, HIGH);
startTimer = true;
lastTrigger = millis();
}
Catatan: IRAM_ATTR digunakan untuk menjalankan kode interupsi di RAM, jika tidak, kode
disimpan dalam flash dan lebih lambat.

Setelah langkah ini, kode kembali ke loop().


Kali ini, startTimer variabel adalah benar. Jadi, ketika waktu yang ditentukan dalam detik
telah berlalu (sejak gerakan terdeteksi), berikut ini: if pernyataan akan benar.
if(startTimer && (now - lastTrigger > (timeSeconds*1000))) {
Serial.println("Motion stopped...");
digitalWrite(led, LOW);
startTimer = false;
}
Pesan “Motion stopped…” akan tercetak di Serial Monitor, LED dimatikan, dan variabel
startTimer disetel ke false.
3.6 Demonstrasi
Unggah kode ke papan ESP32 Kita. Pastikan Kita memilih papan dan port COM yang tepat.
Buka Serial Monitor pada baud rate 115200.

Gerakkan tangan Kita di depan sensor PIR. LED akan menyala, dan sebuah pesan tercetak
di Serial Monitor yang mengatakan “MOTION DETECTED!!!”. Setelah 10 detik, LED akan
mati.
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

6. PROGRAM & SKEMATIK


1) LCD
• SKEMATIK

• PROGRAM
//TEAM RB (Riki & Bagas)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
//lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0,1);
lcd.print(" INDONESIA");
}
void loop()
{
// Do nothing here...
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

2) DHT11
• SKEMATIK

• PROGRAM
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h"

#define DHTPIN 4 // Digital pin connected to the DHT sensor


// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!


#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V


// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.


// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));

dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!


// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}

// Compute heat index in Fahrenheit (the default)


float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);

Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}

3) DHT11 WITH LCD


• SKEMATIK

• PROGRAM
//by Riki&Bagas
//MONSTERCHIP INDONESIA
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

#define DHTPIN 4 //PIN DHT11 DI KONEKAN KE PIN DIGITAL 13 (BISA GUNAKAN PIN LAIN SELAIN DO DAN D1)
#define DHTTYPE DHT11

// Set alamat I2C serta jenis LCD


// Alamt I2C adalah 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2); //alamt I2C adalah 0x27

DHT dht(DHTPIN, DHTTYPE);

void setup() {
lcd.begin();
dht.begin();
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F(" MONSTERCHIP"));
//JEDA 2 DETIK AGAR PEMBACAAN STABIL
delay(2000);

Serial.begin(9600);

void loop() {
float h = dht.readHumidity();
// Baca Kelembaban dalam RH (%)
float t = dht.readTemperature();
// Baca Temperature dalam celcius (default)
// Cek Pembacaan dan komunikasi dengan DHT11
if (isnan(h) || isnan(t)) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F("GAGAL MEMBACA"));
return;
//CEK SEMUA PEMBACAA
}

float hic = dht.computeHeatIndex(t, h, false);


// MENDEFINISIKAN "t" SEBAGAI NILAI DARI SUHU
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp = ");
lcd.print(t); //TAMPILKAN SUHU DALAM CELCIUS
lcd.print("'C");
lcd.setCursor(0,1);
lcd.print("Humd = ");//TAMPILKAN KELEMBABAN UDARA
lcd.print(h);
lcd.print("% ");
delay(2000);

//Serial.print("Temperature = ");
// Serial.print(t); //TAMPILKAN SUHU DALAM CELCIUS
//Serial.print("°C | ");
// Serial.print("Humidity = ");//TAMPILKAN KELEMBABAN UDARA
// Serial.print(h);
// Serial.println("% ");
// Serial.println("");

}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

4) DS1307
• SKEMATIK

• PROGRAM
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};

void setup () {

Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("RTC TIDAK TERBACA");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//update rtc dari waktu komputer
}
}

void loop () {
DateTime now = rtc.now();
Serial.print(namaHari[now.dayOfTheWeek()]);
Serial.print(',');
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

delay(1000);
}

5) DS1307 WITH LCD


• SKEMATIK
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• PROGRAM
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);

char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};


void setup () {

while (!Serial); // for Leonardo/Micro/Zero

Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0, 1);
lcd.print(" INDONESIA");
delay(2000);
lcd.clear();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
}
void loop () {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(namaHari[now.dayOfTheWeek()]);
lcd.print(", ");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.print(" ");
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

6) DS3231
• SKEMATIK

• PROGRAM
#include "RTClib.h"
RTC_DS3231 rtc;
char dataHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
String hari;
int tanggal, bulan, tahun, jam, menit, detik;
float suhu;

void setup () {
Serial.begin(9600);

if (! rtc.begin()) {
Serial.println("RTC Tidak Ditemukan");
Serial.flush();
abort();
}

//Atur Waktu
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
DateTime now = rtc.now();
hari = dataHari[now.dayOfTheWeek()];
tanggal = now.day(), DEC;
bulan = now.month(), DEC;
tahun = now.year(), DEC;
jam = now.hour(), DEC;
menit = now.minute(), DEC;
detik = now.second(), DEC;
suhu = rtc.getTemperature();

Serial.println(String() + hari + ", " + tanggal + "-" + bulan + "-" + tahun);


Serial.println(String() + jam + ":" + menit + ":" + detik);
Serial.println(String() + "Suhu: " + suhu + " C");
Serial.println();

delay(1000);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

7) DS3231 WITH LCD


• SKEMATIK

• PROGRAM
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);

char dataHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};


String hari;
int tanggal, bulan, tahun, jam, menit, detik;

void setup () {
Serial.begin(9600);
lcd.begin();
// Turn on the blacklight and print a message.
//lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0,1);
lcd.print(" INDONESIA");
delay(2000);
lcd.clear();

if (! rtc.begin()) {
Serial.println("RTC Tidak Ditemukan");
Serial.flush();
abort();
}

//Atur Waktu
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
DateTime now = rtc.now();
hari = dataHari[now.dayOfTheWeek()];
tanggal = now.day(), DEC;
bulan = now.month(), DEC;
tahun = now.year(), DEC;
jam = now.hour(), DEC;
menit = now.minute(), DEC;
detik = now.second(), DEC;
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

lcd.setCursor(0, 0);
lcd.print(String() + hari + ", " + tanggal + "/" + bulan + "/" + tahun);
lcd.setCursor(0, 1);
lcd.print(String() + jam + ":" + menit + ":" + detik);
delay(1000);
}

8) FLAME SENSOR
• SKEMATIK

• PROGRAM
int Flame = 2;
void setup() {
pinMode(Flame, INPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(Flame) == LOW) {
Serial.println("Flame not detected");
} else {
Serial.println("Flame detected");
}
delay(100);
}
9) FLAME WITH LCD
• SKEMATIK
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• PROGRAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int Flame = 2;
int Buz = 5;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
Serial.begin(9600);
pinMode(Flame, INPUT);
pinMode(Buz, OUTPUT);
lcd.begin();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP ");
lcd.setCursor(0,1);
lcd.print(" INDONESIA ");
delay(2000);
lcd.setCursor(0,0);
lcd.print(" FLAME SENSOR ");
}
void loop() {
if (digitalRead(Flame) == HIGH ) {
digitalWrite(Buz, HIGH);
Serial.println("Flame Detected");
lcd.setCursor(0,1);
lcd.print(" Flame Detected");
}else{
digitalWrite(Buz, LOW);
Serial.println("Flame Not Detected");
lcd.setCursor(0,1);
lcd.print(" Not Detected ");
}
}

10) LDR SENSOR


• SKEMATIK

• PROGRAM
int sensorPin = 15;
int sensorValue = 0;

void setup () {

Serial.begin(9600); // Inisialisasi Port serial


}

void loop() {
sensorValue = analogRead(sensorPin); //Membaca nilai analog dari pin A5
Serial.println (sensorValue); //Mencetak hasil pada monitor serial

}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

11) LDR WITH LCD


• SKEMATIK

• PROGRAM
#define ldr 15
#define buz 5
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
bool fR = false;
float fval = 0;
String fNilai2, nilai = "";
int fNilai;
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won't change:


const long interval = 200;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
Serial.begin(9600);
pinMode(ldr, INPUT);
pinMode(buz, OUTPUT);
Serial.println("Ready");
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("MonsterChip");
delay(2000);
}

void loop() {
//--declare var--//
int light = analogRead(ldr);

//--analog input--//
if (light < 400) {
digitalWrite(buz, LOW);
nilai = "Terang";
lcd.setCursor(6, 1);
lcd.print("Terang");

}
else {
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

digitalWrite(buz, HIGH);
lcd.setCursor(6, 1);
lcd.print("Redup");
nilai = "Redup";

}
if (fNilai2 != nilai) {
Serial.println(nilai);
fNilai2 = nilai;
}
//--print val to LCD--//
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {


previousMillis = currentMillis;
if (fNilai != light) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ");
fNilai = light;
lcd.print("MonsterChip");
lcd.setCursor(0, 0);
}
lcd.setCursor(0, 1);
lcd.print(light);
}
}

12) RAINDROPS SENSOR


• SKEMATIK

• PROGRAM
#define sensor_DO 4

void setup() {
Serial.begin(9600);
}

void loop() {

int val = digitalRead(sensor_DO);


Serial.print("Digital Output: ");
Serial.print(val);

if (val == 1) {
Serial.println(" Status: Dry");
} else {
Serial.println(" Status: Wet");
}

delay(1000);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

13) RAINDROPS WITH LCD


• SKEMATIK

• PROGRAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define sensor_DO 4
#define bz 23
#define led 19
#define rly 5
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
Serial.begin(9600);
lcd.begin();
pinMode(bz, OUTPUT);
pinMode(led, OUTPUT);
pinMode(rly, OUTPUT);
lcd.setCursor(0, 0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0, 1);
lcd.print(" INDONESIA");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("RAINDROPS SENSOR");
}

void loop() {

int val = digitalRead(sensor_DO);


Serial.print("Digital Output: ");
Serial.print(val);

if (val == 1) {
digitalWrite(bz, LOW);
digitalWrite(led, LOW);
digitalWrite(rly, HIGH);
lcd.setCursor(0, 1);
lcd.print(" Status: Dry ");
} else {
digitalWrite(bz, HIGH);
digitalWrite(led, HIGH);
digitalWrite(rly, LOW);
lcd.setCursor(0, 1);
lcd.print(" Status: Wet ");
}
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

14) RELAY
• SKEMATIK

• PROGRAM
int rly = 4;
void setup() {
Serial.begin(9600);
pinMode(rly, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(rly, HIGH);
digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
digitalWrite(rly, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
digitalWrite(rly, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
}

15) SERVO
• SKEMATIK

• PROGRAM
#include <Servo.h>
Servo servoku;

void setup(){
servoku.attach(4);
}
void loop(){
servoku.write(0);
delay(1000);
servoku.write(180);
delay(1000);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

16) SOIL MOISTURE SENSOR


• SKEMATIK

• PROGRAM
const int SoilSensor = 4;

void setup()
{
Serial.begin(9600);
pinMode(SoilSensor, INPUT);
}

void loop()
{
if(digitalRead(SoilSensor) == HIGH)
{
Serial.println("Kondisi Kering");
delay(1000);
}
else
{
Serial.println("Kondisi Lembab");
delay(1000);
}
}

17) SOIL MOISTURE WITH LCD


• SKEMATIK
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• PROGRAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int SoilSensor = 4;
const int LED = 23;
const int Bz = 5;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
lcd.begin();

pinMode(SoilSensor, INPUT);
pinMode(LED, OUTPUT);
pinMode(Bz, OUTPUT);
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0,1);
lcd.print(" INDONESIA");
delay(2000);
lcd.setCursor(0,0);
lcd.print(" SOIL SENSOR");

void loop()
{
if(digitalRead(SoilSensor) == HIGH)
{
lcd.setCursor(0,1);
lcd.print(" Kondisi Kering");
digitalWrite(LED, LOW);
digitalWrite(Bz, LOW);
}
else
{
lcd.setCursor(0,1);
lcd.print(" Kondisi Lembab");
digitalWrite(LED, HIGH);
digitalWrite(Bz, HIGH);
}
}

18) SOUND VOICE SENSOR


• SKEMATIK
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• PROGRAM
const int soundpin = 2;
const int threshold = 400; // sets threshold value for sound sensor
void setup() {
Serial.begin(9600);
pinMode(soundpin, INPUT);
}
void loop() {
int soundsens = analogRead(soundpin); // reads analog data from sound sensor
if (soundsens >= threshold) {
Serial.println("SoundVoice = ON "); //turns led on
delay(1000);
}
else {
Serial.println("SoundVoice = OFF ");
}
}

19) SOUND VOICE WITH LCD


• SKEMATIK

• PROGRAM
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
const int soundpin = 2;
const int ledpin = 23;
const int bzpin = 5;

const int threshold = 400; // sets threshold value for sound sensor
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
Serial.begin(9600);
pinMode(soundpin, INPUT);
pinMode(ledpin, OUTPUT);
pinMode(bzpin, OUTPUT);
lcd.begin();
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0, 1);
lcd.print(" INDONESIA");
delay(2000);
lcd.clear();
}
void loop() {
int soundsens = analogRead(soundpin); // reads analog data from sound sensor
lcd.setCursor(0, 0);
lcd.print("SoundVoiceSensor");
lcd.setCursor(0, 1);
lcd.print("Sensor = ");
if (soundsens >= threshold) {
digitalWrite(ledpin, HIGH);
digitalWrite(bzpin, HIGH);
lcd.setCursor(9, 1);
lcd.print(" ON ");
delay(2000);
}
else {
Serial.println("SoundVoice = OFF ");
digitalWrite(ledpin, LOW);
digitalWrite(bzpin, LOW);
lcd.setCursor(9, 1);
lcd.print(" OFF ");
}
}

20) TOUCH SENSOR


• SKEMATIK

• PROGRAM
// set pin numbers
const int touchPin = 4;
const int ledPin = 5;

// change with your threshold value


const int threshold = 20;
// variable for storing the touch pin value
int touchValue;

void setup(){
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
// initialize the LED pin as an output:
pinMode (ledPin, OUTPUT);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

void loop(){
// read the state of the pushbutton value:
touchValue = touchRead(touchPin);
Serial.print(touchValue);
// check if the touchValue is below the threshold
// if it is, set ledPin to HIGH
if(touchValue < threshold){
// turn LED on
digitalWrite(ledPin, HIGH);
Serial.println(" - LED on");
}
else{
// turn LED off
digitalWrite(ledPin, LOW);
Serial.println(" - LED off");
}
delay(500);
}

21) ULTRASONIC
• SKEMATIK

• PROGRAM
#define echoPin 18 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 5 //attach pin D3 Arduino to pin Trig of HC-SR04

// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
Serial.println("Ultrasonic Sensor HC-SR04 Test"); // print some text in Serial Monitor
Serial.println("with Arduino UNO R3");
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

22) ULTRASONIC WITH LCD


• SKEMATIK

• PROGRAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define echoPin 18 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 5 //attach pin D3 Arduino to pin Trig of HC-SR04
LiquidCrystal_I2C lcd(0x27, 16, 2);

// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT);// Sets the echoPin as an INPUT
lcd.begin();
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0,1);
lcd.print(" INDONESIA");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ULTRASERVO");
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
lcd.setCursor(0,1);
lcd.print("Distance: ");
lcd.setCursor(9,1);
lcd.print(distance);
lcd.print(" cm ");
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

23) WATER LEVEL SENSOR


• SKEMATIK

• PROGRAM
#define wlS 15 //water level sensor

void setup() {
//--Serial monitor begin--//
Serial.begin(9600);
//--pin begin--//
pinMode(wlS, INPUT);
}

void loop() {
int val = analogRead(wlS);
Serial.println(val);
}

24) WATER LEVEL WITH LCD


• SKEMATIK

• PROGRAM
#include <LiquidCrystal_I2C.h>
#define wlS 15 //water level sensor
#define bz 23

//--LCD--//
bool fR = false;
float fval = 0;
String fNilai, nilai = "";
unsigned long previousMillis = 0;
const long interval = 100;
LiquidCrystal_I2C lcd(0x27, 16, 2);
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

void setup() {
//--Serial monitor begin--//
Serial.begin(9600);
//--pin begin--//
pinMode(wlS, INPUT);
pinMode(bz, OUTPUT);
//--LCD begin--//
lcd.begin();
lcd.backlight();
lcd.print("MONSTERCHIP");
lcd.setCursor(0, 0);
}

void loop() {
int val = analogRead(wlS);
nilai = val;

unsigned long currentMillis = millis();


if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (fNilai != nilai) {
lcd.setCursor(0, 1);
lcd.print(" ");
fNilai = nilai;
}
lcd.setCursor(0, 1);
lcd.print(nilai);
}
if (val < 200 ){
digitalWrite(bz, LOW);
}else{
digitalWrite(bz, HIGH);}

25) SMART DUSTBIN


• SKEMATIK
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA

• PROGRAM
//RB (Riki & Bagas)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define echoPin 18 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 5 //attach pin D3 Arduino to pin Trig of HC-SR04
#define LED 19
#define BUZ 23
#include <Servo.h>//memanggil library servo.h
Servo servoku; //memberi nama pada servo yg akan digunakan
LiquidCrystal_I2C lcd(0x27, 16, 2);

// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement

void setup() {
servoku.attach(4); //servo dipasangkan pada kaki/pin digital 9 (PWM)
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT);// Sets the echoPin as an INPUT
pinMode(LED, OUTPUT); // Sets the LED as an OUTPUT
pinMode(BUZ, OUTPUT); // Sets the BUZ as an OUTPUT
lcd.begin();
lcd.setCursor(0,0);
lcd.print(" MONSTERCHIP");
lcd.setCursor(0,1);
lcd.print(" INDONESIA");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ULTRASERVO");
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
lcd.setCursor(0,1);
lcd.print("Distance: ");
lcd.setCursor(9,1);
lcd.print(distance);
lcd.print(" cm ");

if (distance < 20){


servoku.write(0);
digitalWrite(LED, HIGH);
digitalWrite(BUZ, HIGH);
delay(500);
}else{
servoku.write(180);
digitalWrite(LED, LOW);
digitalWrite(BUZ, LOW);
}
}

TUTORIAL BY:
RIKI SUBAGJA
BAGAS DIRGANTARA

Anda mungkin juga menyukai