Kazalo:
- 1. korak: Uporabljeni viri
- 2. korak: NodeMCU ESP32S - Pinout
- Korak: ESP32 zunanje naprave
- Korak: Krmiljenje PWM servo motorja
- 5. korak: Analogni zajem
- 6. korak: Krog - strežnik in odjemalec
- 7. korak: izvorna koda dostopne točke in strežnika
- 8. korak: Izvorna koda stranke
- 9. korak: Datoteke
Video: Kamera PANTILT z ESP32: 9 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Danes bom predstavil PAN TILT, ki je naprava, ki omogoča premikanje kamere za smeri navzgor, navzdol in v stranice. Sam sem to napravo izdelal prek 3D tiskanih delov, z uporabo dveh servomotorjev in ESP32, kar omogoča nadzor tega mehanizma prek WiFi. Nato vzemimo odčitke z uporabo AD kanalov ESP32, pa tudi analogno delovanje s krmilnikom LED_PWM. Uporabljamo tudi nadzor nad povezavo TCP / IP.
V videoposnetku lahko vidite, da imam ESP32, ki bere vrednosti dveh potenciometrov, ki sta poslana (prek WiFi) drugemu ESP32. Povezan je z dvema servo motorjema. Kamera se premika (in je pritrjena na PAN TILT) v smeri navzgor, navzdol ali vstran, odvisno od nadzora, ki ga izvajate skozi lončke.
Povezavo do oblikovanja 3D tiska PAN TILT najdete tukaj:
1. korak: Uporabljeni viri
• Več mostičkov za povezavo
• Dva vozlišča MCU ESP32
• Dva kabla USB za ESP32
• Spletna kamera za nadzor
• Dva kontrolna lonca
• Protoboard
• Vir za servomotorje
2. korak: NodeMCU ESP32S - Pinout
Korak: ESP32 zunanje naprave
PWM periferne enote ESP32 ima dve zunanji napravi, ki lahko ustvarjata signale PWM. Med njimi sta motor Pulse Width Modulator (MCPWM), zasnovan za krmiljenje moči in motorja, ter LED_PWM, razvit za nadzor intenzivnosti LED. Lahko pa jih uporabimo tudi generično.
Uporabili bomo LED_PWM, ki lahko ustvari 16 neodvisnih kanalov PWM z nastavljivimi obdobji in delovnimi cikli. Ima do 16 bitov ločljivosti.
Korak: Krmiljenje PWM servo motorja
Krmiljenje servo motorja se izvede s prilagajanjem modulacije širine impulza kvadrata s posebno frekvenco.
Za uporabljeni servo (kot tudi za večino) je frekvenca 50Hz. Tudi širina impulza od 1 do 2 ms določa kotni položaj servomotorja.
Kanal 0 LED_PWM bomo preusmerili v GPIO13 in kanal 1 v GPIO12, pri čemer bomo te podatke uporabili za izvajanje nadzora.
5. korak: Analogni zajem
Periferna enota za analogno -digitalno pretvorbo
ESP32 ima analogno-digitalne pretvornike, ki jih je mogoče uporabiti v do 18 kanalih, vendar le v analognih GPIO-jih.
Uporabljena napetost ne sme presegati območja od 0 do 3 V.
Izvedena pretvorba ne vzdržuje konstantne napake za vse vzorčene napetosti, vse pa je odvisno od konfiguriranega območja. Za območje 150mV pri 2, 450V je za bolj kritične aplikacije potreben preverjanje obnašanja.
Za zajem bomo kot delilnik napetosti uporabili potenciometer 10k. Zajem bo izveden v kanalih ADC0 in ADC3, do katerih lahko dostopata GPIO36 in GPIO39.
6. korak: Krog - strežnik in odjemalec
7. korak: izvorna koda dostopne točke in strežnika
Izjave
Vključujem knjižnico WiFi in definiram nekatere spremenljivke.
#include // vključuje biblioteco WiFi const int freq = 50; // frekvenca do PWM const int channel_A = 0; // primeiro channel do controlador LED_PWM const int canal_B = 1; // segundo channel 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 kanalu 0 será redirecionado const int pin_Atuacao_B = 12; // Pino para onde o channel 1 será redirecionado const char* ssid = "ESP32ap"; // konstantno povezovanje SSID -a z WiFi -jem prek povezave ESP32 const char* password = "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 kanala A int ciclo_B = 0; // spremenljivka za preverjanje o kanalu Strežnik WiFiServer (vrata); // razglasi objektu strežnika IP naslov MyIP; // razglasi spremenljivko IP
Nastaviti ()
Tu definiramo izhodne zatiče. Kanale nastavimo na želeno frekvenco in nastavimo vrednost PWM.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // 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); // Nastavitev kanala 0 za frekvenco 50 Hz in resolucijo 12bit ledcSetup (kanal_B, frekvenca, resolucija); // Ajustando o kanalu 1 za frekvenco 50 Hz in resolucijo 12bit ledcAttachPin (pin_Atuacao_A, channel_A); // preusmeritev kanala 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, kanal_B); // redirecionando o kanalu 1 para o pino 12 ledcWrite (kanal_A, ciclo_A); // opredelitev valor do PWM para 0 ledcWrite (channel_B, ciclo_B); // Določitev o hrabrosti do PWM, odstavek 0
Začeli smo serijsko, dostopno točko s SSID ESP32ap in geslom. Nato dobimo IP strežnika in zaženemo strežnik.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + niz (ssid)); // mensagem WiFi.softAP (ssid, geslo); // iniciando o ponto de acesso com SSID ESP32ap e senha 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // obiskujte IP do strežnika (kot ni mogoče konfigurirati deverá ser o padrão de fábrica) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + niz (vrata)); // mensagem server.begin (); // iniciando o servidor}
Zanka ()
V Loopu bomo najprej naredili primerek odjemalca, ga povezali in povezali s spremenljivko odjemalca. Preverite, ali je odjemalec povezan. Če je tako, zaženemo spremenljivko, ki bo prejela podatke. Dokler je povezava vzpostavljena in če so podatki prejeti, beremo znake za spremenljivko c. Nazadnje povežemo c v podatkovni spremenljivki.
void loop () {odjemalci WiFiClient = 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 se še vedno nahajata kot receber char c = cliente.read (); // leia os caracteres para a variaável c dados = dados + c; // concatene c na variaável dados
Če je prejet znak nove vrstice, poiščemo indeks znaka ',' v nizu v podatkih. Podniz dobimo tik pred vejico, nato pa jih pretvorimo v celo število. Nastavimo PWM kanalov A in B. Počistimo spremenljivko.
if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // nabavi pelo índice do caracter ',' na niz 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 podtring após a vírgula e converta para inteiro ledcWrite (channel_A, ciclo_A); // Ajusta o PWM do kanala A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do kanala B dados = ""; // Limpa a variável}}}}
Če odjemalec prekine povezavo, potrdimo konec povezave. Počakamo trenutek in natisnemo »No client connected«. Nato pred ponovnim zagonom počakamo še sekundo.
// caso o cliente se desconecte, confirmma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // zakasnitev mensagema (1000); // aguarda um segundo antes de reiniciar}
8. korak: Izvorna koda stranke
Izjave
Knjižnico WiFi smo ponovno vključili, tokrat na odjemalca. Določimo tudi spremenljivke.
#include const char* ssid = "ESP32ap"; // SSID za dostop do 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 client; // deklaração do objeto cliente
Nastaviti ()
GPIO -je opredelimo kot vhodne, zaženemo serijo in se povežemo z dostopno točko.
void setup () {pinMode (pin_Leitura_A, INPUT); // opredelimo GPIO kot como entrada pinMode (pin_Leitura_B, INPUT); // opredelimo o GPIO kot vnos Serial.begin (115200); // inicia a comunicação serijski WiFi.begin (ssid, geslo); // conecta ao ponto de acesso}
Zanka ()
V tej zanki se bomo povezali s strežnikom, kar pomeni drugi ESP.
void loop () {// ni povezano z ao ponto de acesso, tenta se povezuje medtem ko (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando brez WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, geslo); zamuda (2000); } Serial.println (String (millis ()) + " - Conectado …"); // mensagem // se não conectado ao servidor, tenta se conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":" + vrata + "…"); // zakasnitev mensagema (1000); }
V tem koraku, ko smo povezani s strežnikom, izvedemo spremenljivke za shranjevanje odčitkov ADC0 in ADC3. Opravili smo tudi branje 500 vzorcev in povprečje odčitkov. Branje smo preslikali, da bi ustvarili pravilno trajanje za upravljanje servomotorjev, ga združili in poslali na strežnik.
// enquanto estiver conectado ao servidor 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 = leitura_B + analogno branje (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = zemljevid (leitura_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 servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Nazadnje, če nismo povezani, zagotovimo, da je bila povezava prekinjena, tako da prikažemo enakovredno sporočilo.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
9. korak: Datoteke
Prenesite datoteke:
JAZ NE
Priporočena:
Kamera z zaznavanjem gibanja Raspberry Pi v ohišju Floodlight: 3 koraki
Kamera za zaznavanje gibanja Raspberry Pi v ohišju Floodlight: Že nekaj časa se ukvarjam z Raspberry Pi -ji, ki jih uporabljam za različne stvari, predvsem pa kot kamero za video nadzor za spremljanje mojega doma, medtem ko sem oddaljen od gledanja pretoka v živo, prejemajte tudi e -poštna sporočila s slikovnimi posnetki
Dokumentna kamera za prenosne računalnike v vrednosti 5 USD za videokonference: 4 koraki (s slikami)
Dokumentna kamera za prenosne računalnike v vrednosti 5 USD za videokonference: 20200811 objavil John E. Nelson [email protected] Nedavno sem objavil navodilo, ki dokazuje uporabo modula kamere prenosnega računalnika za izdelavo namizne kamere za dokumente za videokonference. www.instructables.com/id/A-Sub-10-MetaPrax-Documen
Arduino kamera Bluetooth: 4 koraki (s slikami)
Arduino kamera Bluetooth: Pozdravljeni! Danes komaj koga presenetite z mobilnim telefonom s kamero, brezžičnimi pripomočki in drugimi tehničnimi dosežki. Zahvaljujoč platformi Arduino je na milijone ljudi odkrilo čudovit svet elektronike in programiranja. 100,5
Najlažja spletna kamera kot varnostna kamera - zaznavanje gibanja in slike po e -pošti: 4 koraki
Najlažja spletna kamera kot varnostna kamera - zaznavanje gibanja in slike po e -pošti: ni vam treba več nalagati ali konfigurirati programske opreme, da bi slike, zaznane z gibanjem iz spletne kamere, prešle na vaš e -poštni naslov - preprosto uporabite brskalnik. Za zajem slike uporabite posodobljen brskalnik Firefox, Chrome, Edge ali Opera v operacijskih sistemih Windows, Mac ali Android
Kako začeti z ESP32 - Namestitev plošč ESP32 v Arduino IDE - Koda utripanja ESP32: 3 koraki
Kako začeti z ESP32 | Namestitev plošč ESP32 v Arduino IDE | ESP32 Blink Code: V tem navodilu bomo videli, kako začeti delati z esp32 in kako namestiti esp32 plošče v Arduino IDE, in programirali bomo esp 32 za zagon kode utripanja z arduino ide