Daftar Isi:
- Langkah 1: Sumber Daya yang Digunakan
- Langkah 2: NodeMCU ESP32S - Pinout
- Langkah 3: Periferal ESP32
- Langkah 4: Kontrol Motor Servo PWM
- Langkah 5: Tangkapan Analog
- Langkah 6: Sirkuit - Server dan Klien
- Langkah 7: Kode Sumber Titik Akses dan Server
- Langkah 8: Kode Sumber Pelanggan
- Langkah 9: File
Video: Kamera PANTILT Dengan ESP32: 9 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Hari ini, saya akan menghadirkan PAN TILT, yaitu perangkat yang memungkinkan pergerakan kamera ke arah atas, bawah, dan ke samping. Saya sendiri memproduksi perangkat ini melalui komponen cetak 3D, menggunakan dua servo dan ESP32, yang memungkinkan untuk mengontrol mekanisme ini melalui WiFi. Mari kita lakukan pembacaan menggunakan saluran AD dari ESP32, serta operasi analog menggunakan pengontrol LED_PWM. Juga, kami menerapkan kontrol atas koneksi TCP / IP.
Dalam video, Anda dapat melihat bahwa saya memiliki ESP32 yang membaca nilai dari dua potensiometer, yang dikirim (melalui WiFi) ke ESP32 lain. Itu terhubung ke dua motor servo. Kamera bergerak (dan terpasang pada PAN TILT) ke arah atas, bawah, atau samping, tergantung pada kontrol yang Anda buat melalui pot.
Tautan ke desain cetak 3D PAN TILT dapat ditemukan di sini:
Langkah 1: Sumber Daya yang Digunakan
• Beberapa jumper untuk koneksi
• Dua Node MCU ESP32s
• Dua kabel USB untuk ESP32
• WebCam untuk kontrol
• Dua pot kontrol
• Protoboard
• Sebuah sumber untuk servos
Langkah 2: NodeMCU ESP32S - Pinout
Langkah 3: Periferal ESP32
Periferal PWM ESP32 memiliki dua periferal yang mampu menghasilkan sinyal PWM. Ini termasuk engine Pulse Width Modulator (MCPWM) yang dirancang untuk kontrol daya dan motor, dan LED_PWM, yang dikembangkan untuk kontrol intensitas LED. Tetapi mereka juga dapat digunakan secara umum.
Kami akan menggunakan LED_PWM, yang dapat menghasilkan 16 saluran PWM independen dengan periode dan siklus kerja yang dapat dikonfigurasi. Ini memiliki resolusi hingga 16 bit.
Langkah 4: Kontrol Motor Servo PWM
Kontrol motor servo dilakukan dengan mengatur modulasi lebar pulsa persegi dengan frekuensi tertentu.
Untuk servo yang digunakan (dan juga sebagian besar), frekuensinya berada pada 50Hz. Juga, lebar 1 hingga 2 ms panjang pulsa menentukan posisi sudut servo.
Kami akan merutekan saluran 0 dari LED_PWM ke GPIO13, dan saluran 1 ke GPIO12, menggunakan informasi ini untuk melakukan kontrol.
Langkah 5: Tangkapan Analog
Periferal konversi analog ke digital
ESP32 memiliki konverter analog-ke-digital yang dapat diterapkan hingga 18 saluran, tetapi hanya pada GPIO yang mendukung analog.
Tegangan yang diberikan tidak boleh melebihi kisaran 0 hingga 3V.
Konversi yang dilakukan tidak mempertahankan kesalahan konstan untuk semua tegangan sampel, dan ini semua tergantung pada rentang yang dikonfigurasi. Untuk kisaran 150mV pada 2, 450V, pemeriksaan perilaku diperlukan untuk aplikasi yang lebih kritis.
Untuk penangkapannya, kita akan menggunakan potensiometer 10k sebagai pembagi tegangan. Pengambilan akan dilakukan di saluran ADC0 dan ADC3, dapat diakses oleh GPIO36 dan GPIO39.
Langkah 6: Sirkuit - Server dan Klien
Langkah 7: Kode Sumber Titik Akses dan Server
Pernyataan
Saya menyertakan perpustakaan WiFi, dan saya mendefinisikan beberapa variabel.
#include // incluso da biblioteca WiFi const int freq = 50; //frekuncia melakukan PWM const int canal_A = 0; //primeiro canal do controlador LED_PWM const int canal_B = 1; //segundo canal do controlador LED_PWM const int resolucao = 12; //Resolução usado no controlador LED_PWM const int pin_Atuacao_A = 13; //Pino para onde o canal 0 será redirecionado const int pin_Atuacao_B = 12; //Pino para onde o canal 1 será redirecionado const char* ssid = "ESP32ap"; //constante com o SSID melakukan WiFi melakukan ponto de acesso ESP32 const char* password = "12345678"; //senha untuk konfirmasi de conexão no ponto de acesso const int port = 2; //porta na qual o server receberá sebagai conexões int ciclo_A = 0; //variável que receberá o ciclo de atuação do canal A int ciclo_B = 0; //variável que receberá o ciclo de atuação lakukan kanal Server WiFiServer(port); //deklarasikan lakukan objeto server IPAddress myIP; //deklarasikan da variável de IP
Mempersiapkan ()
Di sini, kita mendefinisikan pin output. Kami mengatur saluran ke frekuensi yang diinginkan dan mengatur nilai PWM.
void setup(){ pinMode(pin_Atuacao_A, OUTPUT); //definisikan pino de atuação A como saída pinMode(pin_Atuacao_B, OUTPUT); //definindo atau pino de atuação B como saída ledcSetup(canal_A, freq, resolucao); //Menyesuaikan kanal 0 untuk frekuensi 50 Hz dan resolusi 12bit ledcSetup(kanal_B, frekuensi, resolusi); //Menyesuaikan kanal 1 untuk frekuensi 50 Hz dan resolusi 12 bit ledcAttachPin(pin_Atuacao_A, canal_A); //redirectionando o canal 0 para o pino 13 ledcAttachPin(pin_Atuacao_B, canal_B); //redirectionando o canal 1 para o pino 12 ledcWrite(canal_A, ciclo_A); //mendefinisikan keberanian melakukan PWM para 0 ledcWrite(canal_B, ciclo_B); //definisikan keberanian melakukan PWM para 0
Kami memulai serial, titik akses dengan SSID ESP32ap, dan kata sandi. Kami kemudian mendapatkan IP server dan memulai server.
Serial.begin(115200); //iniciando a Serial Serial.println("Iniciando ponto de acesso: " + String(ssid)); //mensagem WiFi.softAP (ssid, password); //iniciando ponto de acesso com SSID ESP32ap dan senha 12345678 Serial.println("Obtendo IP"); //mensagem myIP = WiFi.softAPIP(); //obtendo o IP do server (como não foi configurado deverá ser o padrão de fábrica) Serial.println("IP: " + WiFi.localIP()); //mensagem Serial.println("Iniciando server em: " + String(port)); //mensagem server.begin(); //iniciando atau pelayan }
Lingkaran ()
Di Loop, hal pertama yang akan kita lakukan adalah membuat instance klien, menghubungkan dan mengikat ke variabel klien. Periksa apakah klien terhubung. Jika demikian, kita mulai variabel yang akan menerima data. Selama koneksi dibuat, dan jika data diterima, kami membaca karakter untuk variabel c. Akhirnya, kami menggabungkan c dalam variabel data.
void loop() { klien WiFiClient = server.available(); //se um klien conectar, associe a variável klien if (cliente.connected()) { //se há um klien conectado String dados = ""; //inicia a variável que receberá os dados Serial.println("Client conectado."); //mensagem while (cliente.connected()) { //enquanto a conexão estiver estabelecida if (cliente.available()) { //se houver dados a receber char c = cliente.read(); //leia os caracteres para a variável c dados = dados + c; //menggabungkan c na variável dados
Jika karakter baris baru diterima, kami mencari indeks karakter ', ' dalam string di data. Kami mendapatkan substring sampai tepat sebelum koma, dan kemudian kami mengubahnya menjadi integer. Kami mengatur PWM saluran A dan B. Kami menghapus variabel.
if (c == '\n') { //se um caracter de nova linha untuk recebido int virgula = dados.indexOf(', '); //procure pelo índice do caracter ', ' na string em dados ciclo_A = (dados.substring(0, virgula)).toInt(); //obtenha a substring até antes da vírgula e converta para inteiro ciclo_B = dados.substring(virgula + 1, dados.length()).toInt();//obtenha a substring após a vírgula e converta para inteiro ledcWrite(canal_A, ciclo_A); //Ajusta o PWM lakukan kanal A ledcWrite(canal_B, ciclo_B); //Ajusta o PWM lakukan kanal B dados = ""; //Limpa a variável } } } }
Jika klien terputus, kami mengkonfirmasi akhir koneksi. Kami menunggu sebentar dan mencetak "Tidak ada klien yang terhubung". Kami kemudian menunggu satu detik lagi sebelum memulai kembali.
// caso o client se desconecte, konfirmasi fim da conexão delay(50); //aguarda um momento cliente.stop(); Serial.println("Nenhum klien terhubung."); //mensage delay(1000); //aguarda um segundo antes de reiniciar }
Langkah 8: Kode Sumber Pelanggan
Pernyataan
Kami telah menyertakan perpustakaan WiFi lagi, kali ini pada klien. Juga, kami mendefinisikan variabel.
#include const char* ssid = "ESP32ap"; //SSID melakukan ponto de acesso ESP32 const char* kata sandi = "12345678"; //Senha para acessar ke ponto de acesso const uint16_t port = 2; //Porta de escuta do servidor const char * host = "192.168.4.1"; //endereço IP melakukan servidor const int pin_Leikura_A = 36; //GPIO dengan waktu luang melakukan ADC0 const int pin_Leitur_B = 39; //GPIO dengan waktu luang melakukan ADC3 int ciclo_A = 0; //variável que receberá o valor do ciclo do PWM A int ciclo_B = 0; //Variável que receberá o valor do ciclo do PWM B klien WiFiClient; //declaração do objeto cliente
Mempersiapkan ()
Kami mendefinisikan GPIO sebagai input, memulai serial, dan menghubungkan ke titik akses.
void setup(){ pinMode(pin_Leitur_A, INPUT); //menentukan GPIO como entrada pinMode(pin_Leitura_B, INPUT); //menentukan GPIO dan memasukkan Serial.begin(115200); //inicia a comunicao serial WiFi.begin(ssid, password); //konekta ao ponto de acesso }
Lingkaran ()
Dalam Loop ini, kita akan terhubung ke server, artinya ESP yang lain.
void loop(){ //se não conectado ao ponto de acesso, tenta se conectar while (WiFi.status() != WL_CONNECTED) { Serial.println(String(millis()) + " - Conectando no WiFi " + ssid + "…"); //mensagem WiFi.begin(ssid,password); penundaan(2000); } Serial.println(String(millis()) + " - Conectado…"); //mensagem //se não conectado ao service, tenta se conectar while (!cliente.connect(host, port)) { Serial.println(String(millis()) + " - Conectando no Servidor " + host + ":" + port + "…"); //mensage delay(1000); }
Pada langkah ini, saat terhubung ke server, kami mengeksekusi variabel untuk menyimpan pembacaan ADC0 dan ADC3. Juga, kami melakukan pembacaan 500 sampel dan rata-rata pembacaan. Kami memetakan pembacaan untuk membuat durasi yang benar untuk kontrol servos, dan menggabungkan dan mengirimkannya ke server.
//enquanto estiver conectado ao layanan while (cliente.connected()) { int leitura_A = 0; //variável para armazenar a leitura do ADC0 int leitura_B = 0; //variável para armazenar a leitura do ADC3 int amostras = 500; //número de amostras int contador = 0; //contador de amostras while (contador < amostras) { //acumua várias leituras leitura_A = leitura_A + analogRead(pin_Leitura_A); leitura_B = leikura_B + analogBaca(pin_Leitura_B); kontador++; } leitura_A = leitur_A / amostras; //média das leituras leitura_B = leitura_B / amostras; ciclo_A = peta(leitur_A, 0, 4095, 140, 490); //mapeia a leitura para criar a duração correta para controle do servo ciclo_B = map(leitura_B, 0, 4095, 140, 490); //mapeia a leitura para criar a duração correta para controle do servo //concatena e envia para o server cliente.println(String(ciclo_A) + ", " + String(ciclo_B)); }
Terakhir, jika tidak terhubung, kami memastikan bahwa koneksi telah dihentikan dengan menampilkan pesan yang setara.
//se não coonectado, garante que a conexão foi finalizada cliente.stop(); Serial.println(String(millis()) + " - klien desconectado…"); //mensage }
Langkah 9: File
Unduh file:
SAYA TIDAK
Direkomendasikan:
Kamera IP Dengan Deteksi Wajah Menggunakan Papan ESP32-CAM: 5 Langkah
Kamera IP Dengan Deteksi Wajah Menggunakan Papan ESP32-CAM: Posting ini berbeda dibandingkan dengan yang lain dan kami melihat papan ESP32-CAM yang sangat menarik yang ternyata murah (kurang dari $9) dan mudah digunakan. Kami membuat kamera IP sederhana yang dapat digunakan untuk melakukan streaming umpan video langsung menggunakan 2
Kamera CCTV Dengan NodeMCU + Modul Kamera Laptop Lama (Dengan dan Tanpa Menggunakan Blynk): 5 Langkah
Kamera CCTV Dengan NodeMCU + Modul Kamera Laptop Lama (Dengan dan Tanpa Menggunakan Blynk): Hi guys! Dalam instruksi ini, saya akan menunjukkan kepada Anda bagaimana saya menggunakan modul kamera laptop lama dan nodeMCU untuk membuat sesuatu yang mirip dengan CCTV
Memulai Dengan ESP32 CAM - Streaming Video Menggunakan ESP CAM Melalui Wifi - Proyek Kamera Keamanan ESP32: 8 Langkah
Memulai Dengan ESP32 CAM | Streaming Video Menggunakan ESP CAM Melalui Wifi | Proyek Kamera Keamanan ESP32: Hari ini kita akan belajar cara menggunakan papan CAM ESP32 baru ini dan bagaimana kita dapat mengkodekannya dan menggunakannya sebagai kamera keamanan dan mendapatkan video streaming melalui wifi
Memulai Dengan ESP32 - Memasang Board ESP32 di Arduino IDE - Kode Blink ESP32: 3 Langkah
Memulai Dengan ESP32 | Memasang Board ESP32 di Arduino IDE | Kode Blink ESP32: Dalam instruksi ini kita akan melihat cara mulai bekerja dengan esp32 dan cara memasang papan esp32 ke Arduino IDE dan kami akan memprogram esp 32 untuk menjalankan kode blink menggunakan arduino ide
Ambil Foto Makro yang Menakjubkan Dengan Kamera Ponsel Kamera Apa Pun Terutama iPhone: 6 Langkah
Ambil Foto Makro yang Menakjubkan Dengan Kamera Ponsel Kamera Apa Pun… Terutama iPhone: Pernah ingin mendapatkan salah satu foto close up yang menakjubkan… foto yang mengatakan… WOW!?… dengan kamera ponsel kamera tidak kurang !? Pada dasarnya, ini adalah addon augmentasi untuk kamera ponsel apa pun untuk memperbesar lensa kamera Anda yang ada untuk mengambil