E-Book Tutorial Esp32 Pada Arduino Ide
E-Book Tutorial Esp32 Pada Arduino Ide
IG: @MOSTERCHIPINDONESIA
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA
Masukkan link berikut ini ke dalam bidang "Additional Board Manager URL":
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-
pages/package_esp32_index.json
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
Cari ESP32 dan tekan tombol INSTALL untuk " ESP32 oleh Espressif System":
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
Tekan tombol Upload di Arduino IDE. Tunggu beberapa detik sementara kode
compiling dan uploading ke board Kita.
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:
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
IESP32 Kita harus menjalankan sketsa baru. Tekan tombol " Activate " untuk
memulai ulang ESP32 dan menjalankan sketsa baru yang diunggah.
// 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.
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
void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
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.
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:
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.
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.
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
void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);
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);
}
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.
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
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
VCC VIN
Trig GPIO 5
Echo GPIO 18
GND GND
PROGRAM
const int trigPin = 5;
const int echoPin = 18;
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);
// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;
delay(1000);
}
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.
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.
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.
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);
Kemudian, kita cukup menghitung jarak ke suatu objek dengan memperhitungkan kecepatan
suara.
distanceCm = duration * SOUND_SPEED/2;
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.
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
Setelah menginstal library SSD1306 dari Adafruit, ketik " GFX " di kotak pencarian dan instal
library.
long duration;
int distanceCm;
int distanceInch;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA
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);
// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;
display.clearDisplay();
display.setCursor(0, 25);
//Display distance in cm
display.print(distanceCm);
display.print(" cm");
delay(500);
}
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Tentukan lebar dan tinggi layar OLED. Kami menggunakan layar OLED 128x64:
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.
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
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);
// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;
display.clearDisplay();
display.setCursor(0, 25);
Komentari baris sebelumnya dan batalkan komentar pada baris berikut jika Anda ingin
menampilkan pembacaan dalam inci.
display.display();
delay(500);
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
▪ ESP32
▪ LED 5mm
▪ Resistor 330 Ohm
▪ Push Button
▪ Resistor 10K Ohm
▪ Bread Board
▪ Kabel Jumper Male to Male
Sebelum melanjutkan, Kita perlu merakit sirkuit dengan LED dan push
button. Kita akan menghubungkan LED ke GPIO 5dan push button untuk GPIO
4.
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);
}
}
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);
}
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:
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.
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
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
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.
Dengan contoh ini kita juga akan mengeksplorasi dua konsep penting: interupsi dan timer.
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.
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.
// 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
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();
Kita dapat mengunggah kode ini ke ESP32 Kita dan merakit diagram skematik berikut untuk
mengujinya dan mengubah jumlah milidetik untuk melihat cara kerjanya.
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.
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
// 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);
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;
}
}
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.
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
• 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"
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
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;
}
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"));
}
• 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
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
}
//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;
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);
}
• PROGRAM
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
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();
delay(1000);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA
• PROGRAM
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
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;
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 ");
}
}
• PROGRAM
int sensorPin = 15;
int sensorValue = 0;
void setup () {
void loop() {
sensorValue = analogRead(sensorPin); //Membaca nilai analog dari pin A5
Serial.println (sensorValue); //Mencetak hasil pada monitor serial
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA
• 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
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();
• PROGRAM
#define sensor_DO 4
void setup() {
Serial.begin(9600);
}
void loop() {
if (val == 1) {
Serial.println(" Status: Dry");
} else {
Serial.println(" Status: Wet");
}
delay(1000);
}
MOSTERCHIP INDONESIA
IG: @MOSTERCHIPINDONESIA
• 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() {
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
• 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);
}
}
• PROGRAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int SoilSensor = 4;
const int LED = 23;
const int Bz = 5;
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);
}
}
• 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 ");
}
}
• 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 ");
}
}
• PROGRAM
// set pin numbers
const int touchPin = 4;
const int ledPin = 5;
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
• 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
• 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);
}
• 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;
• 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 ");
TUTORIAL BY:
RIKI SUBAGJA
BAGAS DIRGANTARA