Isi kandungan:
- Langkah 1: Sumber yang Digunakan
- Langkah 2: NodeMCU ESP32S - Pinout
- Langkah 3: Periferal ESP32
- Langkah 4: PWM Kawalan Motor Servo
- Langkah 5: Tangkapan Analog
- Langkah 6: Litar - Pelayan dan Pelanggan
- Langkah 7: Kod Sumber Titik Akses dan Pelayan
- Langkah 8: Kod Sumber Pelanggan
- Langkah 9: Fail
Video: Kamera PANTILT Dengan ESP32: 9 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Hari ini, saya akan mempersembahkan PAN TILT, yang merupakan alat yang membolehkan pergerakan kamera untuk arah atas, bawah, dan ke sisi. Saya sendiri menghasilkan peranti ini melalui bahagian bercetak 3D, menggunakan dua servo dan ESP32, yang memungkinkan untuk mengawal mekanisme ini melalui WiFi. Mari kita kemudian membaca bacaan menggunakan saluran AD ESP32, dan juga operasi analog menggunakan pengawal LED_PWM. Juga, kami menerapkan kawalan pada sambungan TCP / IP.
Dalam video tersebut, anda dapat melihat bahawa saya mempunyai ESP32 membaca nilai dua potensiometer, yang dihantar (melalui WiFi) ke ESP32 yang lain. Ia disambungkan ke dua motor servo. Kamera bergerak (dan terpasang pada PAN TILT) ke arah atas, bawah, atau ke samping, bergantung pada kawalan yang anda buat melalui periuk.
Pautan ke reka bentuk cetak PAN TILT 3D boleh didapati di sini:
Langkah 1: Sumber yang Digunakan
• Pelompat berganda untuk sambungan
• Dua Node MCU ESP32s
• Dua kabel USB untuk ESP32
• Kamera Web untuk kawalan
• Dua periuk kawalan
• Protoboard
• Sumber untuk servos
Langkah 2: NodeMCU ESP32S - Pinout
Langkah 3: Periferal ESP32
Periferal PWM ESP32 mempunyai dua periferal yang mampu menghasilkan isyarat PWM. Ini termasuk enjin Pulse Width Modulator (MCPWM) yang direka untuk kawalan kuasa dan motor, dan LED_PWM, yang dikembangkan untuk kawalan intensiti LED. Tetapi ia juga boleh digunakan secara umum.
Kami akan menggunakan LED_PWM, yang dapat menghasilkan 16 saluran PWM bebas dengan tempoh dan kitaran kerja yang boleh dikonfigurasi. Ia mempunyai resolusi sehingga 16 bit.
Langkah 4: PWM Kawalan Motor Servo
Kawalan motor servo dilakukan dengan menyesuaikan modulasi lebar nadi segiempat dengan frekuensi tertentu.
Untuk servo yang digunakan (dan juga untuk kebanyakan), frekuensi berada pada 50Hz. Juga, lebar nadi 1 hingga 2ms menentukan kedudukan sudut servo.
Kami akan mengarahkan saluran 0 LED_PWM ke GPIO13, dan saluran 1 ke GPIO12, menggunakan maklumat ini untuk melakukan kawalan.
Langkah 5: Tangkapan Analog
Perisian penukaran analog ke digital
ESP32 mempunyai penukar analog-ke-digital yang dapat diterapkan dalam hingga 18 saluran, tetapi hanya pada GPIO yang dibolehkan analog.
Voltan yang dikenakan tidak boleh melebihi julat 0 hingga 3V.
Penukaran yang dilakukan tidak mengekalkan ralat berterusan untuk semua voltan yang disampel, dan ini semua bergantung pada julat yang dikonfigurasi. Untuk julat 150mV pada 2, 450V, pemeriksaan tingkah laku diperlukan untuk aplikasi yang lebih kritikal.
Untuk penangkapan, kami akan menggunakan potensiometer 10k sebagai pembahagi voltan. Penangkapan akan dilakukan di saluran ADC0 dan ADC3, dapat diakses oleh GPIO36 dan GPIO39.
Langkah 6: Litar - Pelayan dan Pelanggan
Langkah 7: Kod Sumber Titik Akses dan Pelayan
Penyataan
Saya menyertakan perpustakaan WiFi, dan saya menentukan beberapa pemboleh ubah.
#include // inclusão da biblioteca WiFi const int freq = 50; // freência do PWM const int canal_A = 0; // kanal primeiro do controlador LED_PWM const int canal_B = 1; // terusan segundo 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"; // conste com o SSID do WiFi do ponto de acesso ESP32 const char * password = "12345678"; // senha para confirmação de conexão no ponto de acesso const int port = 2; // porta na qual o servidor receberá as 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 do canal Pelayan WiFiServer (port); // Dekaração do objeto servidor IPAdress myIP; // dekaração da variável de IP
Persediaan ()
Di sini, kami menentukan pin output. Kami menetapkan saluran ke frekuensi yang diingini dan menetapkan nilai PWM.
batal persediaan () {pinMode (pin_Atuacao_A, OUTPUT); // definindo o pino de atuação PinMode como saída (pin_Atuacao_B, OUTPUT); // definindo o pino de atuação B como saída ledcSetup (canal_A, freq, resolucao); // Ajustando o canal 0 para frequncia de 50 Hz e resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o kanal 1 untuk frekuensi 50 Hz e resolução de 12bits ledcAttachPin (pin_Atuacao_A, canal_A); // redirecionando o canal 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // redirecionando o canal 1 para o pino 12 ledcWrite (canal_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Kami memulakan siri, titik akses dengan SSID ESP32ap, dan kata laluan. Kami kemudian mendapat IP pelayan dan memulakan pelayan.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, kata laluan); // iniciando o ponto de acesso com SSID ESP32ap e senha 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // obtendo o IP do servidor (como não foi configurado deverá ser o padrão de fábrica) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (port)); // mensagem server.begin (); // iniciando o servidor}
Gelung ()
Di Loop, perkara pertama yang akan kita lakukan adalah memberi contoh kepada klien, menghubungkan dan mengikat kepada pemboleh ubah klien. Periksa sama ada pelanggan tersambung. Sekiranya demikian, kami memulakan pemboleh ubah yang akan menerima data. Selagi sambungan dibuat, dan jika data diterima, kita membaca watak-watak untuk pemboleh ubah c. Akhirnya, kami menggabungkan c dalam pemboleh ubah data.
gelung kosong () {WiFiClient cliente = server.available (); // se um cliente conectar, associe a variável cliente if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // inicia a variável que receberá os dados Serial.println ("Cliente conectado."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver estabelecida if (cliente.available ()) {// e houver dados a receiver char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Sekiranya watak barisan baru diterima, kita mencari indeks watak ',' dalam rentetan dalam data. Kami mendapat substring sehingga tepat sebelum koma, dan kemudian kami menukarnya menjadi bilangan bulat. Kami menetapkan PWM saluran A dan B. Kami membersihkan pemboleh ubahnya.
if (c == '\ n') {// se um caracter de nova linha untuk penerimabb int virgula = dados.indexOf (','); // dapatkan 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 apos a vírgula e converta para inteiro ledcWrite (kanal_A, ciclo_A); // Ajusta o PWM do canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}
Sekiranya pelanggan memutuskan hubungan, kami mengesahkan berakhirnya sambungan. Kami menunggu sebentar dan mencetak "Tiada pelanggan yang disambungkan". Kami kemudian menunggu sesaat lagi sebelum memulakan semula.
// caso o cliente se desconecte, confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // kelewatan mensagem (1000); // aguarda um segundo antes de reiniciar}
Langkah 8: Kod Sumber Pelanggan
Penyataan
Kami telah memasukkan perpustakaan WiFi sekali lagi, kali ini kepada pelanggan. Kami juga menentukan pemboleh ubah.
#masuk const char * ssid = "ESP32ap"; // SSID lakukan ponto de acesso ESP32 const char * password = "12345678"; // Senha para acessar o ponto de acesso const uint16_t port = 2; // Porta de escuta do servidor const char * host = "192.168.4.1"; // endereço IP do servidor const int pin_Leitura_A = 36; // GPIO de leitura do ADC0 const int pin_Leitura_B = 39; // GPIO de leitura do 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 WiFiClient pelanggan; // Dekaração do objeto cliente
Persediaan ()
Kami mendefinisikan GPIO sebagai input, memulakan siri, dan menyambung ke titik akses.
batal persediaan () {pinMode (pin_Leitura_A, INPUT); // tentukan o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // tentukan o GPIO como entrada Serial.begin (115200); // inicia a comunicação siri WiFi.begin (SSID, kata laluan); // conecta ao ponto de acesso}
Gelung ()
Dalam Gelung ini, kami akan menyambung ke pelayan, yang bermaksud ESP yang lain.
gelung void () {// 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, kata laluan); kelewatan (2000); } Serial.println (String (milis ()) + "- Conectado…"); // mensagem // se não conectado ao servidor, tenta se conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + "- Conectando no Servidor" + host + ":" + port + "…"); // kelewatan mensagem (1000); }
Pada langkah ini, semasa disambungkan ke pelayan, kami melaksanakan pemboleh ubah untuk menyimpan pembacaan ADC0 dan ADC3. Kami juga membaca 500 sampel dan rata-rata bacaannya. Kami memetakan bacaan untuk membuat jangka masa yang betul untuk kawalan servos, dan menggabungkan dan menghantarnya ke pelayan.
// enquanto estiver conectado ao servidor manakala (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 manakala (contador <amostras) {// acumua várias leituras leitura_A = leitura_A + analogRead (pin_Leitura_A); leitura_B = leitura_B + analogRead (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B / amostras; ciclo_A = peta (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração coreta para controle do servo ciclo_B = peta (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração coreta para controle do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Akhirnya, jika tidak disambungkan, kami memastikan bahawa sambungan telah ditamatkan dengan memaparkan mesej yang setara.
// se não coonectado, garante que a conexão juga finalizada cliente.stop (); Serial.println (String (milis ()) + "- pelanggan pelanggan …"); // mensagem}
Langkah 9: Fail
Muat turun fail:
INO
Disyorkan:
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): Hai kawan-kawan! Dalam arahan ini, saya akan menunjukkan kepada anda bagaimana saya menggunakan modul kamera lama dan nodeMCU untuk membuat sesuatu yang serupa dengan CCTV
Bermula dengan ESP32 CAM - Streaming Video Menggunakan ESP CAM Over Wifi - Projek Kamera Keselamatan ESP32: 8 Langkah
Bermula dengan ESP32 CAM | Streaming Video Menggunakan ESP CAM Over Wifi | Projek Kamera Keselamatan ESP32: Hari ini kita akan belajar bagaimana menggunakan papan CAM ESP32 baru ini dan bagaimana kita dapat membuat kod dan menggunakannya sebagai kamera keselamatan dan mendapatkan video streaming melalui wifi
Kereta RasbperryPi Dengan Kamera FPV. Kawal dengan Penyemak Imbas Web: 31 Langkah (dengan Gambar)
Kereta RasbperryPi Dengan Kamera FPV. Kawalan dengan Penyemak Imbas Web: Kami akan membina kereta 4wd - stereng akan serupa seperti di tangki - untuk memutar satu sisi roda akan berputar dengan kelajuan yang berbeza daripada yang lain. Di kereta akan diletakkan kamera pada pemegang khas di mana kita dapat mengubah kedudukan kamera. Robot itu akan
Kamera web dalam Kamera Hawkeye Brownie: 3 Langkah (dengan Gambar)
Kamera web dalam Kamera Hawkeye Brownie: Beberapa ngengat lalu saya menemui majalah di majalah Make mengenai meletakkan kamera web di dalam kamera lipat lama, dan itu adalah sesuatu yang lebih dekat dengan apa yang saya cuba lakukan dengan titik dan gambar digicam tetapi saya tidak menemui kes yang sesuai untuknya. Saya suka
Ikuti Gambar Makro Menakjubkan Dengan Sebarang Kamera Telefon Kamera Terutama IPhone: 6 Langkah
Ikuti Gambar Makro Menakjubkan Dengan Kamera Telefon Dengan Kamera … Terutama IPhone: Pernah mahu mendapatkan salah satu gambar dekat yang menakjubkan … gambar yang mengatakan … WOW!? … dengan kamera telefon kamera tidak kurang !? Pada asasnya, ini adalah tambahan untuk kamera telefon mana-mana kamera untuk memperbesar lensa kamera yang ada agar dapat