Disusun Oleh :
Kelompok IX
Mycel Natalis Stopper N 210491100015
Rafiudin Darmawan 200491100021
Abdul Kosim 200491100045
Alief Syava Arya Kusuma 200491100026
B. Langkah-langkah Rangkaian
Berikut merupakan langkah-langkah membuat projek UAS mikrokontroler
yang dijelaskan di bawah ini.
1. Hubungkan GND pada ESP32CAM ke GND FTDI FT232RL serta
hububgkan ke VCC pada sensor motion PIR.
2. Hubungkan 5V pada ESP32CAM ke VCC FTDI FT232RL serta
hubungkan ke GND sensor motion PIR.
3. Hubungkan input ESP32CAM pada kaki I103 ke output sensor motion
PIR.
4. Hubungkan kabel USB TTL pada FTDI FT232RL ke laptop.
5. Masukkan program Arduino berikut.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "esp_camera.h"
#include "UniversalTelegramBot.h"
#define BOT_TOKEN "5956338807:AAGGwHOK-
6I4OP9fAxOwxH7bym302bbO5o0"
#define chat_id "1958579735"
#define _debug
const char* ssid = "Hotspot@LabIPA-FT";
//const char* password = "rafi5678";
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
long bot_last_check;
int bot_check_interval = 3000;
bool hasMoreData;
camera_fb_t * fb = NULL;
bool hasMoreDataAvailable();
byte* getNextBuffer();
int getBufferLen();
//CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
int pirSensorPin = 13;
int motionDetected = LOW;
void setup() {
pinMode(pirSensorPin, INPUT);
Serial.begin(9600);
Serial.setDebugOutput(true);
Serial.println();
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
// jika ada PSRAM IC, init dengan UXGA resolution dan kualitas
JPEG yang lebih tinggi
// untuk buffer bingkat pra-alokasi yang lebih besar.
if(psramFound()){
config.frame_size = FRAMESIZE_QVGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_QVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
sensor_t * s = esp_camera_sensor_get();
// tampilan awal yang digunakan adalah vertikal dan warna agak jenuh
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // flip tampilan
s->set_brightness(s, 1); // menaikkan sedikit kecerahan
s->set_saturation(s, 0); // menurunkan saturasi
}
//drop down ukuran frame untuk frame rate awal yang lebih tinggi
s->set_framesize(s, FRAMESIZE_QVGA);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
bot.longPoll = 60;
}
bool hasMoreDataAvailable() {
Serial.println("Has more daa");
if (hasMoreData) {
hasMoreData = false;
return true;
}
return false;
}
byte* getNextBuffer() {
Serial.println("Next Buffer ");
if (fb)
return fb->buf;
return nullptr;
}
int getBufferLen() {
Serial.println("Buffer len");
if (fb)
return fb->len;
return 0;
}
void sendImage() {
Serial.println("Sending Image");
fb = NULL;
fb = esp_camera_fb_get();
hasMoreData = true;
Serial.println(fb->len);
bot.sendPhotoByBinary(chat_id, "image/jpeg", fb->len,
hasMoreDataAvailable, nullptr, getNextBuffer, getBufferLen);
esp_camera_fb_return(fb);
}
void loop() {
motionDetected = digitalRead(pirSensorPin); //pembacaan sensor PIR
if (motionDetected == HIGH) //ketika terdeteksi gerakan
{
if (millis() > bot_last_check + bot_check_interval) {
sendImage();
bot_last_check = millis();
}
}
delay(50);
}
6. Daftarkan akun telegram untuk mengetahui output gambar yang dikirim
melalui ESP32CAM yang telah dideteksi oleh sensor motion PIR.
7. Masuk ke telegram lalu cari BotFather.
8. Masukan nama bot telegram.
9. Masukan deskripsi pada bot telegram.
10. Cari bot telegram dengan username get id bot
11. Klik start lalu muncul chat id yang digunakan pada program di Arduino.
12. Berikut merupakan hasil dari projek mikrokontroller yang ditunjukkan
pada Gambar 4.
Gambar 4. Hasil projek mikrokontroller