Obsah:
- Krok 1: Použité zdroje
- Krok 2: NodeMCU ESP32S - pinout
- Krok 3: Periférne zariadenia ESP32
- Krok 4: Ovládanie servomotora PWM
- Krok 5: Analógové snímanie
- Krok 6: Okruh - server a klient
- Krok 7: Zdrojový kód prístupového bodu a servera
- Krok 8: Zdrojový kód zákazníka
- Krok 9: Súbory
Video: Kamera PANTILT s ESP32: 9 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Dnes predstavím PAN TILT, čo je zariadenie, ktoré umožňuje pohyb kamery v smeroch hore, dole a do strán. Toto zariadenie som sám vyrobil prostredníctvom 3D tlačených dielov pomocou dvoch serv a ESP32, ktoré umožňuje ovládať tento mechanizmus prostredníctvom WiFi. Potom vykonajme merania pomocou AD kanálov ESP32, ako aj analógovej operácie pomocou ovládača LED_PWM. Aplikujeme tiež kontrolu nad pripojením TCP / IP.
Na videu vidíte, že mám ESP32 čítajúci hodnoty dvoch potenciometrov, ktoré sú odoslané (cez WiFi) do iného ESP32. Je spojený s dvoma servomotormi. Fotoaparát sa pohybuje (a je pripevnený k PAN TILT) v smere nahor, nadol alebo do strán, v závislosti od ovládacieho prvku, ktorý vykonáte v hrncoch.
Odkaz na 3D tlačový návrh PAN TILT nájdete tu:
Krok 1: Použité zdroje
• Viacnásobné prepojky na pripojenie
• Dva uzlové MCU ESP32
• Dva káble USB pre ESP32
• Webová kamera na ovládanie
• Dva ovládacie hrnce
• Protoboard
• Zdroj pre serva
Krok 2: NodeMCU ESP32S - pinout
Krok 3: Periférne zariadenia ESP32
Periférne zariadenia PWM ESP32 má dve periférne zariadenia schopné generovať signály PWM. Patria sem motor modulátora šírky impulzu (MCPWM) určený na ovládanie výkonu a motora a LED_PWM vyvinutý na ovládanie intenzity LED. Ale dajú sa použiť aj genericky.
Použijeme LED_PWM, ktorý môže generovať 16 nezávislých kanálov PWM s konfigurovateľnými periódami a pracovnými cyklami. Má rozlíšenie až 16 bitov.
Krok 4: Ovládanie servomotora PWM
Ovládanie servomotora sa vykonáva nastavením modulácie šírky impulzu štvorca so špecifickou frekvenciou.
Pre použité servo (ako aj pre väčšinu) je frekvencia 50 Hz. Uhlová poloha serva tiež určuje šírku impulzu s dĺžkou 1 až 2 ms.
Kanál 0 LED_PWM nasmerujeme na GPIO13 a kanál 1 na GPIO12, pričom pomocou týchto informácií vykonáme riadenie.
Krok 5: Analógové snímanie
Periférne zariadenie na konverziu analógového signálu na digitálny
ESP32 má analógovo-digitálne prevodníky, ktoré je možné použiť až v 18 kanáloch, ale iba v analógových GPIO.
Privedené napätie nesmie prekročiť rozsah 0 až 3V.
Vykonaná konverzia neudržiava konštantnú chybu pre všetky vzorkované napätia a to všetko závisí od nakonfigurovaného rozsahu. Pre rozsah 150 mV pri 2,450 V je pre kritickejšie aplikácie potrebná kontrola správania.
Na zachytenie použijeme ako delič napätia potenciometer 10k. Zachytávanie sa bude vykonávať v kanáloch ADC0 a ADC3, prístupných pomocou GPIO36 a GPIO39.
Krok 6: Okruh - server a klient
Krok 7: Zdrojový kód prístupového bodu a servera
Vyhlásenia
Zahŕňam knižnicu WiFi a definujem niektoré premenné.
#include // inclusão da biblioteca WiFi const int freq = 50; // frekvencia do PWM const int canal_A = 0; // hlavný kanál na ovládanie LED_PWM const int canal_B = 1; // segundo kanál do ovládača 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á presmerovanie const int pin_Atuacao_B = 12; // Pino paraboly kanála 1 presmerovania konštantného char* ssid = "ESP32ap"; // konštantná SSID do WiFi do prístupového bodu ESP32 const char* heslo = "12345678"; // senha para confirmmaçã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 A WiFiServer server (port); // deklaração do objektu servidor IPAddress myIP; // deklarujte svoju IP
Nastaviť ()
Tu definujeme výstupné kolíky. Kanály nastavíme na požadovanú frekvenciu a nastavíme hodnotu PWM.
neplatné nastavenie () {pinMode (pin_Atuacao_A, VÝSTUP); // definindo o pino de atuação A como saída pinMode (pin_Atuacao_B, OUTPUT); // definindo o pino de atuação B como saída ledcSetup (canal_A, freq, resolucao); // Úroveň kanála 0 Hz s frekvenciou 50 Hz a rozlíšením 12 bitov ledcSetup (kanál_B, frekvencia, rozlíšenie); // Úroveň kanála 1 s frekvenciou 50 Hz a rozlíšením 12 bitov 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
Spustili sme sériový prístupový bod s SSID ESP32ap a heslom. Potom získame IP servera a spustíme server.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, heslo); // inicializácia prechodu na 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}
Slučka ()
V slučke prvá vec, ktorú urobíme, je inštancia klienta, pripojenie a väzba na klientsku premennú. Skontrolujte, či je klient pripojený. Ak je to tak, spustíme premennú, ktorá prijme údaje. Pokiaľ je nadviazané spojenie a ak sú prijaté dáta, čítame znaky pre premennú c. Nakoniec zreťazíme c v dátovej premennej.
void loop () {WiFiClient cliente = server.available (); // spojovací kód klienta, asocie a rôzne klienty if (cliente.connected ()) {// se há um kliente conectado String dados = ""; // inicia a variável que receberá os dados Serial.println ("Cliente conectado."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver establishmentelecida if (cliente.available ()) {// e se houver dados a receber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Ak je prijatý znak nového riadka, v reťazci v údajoch hľadáme index znaku „,“. Získame podreťazce tesne pred čiarkou a potom ich prevedieme na celé číslo. Nastavíme PWM kanálov A a B. Vymažeme premennú.
if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // obstaranie pelo índice do caracter ',' na string em dados ciclo_A = (dados.substring (0, virgula)). toInt (); // obntha 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 (canal_A, ciclo_A); // Ajusta o PWM do canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do kanála B dados = ""; // Limpa a variável}}}}
Ak sa klient odpojí, potvrdíme koniec pripojenia. Chvíľu počkáme a vytlačíme „Nie je pripojený žiadny klient“. Potom počkáme ďalšiu sekundu, kým sa reštartuje.
// caso o cliente se desconecte, confirmma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println („Nenhum cliente conectado.“); // oneskorenie mensagemu (1000); // aguarda um segundo antes de reiniciar}
Krok 8: Zdrojový kód zákazníka
Vyhlásenia
Knižnicu WiFi sme opäť zaradili, tentokrát na klienta. Tiež definujeme premenné.
#include const char* ssid = "ESP32ap"; // SSID do prístupového bodu ESP32 const char* heslo = "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"; // endereco IP to servidor const int pin_Leitura_A = 36; // GPIO 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 cliente; // deklarujte svoje klienty
Nastaviť ()
GPIO definujeme ako vstup, spustíme sériový port a pripojíme sa k prístupovému bodu.
neplatné nastavenie () {pinMode (pin_Leitura_A, INPUT); // definujte o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // definujte o GPIO como entrada Serial.begin (115200); // inicia a komunikacny serial WiFi.begin (ssid, heslo); // conecta ao ponto de acesso}
Slučka ()
V tejto slučke sa pripojíme k serveru, čo znamená druhý ESP.
void loop () {// sa pripojí a pripojí sa, pripojí sa súčasne (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + „…“); // mensagem WiFi.begin (ssid, heslo); oneskorenie (2000); } Serial.println (String (millis ()) + " - Conectado …"); // mensagem // sa pripojí k servidoru, pripojí sa súčasne (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":" + port + "…"); // oneskorenie mensagemu (1000); }
V tomto kroku, keď sme pripojení k serveru, spustíme premenné na uloženie čítania ADC0 a ADC3. Tiež sme vykonali čítanie 500 vzoriek a spriemerovali sme ich. Namapovali sme čítanie, aby sme vytvorili správne trvanie riadenia serv a zreťazili a odoslali na server.
// pripojenie zdroja k serveru a súčasne (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 = leitura_B + analogRead (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = mapa (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para control to servo ciclo_B = map (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para control to servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Nakoniec, ak nie je pripojené, zaistíme, aby bolo pripojenie ukončené zobrazením ekvivalentnej správy.
// aby ste sa spojili, zaručili ste si konečnú finalizáciu klienta.stop (); Serial.println (String (millis ()) + " - klientske riešenie …"); // mensagem}
Krok 9: Súbory
Stiahnite si súbory:
INO
Odporúča:
Časozberná kamera používajúca dosku ESP32-CAM: 6 krokov
Časozberná kamera využívajúca dosku ESP32-CAM: Tento projekt nadväzuje na predchádzajúci projekt digitálnej kamerovej kamery a pomocou dosky ESP32-CAM staviame časozbernú kameru. Všetky obrázky sa postupne ukladajú na kartu microSD a doska po nasnímaní obrázka uspí, aby pomohla uložiť
IP kamera s detekciou tváre pomocou dosky ESP32-CAM: 5 krokov
IP kamera s detekciou tváre pomocou dosky ESP32-CAM: Tento príspevok sa líši od ostatných a pozrime sa na veľmi zaujímavú dosku ESP32-CAM, ktorá je prekvapivo lacná (menej ako 9 dolárov) a ľahko sa používa. Vytvárame jednoduchú IP kameru, ktorú je možné použiť na streamovanie živého videa pomocou 2
Digitálna statická kamera používajúca dosku ESP32-CAM: 5 krokov
Digitálna kamera pomocou dosky ESP32-CAM: V tomto príspevku sa naučíme, ako vytvoriť digitálnu kameru pomocou dosky ESP32-CAM. Keď stlačíte tlačidlo reset, doska nasníma obrázok, uloží ho na kartu microSD a potom sa vráti do hlbokého spánku. Používame EEPROM
Systém puzdra ESP32-CAM a kamera 3D tlačiarne: 10 krokov (s obrázkami)
Systém puzdra ESP32-CAM a kamera 3D tlačiarne: Uvažoval som o výmene fotoaparátu na mojej 3-D tlačiarni za niečo malé, jednoduché a funkčné …. a lacné. K modulu ESP32-Cam ma priviedlo niekoľko vyhľadávaní Google. Nájdete ich za menej ako 10 dolárov, rovnako ako menej, a fungujú naozaj dobre
Najľahšia webová kamera ako bezpečnostná kamera - detekcia pohybu a obrázky odoslané e -mailom: 4 kroky
Najľahšia webová kamera ako bezpečnostná kamera - Detekcia pohybu a obrázky zaslané e -mailom: Na to, aby ste mohli dostávať obrázky rozpoznané pohybom z webovej kamery do e -mailu, si už nemusíte sťahovať ani konfigurovať softvér - jednoducho použite prehliadač. Na zachytenie obrázku použite aktuálny prehliadač Firefox, Chrome, Edge alebo Opera v systéme Windows, Mac alebo Android