KUNJUNGI KAMI

KUNJUNGI KITA DI BUKALAPAK, TOKOPEDIA DAN SHOPEE
Tampilkan postingan dengan label ARDUINO. Tampilkan semua postingan
Tampilkan postingan dengan label ARDUINO. Tampilkan semua postingan

Menghasilkan Sinyal PWM dengan ESP32 Menggunakan Arduino IDE

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara menghasilkan sinyal PWM dengan ESP32 menggunakan Arduino IDE. Sebagai contoh, kami akan membangun rangkaian sederhana yang memudarkan LED menggunakan pengendali PWM LED di ESP32. Kami juga akan menunjukkan kepada Anda bagaimana Anda dapat mendapatkan sinyal PWM yang sama pada pin GPIO yang berbeda pada saat yang bersamaan.


Sebelum melanjutkan dengan tutorial ini, Anda harus sudah menginstal add-on ESP32 di Arduino IDE Anda. Ikuti salah satu tutorial berikut untuk menginstal ESP32 di Arduino IDE, jika Anda belum melakukannya.


Bagian yang Diperlukan

Untuk mengikuti tutorial ini, Anda memerlukan komponen-komponen berikut:

Anda dapat menggunakan tautan-tautan sebelumnya atau pergi langsung ke tokopedia.com/cncstorebandung untuk menemukan semua komponen yang Anda butuhkan untuk proyek Anda dengan harga terbaik!


Kontroler PWM LED ESP32

ESP32 memiliki kontroler PWM LED dengan 16 saluran independen yang dapat dikonfigurasi untuk menghasilkan sinyal PWM dengan properti yang berbeda.

Berikut adalah langkah-langkah yang harus Anda ikuti untuk memudarkan LED dengan PWM menggunakan Arduino IDE:

1. Pertama, Anda perlu memilih saluran PWM. Terdapat 16 saluran dari 0 hingga 15.

2. Kemudian, Anda perlu mengatur frekuensi sinyal PWM. Untuk LED, frekuensi 5000 Hz sudah cukup baik digunakan.

3. Anda juga perlu mengatur resolusi siklus tugas sinyal: Anda memiliki resolusi dari 1 hingga 16 bit. Kami akan menggunakan resolusi 8 bit, yang berarti Anda dapat mengendalikan kecerahan LED menggunakan nilai dari 0 hingga 255.

4. Selanjutnya, Anda perlu menentukan pada pin GPIO atau beberapa GPIO mana sinyal akan muncul. Untuk itu, Anda akan menggunakan fungsi berikut:

ledcAttachPin(GPIO, channel)
5.Terakhir, untuk mengontrol kecerahan LED menggunakan PWM, Anda menggunakan fungsi berikut:
ledcWrite(channel, dutycycle)
Fungsi ini menerima sebagai argumen saluran yang menghasilkan sinyal PWM dan siklus tugas.

Pengendalian Kecerahan LED
Mari kita lihat contoh sederhana untuk melihat bagaimana menggunakan pengontrol PWM LED ESP32 menggunakan Arduino IDE.

Skema
Sambungkan sebuah LED ke ESP32 Anda seperti pada diagram skema berikut. LED harus terhubung ke GPIO 16.



Catatan: Anda dapat menggunakan pin apa pun yang Anda inginkan, selama itu dapat berfungsi sebagai output. Semua pin yang dapat berfungsi sebagai output dapat digunakan sebagai pin PWM. Untuk informasi lebih lanjut tentang GPIO ESP32, baca: Referensi Pinout ESP32: Pin GPIO mana yang sebaiknya Anda gunakan?

Kode

Buka Arduino IDE Anda dan salin kode berikut.
 // the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// 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);
  }
}
Anda memulai dengan mendefinisikan pin tempat LED terpasang. Dalam hal ini, LED terpasang pada GPIO 16.
const int ledPin = 16;  // 16 corresponds to GPIO16
Di dalam fungsi setup(), Anda perlu mengonfigurasi PWM LED dengan properti yang telah Anda tentukan sebelumnya menggunakan fungsi ledcSetup() yang menerima sebagai argumen ledChannel, frekuensi, dan resolusi, seperti berikut:
ledcSetup(ledChannel, freq, resolution);
Selanjutnya, Anda perlu memilih GPIO tempat Anda akan mendapatkan sinyal tersebut. Gunakan fungsi ledcAttachPin() yang menerima sebagai argumen GPIO tempat Anda ingin mendapatkan sinyal, dan saluran yang menghasilkan sinyal. Dalam contoh ini, kami akan mendapatkan sinyal pada GPIO ledPin, yang sesuai dengan GPIO 16. Saluran yang menghasilkan sinyal adalah ledChannel, yang sesuai dengan saluran 0.
 ledcAttachPin(ledPin, ledChannel);
Di dalam loop, Anda akan mengubah 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); 
}
Untuk mengatur kecerahan LED, Anda hanya perlu menggunakan fungsi ledcWrite() yang menerima sebagai argumen saluran yang menghasilkan sinyal, dan siklus tugas.
 ledcWrite(ledChannel, dutyCycle);
}
Karena kita menggunakan resolusi 8 bit, siklus tugas akan dikendalikan menggunakan nilai dari 0 hingga 255. Perhatikan bahwa dalam fungsi ledcWrite(), kita menggunakan saluran yang menghasilkan sinyal, dan bukan GPIO.

Pengujian Contoh

Unggah kode ke ESP32 Anda. Pastikan Anda telah memilih papan dan port COM yang benar. Lihat sirkuit Anda. Anda seharusnya memiliki LED pengatur cahaya yang meningkat dan mengurangi kecerahan.


Mendapatkan Sinyal yang Sama pada GPIO yang Berbeda

Anda dapat mendapatkan sinyal yang sama dari saluran yang sama pada berbagai GPIO yang berbeda. Untuk mencapainya, Anda hanya perlu menghubungkan GPIO tersebut ke saluran yang sama pada fungsi setup().

Mari modifikasi contoh sebelumnya untuk meredupkan 3 LED menggunakan sinyal PWM yang sama dari saluran yang sama.

Skema

Tambahkan dua LED tambahan ke sirkuit Anda dengan mengikuti diagram skematik berikut:




(Diagram skematik ini menggunakan versi modul ESP32 DEVKIT V1 dengan 30 GPIO - jika Anda menggunakan model lain, harap periksa pinout untuk papan yang Anda gunakan.)

Kode

Salin kode berikut ke Arduino IDE Anda.
 // 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
    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. Kami telah mendefinisikan dua variabel tambahan untuk dua LED baru, yang mengacu pada GPIO 17 dan GPIO 5.
const int ledPin2 = 17; // 17 corresponds to GPIO17 
const int ledPin3 = 5;  // 5 corresponds to GPIO5
Kemudian, dalam fungsi setup(), kami telah menambahkan baris-baris berikut untuk mengaitkan kedua GPIO dengan saluran 0. Ini berarti bahwa kita akan mendapatkan sinyal yang sama, yang dihasilkan pada saluran 0, pada kedua GPIO tersebut. 

Menguji Proyek

Unggah sketsa yang baru ke ESP32 Anda. Pastikan Anda telah memilih papan dan port COM yang benar. Sekarang, perhatikan sirkuit Anda:



Semua GPIO mengeluarkan sinyal PWM yang sama. Jadi, ketiga LED meningkat dan berkurang kecerahannya secara bersamaan, menghasilkan efek yang disinkronkan.



Penutup

Secara ringkas, dalam pos ini Anda telah mempelajari cara menggunakan pengontrol PWM LED ESP32 dengan Arduino IDE untuk mengatur kecerahan LED. Konsep yang dipelajari dapat digunakan untuk mengendalikan output lain dengan PWM dengan mengatur properti sinyal yang tepat.

SERVER WEB MOTOR SERVO ESP32 DENGAN ARDUINO IDE

Dalam tutorial ini, kami akan menunjukkan kepada Anda bagaimana membangun sebuah server web dengan ESP32 yang mengontrol posisi poros dari sebuah motor servo menggunakan slider. Pertama, kita akan melihat cara mengendalikan motor servo dengan ESP32, dan kemudian kita akan membangun server webnya.


Menghubungkan Motor Servo ke ESP32

Motor servo memiliki tiga kabel: daya, tanah (ground), dan sinyal. Biasanya, kabel daya berwarna merah, GND berwarna hitam atau coklat, dan kabel sinyal biasanya berwarna kuning, oranye, atau putih."

Kabel Warna
Daya Merah
GND Hitam, atau coklat
Sinyal Kuning, oranye, atau putih



Ketika menggunakan motor servo kecil seperti S0009 seperti yang ditunjukkan pada gambar di bawah ini, Anda dapat memberinya pasokan daya langsung dari ESP32."














Tetapi jika Anda menggunakan lebih dari satu motor servo atau jenis lainnya, Anda mungkin perlu memberi pasokan daya ke servo Anda menggunakan sumber daya eksternal.












Jika Anda menggunakan motor servo kecil seperti S0009, Anda perlu menghubungkan:


GND -> pin GND ESP32;

Daya -> pin VIN ESP32;

Sinyal -> GPIO 13 (atau salah satu pin PWM lainnya).

Catatan: dalam kasus ini, Anda dapat menggunakan salah satu GPIO ESP32, karena setiap GPIO dapat menghasilkan sinyal PWM. Namun, kami tidak merekomendasikan penggunaan GPIO 9, 10, dan 11 yang terhubung ke flash SPI terintegrasi dan tidak direkomendasikan untuk penggunaan lain.

Skema

Dalam contoh kami, kami akan menghubungkan kabel sinyal ke GPIO 13. Jadi, Anda dapat mengikuti diagram skema berikut untuk menghubungkan motor servo Anda.

















Skema ini menggunakan versi modul ESP32 DEVKIT V1 dengan 36 GPIO - jika Anda menggunakan model lain, harap periksa pinout untuk papan yang Anda gunakan.)


Bagaimana Mengendalikan Motor Servo?

Anda dapat mengatur posisi poros servo dalam berbagai sudut dari 0 hingga 180º. Servo dikendalikan menggunakan sinyal modulasi lebar pulsa (PWM). Ini berarti bahwa sinyal PWM yang dikirimkan ke motor akan menentukan posisi porosnya.



Untuk mengendalikan motor, Anda dapat menggunakan kemampuan PWM dari ESP32 dengan mengirimkan sinyal 50Hz dengan lebar pulsa yang sesuai. Atau Anda dapat menggunakan pLibrary untuk membuat tugas ini menjadi lebih sederhana.


Menyiapkan Arduino IDE

Ada add-on untuk Arduino IDE yang memungkinkan Anda untuk memprogram ESP32 menggunakan Arduino IDE dan bahasa pemrogramannya. Ikuti salah satu tutorial berikut untuk menyiapkan Arduino IDE Anda agar dapat bekerja dengan ESP32, jika Anda belum melakukannya.

Setelah memastikan Anda telah menginstal add-on ESP32, Anda dapat melanjutkan tutorial ini.


Menginstal ESP32_Arduino_Servo_Library

Library ESP32 Arduino Servo memudahkan pengendalian motor servo dengan ESP32 Anda, menggunakan Arduino IDE. Ikuti langkah-langkah berikut untuk menginstal library di Arduino IDE Anda:


  1. Klik di sini untuk mengunduh ESP32_Arduino_Servo_Library. Anda harus memiliki folder .zip di folder Unduhan Anda.
  2. Ekstrak folder .zip dan Anda akan mendapatkan folder ESP32-Arduino-Servo-Library-Master
  3. Ganti nama folder Anda dari ESP32-Arduino-Servo-Library-Master menjadi ESP32_Arduino_Servo_Library
  4. Pindahkan folder ESP32_Arduino_Servo_Library ke folder library instalasi Arduino IDE Anda
  5. Terakhir, buka kembali Arduino IDE Anda

Menguji Contoh

Setelah menginstal library, buka Arduino IDE Anda. Pastikan Anda telah memilih papan ESP32, lalu buka File > Contoh > ServoESP32 > Simple Servo.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
  Written by BARRAGAN and modified by Scott Fitzgerald
*********/

#include 

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(13);  // attaches the servo on pin 13 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}


Memahami Kode

Sketsa ini memutar motor servo 180 derajat ke satu sisi, dan 180 derajat ke sisi lainnya. Mari kita lihat bagaimana cara kerjanya.


Pertama, Anda perlu menyertakan library Servo:


#include <Servo.h>
Kemudian, Anda perlu membuat sebuah objek servo. Dalam hal ini, objek tersebut dinamakan myservo.
Servo myservo;

Setup()

Dalam fungsi setup(), Anda menginisialisasi komunikasi serial untuk tujuan debugging, dan menghubungkan GPIO 13 ke objek servo."

void setup() {
  myservo.attach(13);
Loop()
Dalam loop(), kita mengubah posisi poros motor dari 0 hingga 180 derajat, dan kemudian dari 180 hingga 0 derajat. Untuk mengatur poros ke posisi tertentu, Anda hanya perlu menggunakan metode write() dalam objek servo. Anda mengirimkan sebagai argumen, sebuah angka integer dengan posisi dalam derajat."
Servo myservo;

Setup()

Dalam fungsi setup(), Anda menginisialisasi komunikasi serial untuk tujuan debugging, dan menghubungkan GPIO 13 ke objek servo."

myservo.write(pos);

Menguji Sketsa

Unggah kode ke ESP32 Anda. Setelah mengunggah kode, Anda seharusnya melihat poros motor berputar ke satu sisi dan kemudian ke sisi lainnya.

Membuat Server Web ESP32

Sekarang bahwa Anda tahu bagaimana mengendalikan servo dengan ESP32, mari buat server web untuk mengendalikannya (pelajari lebih lanjut tentang cara membangun Server Web ESP32). Server web yang akan kita bangun:

  • Mengandung slider dari 0 hingga 180, yang dapat Anda sesuaikan untuk mengontrol posisi poros servo;
  • Nilai slider saat ini secara otomatis diperbarui di halaman web, serta posisi poros, tanpa perlu merefresh halaman web. Untuk ini, kami menggunakan AJAX untuk mengirim permintaan HTTP ke ESP32 di latar belakang;
  • Mererefresh halaman web tidak mengubah nilai slider maupun posisi poros.



Membuat Halaman HTML


Mari mulai dengan melihat teks HTML yang perlu dikirimkan oleh ESP32 ke peramban Anda.

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="data:,">
  <style>
    body {
      text-align: center;
      font-family: "Trebuchet MS", Arial;
      margin-left:auto;
      margin-right:auto;
    }
    .slider {
      width: 300px;
    }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
  <h1>ESP32 with Servo</h1>
  <p>Position: <span id="servoPos"></span></p>
  <input type="range" min="0" max="180" class="slider" id="servoSlider" onchange="servo(this.value)"/>
  <script>
    var slider = document.getElementById("servoSlider");
    var servoP = document.getElementById("servoPos");
    servoP.innerHTML = slider.value;
    slider.oninput = function() {
      slider.value = this.value;
      servoP.innerHTML = this.value;
    }
    $.ajaxSetup({timeout:1000});
    function servo(pos) {
      $.get("/?value=" + pos + "&");
      {Connection: close};
    }
  </script>
</body>
</html>

Membuat Slider
Halaman HTML untuk proyek ini melibatkan pembuatan slider. Untuk membuat slider dalam HTML, Anda menggunakan tag <input>. Tag <input> menentukan bidang di mana pengguna dapat memasukkan data.

Terdapat berbagai jenis input yang tersedia. Untuk mendefinisikan sebuah slider, gunakan atribut "type" dengan nilai "range". Dalam slider, Anda juga perlu mendefinisikan rentang minimum dan maksimum menggunakan atribut "min" dan "max".


<input type="range" min="0" max="180" class="slider" id="servoSlider" onchange="servo(this.value)"/&gt
Anda juga perlu mendefinisikan atribut lain seperti:

  • class untuk menggaya slider
  • id untuk memperbarui posisi saat ini yang ditampilkan pada halaman web
  • Dan akhirnya, atribut onchange untuk memanggil fungsi servo untuk mengirim permintaan HTTP ke ESP32 ketika slider bergerak.
   

Menambahkan JavaScript ke Berkas HTML

Selanjutnya, Anda perlu menambahkan beberapa kode JavaScript ke berkas HTML Anda dengan menggunakan tag <script> dan </script>. Potongan kode ini akan memperbarui halaman web dengan posisi slider saat ini:"
var slider = document.getElementById("servoSlider");
var servoP = document.getElementById("servoPos");
servoP.innerHTML = slider.value;
slider.oninput = function() {
slider.value = this.value;
servoP.innerHTML = this.value;
}value=" + pos + "&");
}
Dan baris-baris selanjutnya melakukan permintaan HTTP GET ke alamat IP ESP pada jalur URL tertentu /?value=[POSISI_SLIDER]&.

$.ajaxSetup({timeout:1000});
function servo(pos) {
$.get("/?value=" + pos + "&");
}
Sebagai contoh, ketika slider berada pada posisi 0, Anda melakukan permintaan HTTP GET pada URL berikut:
Dan ketika slider berada pada posisi 180 derajat, Anda akan memiliki sesuatu seperti ini:
Dengan cara ini, ketika ESP32 menerima permintaan GET, ia dapat mengambil parameter nilai dalam URL dan memindahkan motor servo ke posisi yang tepat.

Kode

Sekarang, kita perlu menyertakan teks HTML sebelumnya dalam sketsa dan memutar motor servo sesuai dengan posisinya. Sketsa berikut ini melakukan hal tersebut.

Catatan: seperti yang telah kita sebutkan sebelumnya, Anda perlu menginstal add-on ESP32 di Arduino IDE Anda. Ikuti salah satu panduan berikut untuk menginstal papan ESP32 di Arduino IDE, jika Anda belum melakukannya:


Instruksi Windows – Papan ESP32 di Arduino IDE
Instruksi Mac dan Linux – Papan ESP32 di Arduino IDE

Salin kode berikut ke Arduino IDE Anda, tetapi jangan mengunggahnya sekarang. Pertama, kita akan melihat bagaimana cara kerjanya."
Berikut adalah kode HTML yang telah ditandai dengan kotak warna abu untuk kode Arduino yang Anda berikan
  
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
#include <WiFi.h>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
// GPIO the servo is attached to
static const int servoPin = 13;
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Set web server port number to 80
WiFiServer server(80);
// Variable to store the HTTP request
String header;
// Decode HTTP GET value
String valueString = String(5);
int pos1 = 0;
int pos2 = 0;
// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;
void setup() {
Serial.begin(115200);
myservo.attach(servoPin); // attaches the servo on the servoPin to the servo object
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects,
currentTime = millis();
previousTime = currentTime;
Serial.println("New Client."); // print a message out in the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
currentTime = millis();
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// Display the HTML web page
client.println(""); client.println(""); client.println(""); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println(""); client.println(""); // Web Page client.println("

ESP32 with Servo

"); client.println("

Position:

"); client.println(""); client.println(""); client.println("");
//GET /?value=180& HTTP/1.1
if(header.indexOf("GET /?value=")>=0) {
pos1 = header.indexOf('=');
pos2 = header.indexOf('&');
valueString = header.substring(pos1+1, pos2);
//Rotate the servo
myservo.write(valueString.toInt());
Serial.println(valueString);
}
// The HTTP response ends with another blank line
client.println();
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}
Cara Kerja Kode
Pertama, kita menyertakan libarary Servo, dan membuat objek servo yang disebut myservo.

#include
Servo myservo; // create servo object to control a servo
Kita juga membuat variabel untuk menyimpan nomor GPIO yang terhubung ke servo. Dalam kasus ini, GPIO 13.

const int servoPin = 13;
Jangan lupa bahwa Anda perlu memodifikasi dua baris berikut untuk menyertakan kredensial jaringan Anda.
// Replace with your network credentials const char* ssid = "";
const char* password = "";
Kemudian, buat beberapa variabel yang akan digunakan untuk mengekstrak posisi slider dari permintaan HTTP.
// Decode HTTP GET value
String valueString = String(5);
int pos1 = 0;
int pos2 = 0;
setup()
Dalam setup(), Anda perlu menghubungkan servo ke GPIO yang terhubung dengannya, dengan menggunakan myservo.attach().
myservo.attach(servoPin); // attaches the servo on the servoPin to the servo object

Bagian pertama dari loop() membuat server web dan mengirimkan teks HTML untuk menampilkan halaman web. Kami menggunakan metode yang sama yang telah kami gunakan dalam proyek server web ini.

Bagian berikut dari kode mengambil nilai slider dari permintaan HTTP."
//GET /?value=180& HTTP/1.1
if(header.indexOf("GET /?value=") >= 0) {
pos1 = header.indexOf('=');
pos2 = header.indexOf('&');
valueString = header.substring(pos1 + 1, pos2);
}
Ketika Anda menggerakkan slider, Anda membuat permintaan HTTP pada URL berikut yang berisi posisi slider antara tanda = dan & 

Anda dapat menandai URL HTTP tersebut dalam HTML seperti berikut:
http://your-esp-ip-address/?value=[SLIDER_POSITION]&
Nilai posisi slider disimpan dalam variabel valueString.

Kemudian, kita mengatur servo ke posisi tertentu tersebut menggunakan myservo.write() dengan variabel valueString sebagai argumen. Variabel valueString adalah string, jadi kita perlu menggunakan metode toInt() untuk mengonversinya menjadi angka bulat - tipe data yang diterima oleh metode write()."
myservo.write(valueString.toInt());
Menguji Server Web
Sekarang Anda dapat mengunggah kode ke ESP32 Anda - pastikan Anda telah memilih papan yang benar dan port COM yang benar. Juga jangan lupa untuk memodifikasi kode untuk menyertakan kredensial jaringan Anda.

Setelah mengunggah kode, buka Serial Monitor pada kecepatan baud 115200.
Tekan tombol "Enable" pada ESP32 untuk me-restart papan, dan salin alamat IP ESP32 yang muncul di Serial Monitor.

Buka peramban Anda, tempelkan alamat IP ESP, dan Anda akan melihat halaman web yang telah Anda buat sebelumnya. Geser slider untuk mengontrol motor servo.



Di Serial Monitor, Anda juga dapat melihat permintaan HTTP yang Anda kirimkan ke ESP32 ketika Anda menggerakkan slider.



Eksperimenlah dengan server web Anda untuk melihat apakah semuanya berfungsi dengan baik.


Penutup

Secara ringkas, dalam tutorial ini Anda telah belajar cara mengendalikan motor servo dengan ESP32 dan cara membuat server web dengan slider untuk mengontrol posisinya.

Ini hanyalah contoh bagaimana mengendalikan motor servo. Alih-alih slider, Anda dapat menggunakan bidang input teks, beberapa tombol dengan sudut-sudut yang telah ditentukan, atau bidang input lain yang sesuai.

Referensi : 
"ESP32 Servo Motor Web Server with Arduino IDE", Random Nerd Tutorial, https://randomnerdtutorials.com/esp32-servo-motor-web-server-arduino-ide/

Unggah Kode ke ESP32-CAM AI-Thinker Menggunakan Pemrogram USB ESP32-CAM-MB (Cara Paling Mudah)

Pelajari cara mengunggah kode ke board ESP32-CAM AI-Thinker menggunakan pemrogram USB mikro ESP32-CAM-MB. Ini adalah cara paling mudah untuk memprogram board ESP32-CAM Anda.


Pemrogram USB mikro ini berfungsi seperti perisai yang Anda pasang pada board ESP32-CAM. Pemrogram ini dilengkapi dengan soket USB yang Anda hubungkan langsung ke komputer Anda.



Modul ESP32-CAM AI-Thinker adalah board pengembangan ESP32 dengan kamera OV2640, dukungan kartu microSD, lampu kilat flash bawaan, dan beberapa pin GPIO untuk menghubungkan perangkat tambahan. Dan semuanya hanya dengan biaya beberapa rupiah.


Namun, salah satu masalah terbesar saat bekerja dengan modul ESP32-CAM Ai-Thinker adalah mengunggah kode ke board tersebut. Board AI-Thinker tidak dilengkapi dengan pemrogram USB bawaan. Dalam tutorial sebelumnya, kami merekomendasikan menggunakan pemrogram FTDI untuk menghubungkan ke board melalui pin serial.


Selain itu, Anda juga perlu mengikuti dua atau tiga langkah lainnya hingga berhasil mengunggah kode. Tetapi sekarang, Anda dapat dengan mudah menggunakan pemrogram USB ESP32-CAM-MB dan klik tombol Unggah untuk berhasil memprogram board Anda. Begitulah cara yang sederhana.


Mendapatkan Pemrogram USB ESP32-CAM-MB

Anda dapat membuka tautan berikut untuk memeriksa toko-toko yang tersedia untuk mendapatkan Pemrogram USB ESP32-CAM-MB. Paket tersebut termasuk Pemrogram ESP32-CAM-MB dan mungkin juga termasuk board ESP32-CAM itu sendiri.




Pemrogram USB Mikro ESP32-CAM-MB dengan Chip Serial CH340G untuk OV2640

Pemrogram ESP32-CAM AI-Thinker MB

Pemrogram ESP32-CAM AI-Thinker MB adalah perisai yang Anda pasang pada pin GPIO board ESP32-CAM Anda. Gambar berikut menunjukkan pemrogram dan ESP32-CAM berdampingan.


Pemrogram dilengkapi dengan chip USB ke serial CH340C.


Ini memungkinkan Anda untuk memprogram ESP32-CAM menggunakan port USB pada perisai.



Pemrogram Port Micro USB Chip Serial CH340G ESP32-CAM-MB

Selain itu, perisai juga dilengkapi dengan tombol RESET dan BOOT (IO0). Ini dapat berguna untuk dengan mudah mengatur ulang ESP32-CAM atau memasukkannya ke dalam mode pemrograman.


Memprogram ESP32-CAM Menggunakan Pemrogram MB (Arduino IDE)

Untuk memprogram board ESP32-CAM dengan Arduino IDE, Anda perlu menginstal Arduino IDE serta penambahan ESP32. Ikuti tutorial berikut untuk menginstal penambahan ESP32, jika belum melakukannya:


  • Menginstal Board ESP32 di Arduino IDE

Kemudian, cukup hubungkan pemrogram MB ke ESP32-CAM seperti yang ditunjukkan dalam gambar berikut.


Pemrogram USB Mikro ESP32-CAM-MB dengan Chip Serial CH340G untuk Kamera OV2640

Kemudian, hubungkan board ke komputer Anda menggunakan kabel USB.


Setelah itu, di Arduino IDE Anda, ikuti langkah-langkah berikut:


1) Pergi ke Tools > Board dan pilih AI-Thinker ESP32-CAM. Anda harus menginstal penambahan ESP32. Jika tidak, board ini tidak akan muncul di menu Boards.



Pilih AI-Thinker ESP32-CAM di Menu Tools Arduino IDE

2) Pergi ke Tools > Port dan pilih port COM tempat ESP32-CAM terhubung.

Catatan : Jika board tidak muncul, itu berarti Anda mungkin belum menginstal driver CH340C di komputer Anda. Buka Google dan cari "driver CH340C" diikuti dengan sistem operasi Anda, lalu instal driver tersebut.

3) Untuk tujuan demonstrasi, Anda dapat menyalin sketsa berkedip berikut:


/*********
  Rui Santos
  Complete instructions at https://RandomNerdTutorials.com/esp32-cam-projects-ebook/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

// ledPin refers to ESP32-CAM GPIO 4 (flashlight)
const int ledPin = 4;

void setup() {
  // initialize digital pin ledPin as an output
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(2000);
  digitalWrite(ledPin, LOW);
  delay(2000);
}

4) Selanjutnya, klik tombol Unggah di Arduino IDE Anda.

Memrogram ESP32-CAM dengan Arduino IDE
Dan itu saja!

Anda seharusnya menerima pesan yang menyatakan bahwa kode telah berhasil diunggah dan board Anda seharusnya berkedip dengan lampu LED flash.

Penutup


Menggunakan Pemrogram ESP32-CAM AI-Thinker MB adalah cara paling mudah untuk memprogram board ESP32-CAM. Anda tidak perlu lagi menggunakan pemrogram FTDI dan mengalami masalah waktu habis.

Kami berharap Anda telah menemukan artikel ini dan bermanfaat. Anda dapat mencoba proyek-proyek kami dengan ESP32-CAM:

Tutorial Menghubungkan Sensor Kelembaban Tanah dengan Arduino


Ketika Anda mendengar istilah 'taman pintar', salah satu hal pertama yang muncul dalam pikiran adalah sistem yang memantau tingkat kelembaban tanah dan secara otomatis menyuplai jumlah air yang diperlukan ke tanaman.


Dengan sistem ini, tanaman dapat disiram hanya saat diperlukan, menghindari penyiraman berlebihan atau kurang.


Jika Anda ingin membangun sistem seperti itu, Anda pasti memerlukan Sensor Kelembaban Tanah.


Bagaimana Cara Kerja  Sensor Kelembaban Tanah ?

Sensor kelembaban tanah beroperasi dengan cara yang sederhana.


Probu dengan bentuk garpu dan dua konduktor terbuka berfungsi sebagai resistor variabel (serupa dengan potensiometer) yang resistansinya berubah dengan konten kelembaban tanah.




resistansi ini bervariasi terbalik dengan kelembaban tanah:


  • Semakin banyak air di tanah, konduktivitas semakin baik dan resistansinya semakin rendah.
  • Semakin sedikit air di tanah, konduktivitas semakin rendah dan resistansinya semakin tinggi.

Sensor ini menghasilkan tegangan keluaran sesuai dengan resistansi, yang dengan mengukurnya kita dapat menentukan tingkat kelembaban tanah.


Gambaran Perangkat

Sebuah sensor kelembaban tanah tipikal terdiri dari dua bagian.


Alat ukur 

Sensor ini mencakup alat ukur berbentuk garpu dengan dua konduktor terbuka yang dimasukkan ke dalam tanah atau tempat mana pun yang kelembaban kontennya akan diukur.


Seperti yang disebutkan sebelumnya, itu bertindak sebagai resistor variabel, dengan resistansi bervariasi sesuai dengan kelembaban tanah.




Modul

Selain itu, sensor ini mencakup modul elektronik yang menghubungkan probu ke Arduino.


Modul ini menghasilkan tegangan keluaran berdasarkan resistansi probu, yang tersedia pada pin Analog Output (AO).


Sinyal yang sama diumpankan ke Komparator Presisi Tinggi LM393, yang mengubahnya menjadi digital dan membuatnya tersedia pada pin Digital Output (DO).




Modul ini mencakup potensiometer untuk mengatur sensitivitas keluaran digital (DO).


Anda dapat menggunakannya untuk mengatur ambang batas, sehingga saat tingkat kelembaban tanah melebihi ambang batas, modul mengeluarkan sinyal rendah jika tidak, maka tinggi.


Pengaturan ini sangat berguna untuk memicu tindakan saat ambang tertentu tercapai. Misalnya, jika tingkat kelembaban di tanah melebihi ambang tertentu, Anda dapat mengaktifkan relay untuk memulai penyiraman tanaman.



Putar knob searah jarum jam untuk meningkatkan sensitivitas dan berlawanan jarum jam untuk menguranginya.


Modul ini juga mencakup dua LED. LED Daya menyala saat modul dihidupkan, dan LED Status menyala saat tingkat kelembaban tanah melebihi nilai ambang.


Pinout Sensor Kelembaban Tanah

Sensor kelembaban tanah sangat mudah digunakan dan hanya memerlukan empat pin untuk dihubungkan.



AO (Analog Output) menghasilkan tegangan keluaran analog yang sebanding dengan tingkat kelembaban tanah, sehingga tingkat yang lebih tinggi menghasilkan tegangan yang lebih tinggi dan tingkat yang lebih rendah menghasilkan tegangan yang lebih rendah.


DO (Digital Output) menunjukkan apakah tingkat kelembaban tanah berada dalam batas yang ditentukan. D0 menjadi LOW ketika tingkat kelembaban melebihi nilai ambang batas (seperti yang diatur oleh potensiometer), dan sebaliknya tinggi.


VCC menyuplai daya ke sensor. Disarankan agar sensor diberi daya dari 3.3V hingga 5V. Harap diingat bahwa keluaran analog akan bervariasi tergantung pada tegangan yang diberikan ke sensor.


GND adalah pin ground.


Eksperimen 1 - Mengukur Kelembaban Tanah Menggunakan Output Analog (A0)

Dalam eksperimen pertama kami, kami akan membaca keluaran analog untuk memperkirakan tingkat kelembaban tanah.


Pengawatan

Mari hubungkan sensor kelembaban tanah ke Arduino.


Mari mulai dengan memberi daya pada sensor. Untuk ini, Anda dapat menghubungkan pin VCC modul ke pin 5V Arduino.


Namun, masalah yang sudah dikenal dengan sensor ini adalah bahwa umur pakainya lebih pendek karena terus-menerus terpapar kelembaban. Lebih lanjut, pemberian daya konstan pada sensor sementara terkubur dalam tanah signifikan mempercepat laju korosi.


Untuk menghindari hal ini, disarankan agar sensor hanya dihidupkan saat pengukuran dilakukan.


Salah satu cara mudah untuk melakukannya adalah dengan menghubungkan pin daya sensor ke pin digital di Arduino dan mengaturnya menjadi HIGH atau LOW sesuai kebutuhan. Juga, daya total yang ditarik oleh modul (dengan kedua LED menyala) sekitar 8 mA, sehingga memberi daya pada modul dari pin digital adalah aman. Jadi, kita akan menghubungkan pin VCC ke pin digital #7 Arduino.


Terakhir, hubungkan pin A0 ke pin ADC A0 Arduino.


Pengawatan ditunjukkan dalam gambar di bawah.



Pengawatan sensor kelembaban tanah dengan Arduino untuk membaca keluaran analog

Mencari Nilai Ambang Batas

Untuk memperkirakan tingkat kelembaban tanah, catat nilai keluaran sensor Anda saat tanah se-kering mungkin dan saat benar-benar jenuh.

Cukup jalankan sketsa di bawah ini dan ambil pembacaan Anda.


void setup() {
	pinMode(sensorPower, OUTPUT);
	
	// Initially keep the sensor OFF
	digitalWrite(sensorPower, LOW);
	
	Serial.begin(9600);
}

void loop() {
	//get the reading from the function below and print it
	Serial.print("Analog output: ");
	Serial.println(readSensor());
	
	delay(1000);
}

//  This function returns the analog soil moisture measurement
int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);							// Allow power to settle
	int val = analogRead(sensorPin);	// Read the analog value form sensor
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;							// Return analog moisture value
}



Ketika Anda menjalankan sketsa tersebut, Anda seharusnya melihat pembacaan yang mirip dengan berikut:


  • Saat tanah kering (sekitar 850)

  • Saat tanah sepenuhnya jenuh (sekitar 400)


Uji ini mungkin memerlukan beberapa percobaan dan kesalahan. Setelah Anda mendapatkan pembacaan tersebut, Anda dapat menggunakannya sebagai ambang batas untuk memicu tindakan.


Kode Arduino

Sketsa di bawah ini memperkirakan tingkat kelembaban tanah menggunakan nilai ambang batas berikut:



  • < 500 terlalu basah
  • 500-750 adalah rentang target
  • > 750 cukup kering untuk disiram"



/* Change these values based on your calibration values */
#define soilWet 500   // Define max value we consider soil 'wet'
#define soilDry 750   // Define min value we consider soil 'dry'

// Sensor pins
#define sensorPower 7
#define sensorPin A0

void setup() {
	pinMode(sensorPower, OUTPUT);
	
	// Initially keep the sensor OFF
	digitalWrite(sensorPower, LOW);
	
	Serial.begin(9600);
}

void loop() {
	//get the reading from the function below and print it
	int moisture = readSensor();
	Serial.print("Analog Output: ");
	Serial.println(moisture);

	// Determine status of our soil
	if (moisture < soilWet) {
		Serial.println("Status: Soil is too wet");
	} else if (moisture >= soilWet && moisture < soilDry) {
		Serial.println("Status: Soil moisture is perfect");
	} else {
		Serial.println("Status: Soil is too dry - time to water!");
	}
	
	delay(1000);	// Take a reading every second for testing
					// Normally you should take reading perhaps once or twice a day
	Serial.println();
}

//  This function returns the analog soil moisture measurement
int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);							// Allow power to settle
	int val = analogRead(sensorPin);	// Read the analog value form sensor
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;							// Return analog moisture value
}
If everything is fine, you should see something

Jika semuanya baik-baik saja, Anda seharusnya melihat sesuatu yang serupa di monitor serial.

keluaran analog sensor kelembaban tanah


Eksperimen 2 – Mengukur Kelembaban Tanah menggunakan Keluaran Digital (D0)

Pada eksperimen kedua kami, kita akan menggunakan keluaran digital untuk menentukan apakah tingkat kelembaban tanah berada dalam batas yang dapat diterima.


Pengawatan

Kita akan menggunakan kembali rangkaian percobaan sebelumnya. Cukup putuskan koneksi ke pin ADC dan hubungkan pin D0 pada modul ke pin digital #8 di Arduino.


Gambar berikut menunjukkan pengawatan tersebut.



pengawatan sensor kelembaban tanah dengan arduino untuk membaca keluaran digital

Menetapkan ambang batas

Modul ini memiliki potensiometer bawaan untuk mengatur ambang batas tingkat kelembaban di atasnya yang modul akan mengeluarkan sinyal LOW dan LED status akan menyala.

keluaran digital sensor kelembaban tanah

Sekarang, untuk menetapkan ambang batas tersebut, masukkan probe ke dalam tanah ketika tanaman Anda membutuhkan penyiraman dan putar potensiometer searah jarum jam sampai LED Status menyala. Kemudian, putar potensiometer kembali berlawanan arah jarum jam sampai LED mati.


Itulah yang perlu Anda lakukan; modul Anda kini siap digunakan.


Kode Arduino

Sekarang, unggah sketsa di bawah ini ke Arduino Anda.


// Sensor pins
#define sensorPower 7
#define sensorPin 8

void setup() {
	pinMode(sensorPower, OUTPUT);

	// Initially keep the sensor OFF
	digitalWrite(sensorPower, LOW);

	Serial.begin(9600);
}

void loop() {
	//get the reading from the function below and print it
	int val = readSensor();
	Serial.print("Digital Output: ");
	Serial.println(val);

	// Determine status of our soil moisture situation
	if (val) {
		Serial.println("Status: Soil is too dry - time to water!");
	} else {
		Serial.println("Status: Soil moisture is perfect");
	}

	delay(1000);	// Take a reading every second for testing
					// Normally you shoul take reading perhaps every 12 hours
	Serial.println();
}

//  This function returns the analog soil moisture measurement
int readSensor() {
	digitalWrite(sensorPower, HIGH);  // Turn the sensor ON
	delay(10);              // Allow power to settle
	int val = digitalRead(sensorPin); // Read the analog value form sensor
	digitalWrite(sensorPower, LOW);   // Turn the sensor OFF
	return val;             // Return analog moisture value
}


Anda seharusnya melihat keluaran serupa di monitor serial.


Tutorial Menggabungkan Sensor Kelembaban Tanah Dengan Arduino 

Teknologi Sensor kelembaban Tanah : Menjaga Tanaman Menjadi Efisien

Sensor Kelembaban Tanah 

Soil Moisture Sensor 

Cara Kerja Sensor Kelembaban Tanah 

Cara Kerja Soil Moisture Sensor 

Mengukur Kelembaban Tanah Dengan Sensor Kelembaban Tanah

Penyiraman Tanah Otomatis 

Membuat Smart Garden dengan Arduino 

Membuat Taman Pintar Dengan Arduino

Experimen Mengukur Kelembaban Tanah 

Prinsip Kerja Sensor Kelembaban Tanah 

Sistem Penyiraman Otomatis Dengan Sensor Kelembaban Tanah 

Sensor Kelembaban Tanah Arduino 

Cara Menggunakan Sensor Kelembaban Tanah 

Rangkaian Sensor Kelembaban Tanah 

Cara Menampilkan Output Sensor Kelembaban Tanah 

Cara Menampilkan Output Sensor Kelembaban Tanah di LED 

Cara Membuat Program Sensor Kelembaban Tanah di Arduino IDE

Cara Seting Sensor Kelembaban Tanah di Arduino