Sadržaj:
- Korak 1: Korišteni resursi
- Korak 2: NodeMCU ESP32S - Pinout
- Korak 3: ESP32 periferne jedinice
- Korak 4: PWM za kontrolu servo motora
- Korak 5: Analogno snimanje
- Korak 6: Krug - poslužitelj i klijent
- Korak 7: Izvorni kod pristupne tačke i servera
- Korak 8: Izvorni kod korisnika
- Korak 9: Datoteke
Video: PANTILT kamera sa ESP32: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Danas ću vam predstaviti PAN TILT, uređaj koji omogućava kretanje kamere za smjerove gore, dolje i sa strane. Ja sam sam proizvodio ovaj uređaj putem 3D štampanih dijelova, koristeći dva serva i ESP32, što omogućava upravljanje ovim mehanizmom putem WiFi -ja. 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. Povezan je sa dva servo motora. Kamera se pomiče (i pričvršćena je za PAN TILT) u smjeru gore, dolje ili bočno, ovisno o kontroli koju vršite kroz lonce.
Link do dizajna 3D štampe PAN TILT možete pronaći ovdje:
Korak 1: Korišteni resursi
• Više kratkospojnika za povezivanje
• Dva čvorna MCU ESP32
• Dva USB kabla za ESP32
• Web kamera za kontrolu
• Dva kontrolna lonca
• Protoboard
• Izvor za servo pogone
Korak 2: NodeMCU ESP32S - Pinout
Korak 3: ESP32 periferne jedinice
PWM periferije ESP32 ima dvije periferije koje mogu generirati PWM signale. Ovo uključuje motor sa modulatorom širine impulsa (MCPWM) dizajniran za kontrolu snage i motora, i LED_PWM, razvijen za kontrolu intenziteta LED dioda. Ali mogu se koristiti i na generički način.
Koristićemo LED_PWM, koji može generisati 16 nezavisnih PWM kanala sa podesivim periodima i radnim ciklusima. Ima do 16 bita rezolucije.
Korak 4: PWM za kontrolu servo motora
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 50Hz. Takođe, širina impulsa od 1 do 2 ms određuje kutni položaj servo pogona.
Preusmjerit ćemo kanal 0 LED_PWM 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 na najviše 18 kanala, ali samo u analognim GPIO-ovima.
Primijenjeni napon ne smije prelaziti raspon 0 do 3V.
Izvršena konverzija ne održava konstantnu grešku za sve napone uzorkovane, a sve ovisi o konfiguriranom rasponu. Za raspon od 150mV na 2, 450V, provjera ponašanja je potrebna za kritičnije aplikacije.
Za hvatanje ćemo koristiti potenciometar od 10k kao razdjelnik napona. Snimanje će se vršiti u kanalima ADC0 i ADC3, kojima su dostupni GPIO36 i GPIO39.
Korak 6: Krug - poslužitelj i klijent
Korak 7: Izvorni kod pristupne tačke i servera
Izjave
Uključujem WiFi biblioteku i definiram neke varijable.
#include // uključuje biblioteku WiFi const int freq = 50; // frekvencija do PWM const int channel_A = 0; // glavni kanal do kontrolera LED_PWM const int kanal_B = 1; // segundo kanal za kontrolu LED_PWM const int resolucao = 12; // Resolução usado bez kontrole LED_PWM const int pin_Atuacao_A = 13; // Pino para onde na kanalu 0 será redirecionado const int pin_Atuacao_B = 12; // Pino para na kanalu 1 redirecionado const char* ssid = "ESP32ap"; // konstantno povezivanje sa SSID -om na WiFi putem pristupa ESP32 const char* password = "12345678"; // senha para confirmmação de conexão no ponto de acesso const int port = 2; // porta na kvalitetu ili primanje servidora kao conexões int ciclo_A = 0; // variável que Receberá o ciclo de atuação do kanala A int ciclo_B = 0; // Variable que Receberá o ciclo de atuação to channel A WiFiServer server (port); // deklarira da objekat poslužitelja IPAddress myIP; // deklaracija o promjeni IP -a
Postaviti ()
Ovdje definiramo izlazne pinove. Postavili smo kanale na željenu frekvenciju i postavili PWM vrijednost.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // definiranje pino de atuação A como saída pinMode (pin_Atuacao_B, OUTPUT); // definiranje pino de atuação B como saída ledcSetup (canal_A, freq, resolucao); // Podesite kanal 0 za frekvencije od 50 Hz i rezoluciju od 12 bita ledcSetup (kanal_B, frekvencija, rezolucija); // Podesite kanal 1 za frekvencije od 50 Hz i rezoluciju od 12 bita ledcAttachPin (pin_Atuacao_A, kanal_A); // redirecionando o kanalu 0 para pino 13 ledcAttachPin (pin_Atuacao_B, channel_B); // redirecionando o kanalu 1 para pino 12 ledcWrite (kanal_A, ciclo_A); // definiranje hrabrosti do PWM para 0 ledcWrite (canal_B, ciclo_B); // definiranje hrabrosti do PWM -a, para 0
Započeli smo serijsku, pristupnu točku sa SSID -om ESP32ap i lozinkom. Zatim dobijamo IP servera i pokrećemo server.
Serial.begin (115200); // iniciando serijski Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, lozinka); // početni pristup ili pristup za SSID ESP32ap i senzor 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // dobivanje IP servera (kao što nije konfigurirano za podešavanje servera ili opreme) 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. Proverite da li je 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 varijabli podataka.
void loop () {WiFiClient klijent = server.available (); // se povezuje klijent, pridružuje se različitim klijentima if (cliente.connected ()) {// se povezuje klijent konektado String dados = ""; // inicia a variável que Receberá os Dados Serial.println ("Cliente conectado."); // spominju // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Ako se primi znak novog reda, tražimo indeks znaka ',' u nizu u podacima. Podniz dobijamo neposredno ispred zareza, a zatim ih pretvaramo u cijeli broj. Postavljamo PWM kanala A i B. Brišemo varijablu.
if (c == '\ n') {// prikazuje um novog karaktera za ponovni prijem int virgula = dados.indexOf (','); // nabavljamo pelo índice do caracter ',' na string em dados ciclo_A = (dados.substring (0, virgula)). toInt (); // obrtajte podniz u até antes da vírgula i pretvorite para inteiro ciclo_B = dados.substring (virgula + 1, dados.length ()). toInt (); // obtenha podniz u pretvaraču i pretvorite u 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, potvrda o fim da conexão kašnjenje (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem delay (1000); // aguarda um segundo antes de reiniciar}
Korak 8: Izvorni kod korisnika
Izjave
Ponovo smo uključili WiFi biblioteku, ovaj put na klijentu. Također, definiramo varijable.
#include const char* ssid = "ESP32ap"; // SSID za pristup ESP32 const char* password = "12345678"; // Senha para accesscessor 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 deitutacija do ADC0 const int pin_Leitura_B = 39; // GPIO oznaka za ADC3 int ciclo_A = 0; // varijable que receberá o hrabrosti do ciklo do PWM A int ciclo_B = 0; // Variável que receberá o hrabrosti do ciklo do PWM B WiFiClient klijenta; // deklaração do objeto cliente
Postaviti ()
Definiramo GPIO -ove kao ulaz, pokrećemo serijsku vezu i povezujemo se s pristupnom točkom.
void setup () {pinMode (pin_Leitura_A, INPUT); // definiramo GPIO kao unos pinMode (pin_Leitura_B, INPUT); // definirati 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 serverom, što znači drugi ESP.
void loop () {// nije potrebno spojiti ao ponto de acesso, tenta se spojiti while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando bez WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, lozinka); kašnjenje (2000); } Serial.println (String (millis ()) + " - Conectado …"); // mensagem // ne morate spojiti ao servidor, tenta se spojiti dok (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando bez Servidora" + host + ":" + port + "…"); // mensagem delay (1000); }
U ovom koraku, dok smo povezani s poslužiteljem, izvršavamo varijable za spremanje očitanja ADC0 i ADC3. Takođe smo izvršili očitavanje 500 uzoraka i usrednili očitavanja. Mapirali smo očitanje kako bismo stvorili ispravno trajanje za kontrolu servo -a, te ga spojili i poslali na poslužitelj.
// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // varijable para armazenar i ADC0 int leitura_B = 0; // varijable para armazenar i ADC3 int amostras = 500; // nummero 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 to servo ciclo_B = map (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controle to servo // concatena e envia para 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, garantira que a conexão foi finalizaada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Korak 9: Datoteke
Preuzmite datoteke:
JA NE
Preporučuje se:
Time Lapse kamera pomoću ploče ESP32-CAM: 6 koraka
Time Lapse Camera koristeći ESP32-CAM ploču: Ovaj projekat se nadovezuje na prethodni projekat fotoaparata sa digitalnom slikom, a mi pravimo vremensku kameru koristeći ESP32-CAM ploču. Sve se slike uzastopno spremaju na microSD karticu, a ploča nakon snimanja odlazi 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 upotrebu. Izrađujemo jednostavnu IP kameru koja se može koristiti za prijenos video zapisa uživo pomoću 2
Digitalna kamera sa statičnom slikom koja koristi ploču ESP32-CAM: 5 koraka
Digitalna kamera sa statičnom slikom pomoću ploče ESP32-CAM: U ovom ćemo članku naučiti kako izgraditi digitalnu kameru sa fotografijom pomoću ploče ESP32-CAM. Kada pritisnete tipku za poništavanje, ploča će snimiti sliku, pohraniti je na microSD karticu, a zatim će se vratiti u stanje dubokog sna. Koristimo EEPROM t
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 sa svoje web kamere prenijeli na svoju e -poštu - jednostavno upotrijebite svoj preglednik. Upotrijebite ažurirani preglednik Firefox, Chrome, Edge ili Opera u sustavu Windows, Mac ili Android za snimanje slike
Prvi koraci sa ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Prvi koraci sa 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