Sadržaj:
- Korak 1: Korišteni resursi
- Korak 2: NodeMCU ESP32S - ispis
- Korak 3: ESP32 periferne jedinice
- Korak 4: PWM za upravljanje servo motorom
- Korak 5: Analogno snimanje
- Korak 6: Krug - poslužitelj i klijent
- Korak 7: Izvorni kod pristupne točke i poslužitelja
- Korak 8: Izvorni kod korisnika
- Korak 9: Datoteke
Video: PANTILT kamera s ESP32: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Danas ću vam predstaviti PAN TILT, uređaj koji omogućuje kretanje kamere za smjerove gore, dolje i u stranu. I sam sam proizvodio ovaj uređaj putem 3D ispisanih dijelova, koristeći dva serva i ESP32, što omogućuje upravljanje ovim mehanizmom putem WiFi -a. Uzmimo tada očitanja pomoću AD kanala ESP32, kao i analognu operaciju pomoću kontrolera LED_PWM. Također, primjenjujemo kontrolu nad TCP / IP vezom.
U videu možete vidjeti da imam ESP32 koji čita vrijednosti dva potenciometra, koji se šalju (putem WiFi -a) na drugi ESP32. Spojen je na dva servo motora. Fotoaparat se pomiče (i pričvršćen je za PAN TILT) u smjeru gore, dolje ili bočno, ovisno o kontroli koju vršite kroz lonce.
Link do dizajna 3D ispisa PAN TILT možete pronaći ovdje:
Korak 1: Korišteni resursi
• Više kratkospojnika za povezivanje
• Dva NSP MCU ESP32
• Dva USB kabela za ESP32
• Web kameru za kontrolu
• Dva kontrolna lonca
• Protoboard
• Izvor za servo pogone
Korak 2: NodeMCU ESP32S - ispis
Korak 3: ESP32 periferne jedinice
PWM periferije ESP32 ima dvije periferije koje mogu generirati PWM signale. To uključuje motor s modulatorom širine impulsa (MCPWM) dizajniran za kontrolu snage i motora, te LED_PWM, razvijen za kontrolu intenziteta LED dioda. Ali mogu se koristiti i na generički način.
Koristit ćemo LED_PWM, koji može generirati 16 neovisnih PWM kanala s podesivim razdobljima i radnim ciklusima. Ima do 16 bita rezolucije.
Korak 4: PWM za upravljanje servo motorom
Upravljanje servo motorom vrši se podešavanjem širine impulsa modulacije kvadrata sa specifičnom frekvencijom.
Za korišteni servo (kao i za većinu) frekvencija je na 50Hz. Također, širina impulsa od 1 do 2 ms određuje kutni položaj serva.
Kanal 0 LED_PWM -a usmjerit ćemo na GPIO13, a kanal 1 na GPIO12, koristeći ove informacije za obavljanje kontrole.
Korak 5: Analogno snimanje
Periferija analogno -digitalne konverzije
ESP32 ima analogno-digitalne pretvarače koji se mogu primijeniti u do 18 kanala, ali samo u analognim GPIO-ovima.
Primijenjeni napon ne smije prelaziti raspon 0 do 3V.
Provedena pretvorba ne održava konstantnu pogrešku za sve uzorkovane napone, a sve ovisi o konfiguriranom rasponu. Za raspon od 150mV na 2, 450V, provjera ponašanja je potrebna za kritičnije primjene.
Za hvatanje ćemo koristiti potenciometar od 10k kao razdjelnik napona. Snimanje će se izvršiti u kanalima ADC0 i ADC3, kojima su dostupni GPIO36 i GPIO39.
Korak 6: Krug - poslužitelj i klijent
Korak 7: Izvorni kod pristupne točke i poslužitelja
Izjave
Uključujem WiFi knjižnicu i definiram neke varijable.
#include // uključuje biblioteku WiFi const int freq = 50; // frekvencija do PWM const int kanal_A = 0; // primeiro channel do controlador LED_PWM const int canal_B = 1; // segundo kanal do controlador LED_PWM const int resolucao = 12; // Resolução usado bez kontrole 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 channel 1 será redirecionado const char* ssid = "ESP32ap"; // konstantno povezivanje SSID -a s Wi -Fi mrežom na ESP32 const char* password = "12345678"; // senha para confirmationmaçã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; // varijaável que receberá o ciclo de atuação do kanala A int ciclo_B = 0; // variável que Receberá o ciclo de atuação do canal A WiFiServer poslužitelj (port); // deklarira da objekat poslužitelja IPAddress myIP; // deklariranje da variável de IP
Postaviti ()
Ovdje definiramo izlazne pinove. Postavili smo kanale na željenu frekvenciju i postavili vrijednost 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); // Ajustando o kanalu 0 za frekvencije od 50 Hz i razlučivost od 12 bita ledcSetup (kanal_B, frekvencija, razlučivost); // Ajustando o kanalu 1 za frekvencije od 50 Hz i razlučivost od 12 bita ledcAttachPin (pin_Atuacao_A, kanal_A); // redirecionando o channel 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // redirecionando o kanalu 1 para o pino 12 ledcWrite (kanal_A, ciclo_A); // definiranje o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM paragraf 0
Započeli smo serijsku, pristupnu točku sa SSID -om ESP32ap i lozinkom. Zatim dobivamo IP poslužitelja i pokrećemo poslužitelj.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, lozinka); // 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}
Petlja ()
U Loopu, prvo što ćemo učiniti je instancirati klijenta, povezati ga i povezati s klijentskom varijablom. Provjerite je li klijent povezan. Ako je tako, pokrećemo varijablu koja će primati podatke. Sve dok je veza uspostavljena i ako se primaju podaci, čitamo znakove za varijablu c. Konačno, povezujemo c u varijablu podataka.
void loop () {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 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
Ako se primi znak novog retka, tražimo indeks znaka ',' u nizu u podacima. Podniz dobijamo točno ispred zareza, a zatim ih pretvaramo u cijeli broj. Postavljamo PWM kanala A i B. Brišemo varijablu.
if (c == '\ n') {// se um karaktera de nova linha za recebido int virgula = dados.indexOf (','); // nabavljamo 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 niz 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}}}}
Ako se klijent prekine, potvrđujemo kraj veze. Čekamo trenutak i ispisujemo "No client connected". Zatim čekamo još jednu sekundu prije ponovnog pokretanja.
// caso o cliente se desconecte, confirmma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // kašnjenje mensagema (1000); // aguarda um segundo antes de reiniciar}
Korak 8: Izvorni kod korisnika
Izjave
Ponovno smo uključili WiFi biblioteku, ovaj put na klijentu. Također, definiramo varijable.
#include const char* ssid = "ESP32ap"; // SSID za pristup ESP32 const char* lozinka = "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 cliente; // deklaração do objeto cliente
Postaviti ()
Definiramo GPIO -ove kao ulaz, započinjemo serijsku vezu i povezujemo se s pristupnom točkom.
void setup () {pinMode (pin_Leitura_A, INPUT); // definiramo GPIO kao entrada pinMode (pin_Leitura_B, INPUT); // definirati o GPIO kao entrada Serial.begin (115200); // inicia a comunicação serijski WiFi.begin (ssid, lozinka); // conecta ao ponto de acesso}
Petlja ()
U ovoj petlji ćemo se povezati sa poslužiteljem, što znači drugi ESP.
void loop () {// se não conectado ao ponto de acesso, tenta se conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando nema WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, lozinka); odgoda (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 + ":" + port + "…"); // kašnjenje mensagema (1000); }
U ovom koraku, dok smo povezani s poslužiteljem, izvršavamo varijable za spremanje očitanja ADC0 i ADC3. Također smo izvršili čitanje 500 uzoraka i prosječno očitali. Mapirali smo očitanje kako bismo stvorili ispravno trajanje za kontrolu servomotora, te ga spojili i poslali na poslužitelj.
// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // variável para armazenar a leitura do ADC0 int leitura_B = 0; // varijable 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 čitanje (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = karta (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)); }
Konačno, ako nismo povezani, osiguravamo da je veza prekinuta prikazivanjem ekvivalentne poruke.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Korak 9: Datoteke
Preuzmite datoteke:
INO
Preporučeni:
Time Lapse kamera pomoću ploče ESP32-CAM: 6 koraka
Time Lapse Camera pomoću ESP32-CAM ploče: Ovaj se projekt nadovezuje na prethodni projekt digitalnih fotoaparata za slike, a mi pravimo kameru s vremenskim odmakom koristeći ESP32-CAM ploču. Sve se slike uzastopno spremaju na microSD karticu, a ploča nakon snimanja ide u stanje mirovanja radi lakšeg spremanja
IP kamera s detekcijom lica pomoću ploče ESP32-CAM: 5 koraka
IP kamera s detekcijom lica pomoću ESP32-CAM ploče: Ovaj se post razlikuje od ostalih, a mi ćemo pogledati vrlo zanimljivu ESP32-CAM ploču koja je iznenađujuće jeftina (manje od 9 USD) i jednostavna za korištenje. Izrađujemo jednostavnu IP kameru koja se može koristiti za strujanje video feedova uživo pomoću 2
Najjednostavnija web kamera kao sigurnosna kamera - otkrivanje pokreta i slike poslane e -poštom: 4 koraka
Najjednostavnija web kamera kao sigurnosna kamera - otkrivanje pokreta i slike poslane e -poštom: više ne morate preuzimati ili konfigurirati softver da biste slike s web -kamere s e -pošte primili na svoju e -poštu - jednostavno upotrijebite preglednik. Za snimanje slike upotrijebite ažurirani preglednik Firefox, Chrome, Edge ili Opera u sustavu Windows, Mac ili Android
Početak rada s ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Početak rada s ESP32 | Instaliranje ESP32 ploča u Arduino IDE | ESP32 Blink Code: U ovom uputstvu vidjet ćemo kako započeti rad s esp32 i kako instalirati esp32 ploče u Arduino IDE i programirat ćemo esp 32 da pokrene blink kod pomoću arduino ide
UNICORN KAMERA - Raspberry Pi Zero W NoIR 8MP Kamera Izrada: 7 koraka (sa slikama)
UNICORN CAMERA - Raspberry Pi Zero W NoIR 8MP Kamera Izrada: Pi Zero W NoIR 8MP Kamera Izrada ove instrukcije stvorena je kako bi pomogla svima koji žele infracrvenu kameru ili stvarno cool prijenosnu kameru ili prijenosnu kameru od maline Pi ili se samo žele zabaviti, heheh . Ovo je najpristupačnija i konfiguracija