Indholdsfortegnelse:
- Trin 1: Brugte ressourcer
- Trin 2: NodeMCU ESP32S - Pinout
- Trin 3: ESP32 Periferiudstyr
- Trin 4: Servomotorstyring PWM
- Trin 5: Analog optagelse
- Trin 6: Kredsløb - Server og klient
- Trin 7: Kildekode til adgangspunktet og serveren
- Trin 8: Kundens kildekode
- Trin 9: Filer
Video: PANTILT -kamera med ESP32: 9 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
I dag vil jeg præsentere PAN TILT, som er en enhed, der muliggør bevægelse af et kamera i retning af op, ned og til siderne. Jeg producerede selv denne enhed gennem 3D -printede dele ved hjælp af to servoer og ESP32, hvilket gør det muligt at styre denne mekanisme via WiFi. Lad os derefter foretage aflæsninger ved hjælp af AD -kanalerne i ESP32, samt en analog operation ved hjælp af controller LED_PWM. Vi anvender også kontrollen over en TCP / IP -forbindelse.
I videoen kan du se, at jeg har en ESP32, der læser værdierne for de to potentiometre, som sendes (via WiFi) til en anden ESP32. Den er forbundet til de to servomotorer. Kameraet bevæger sig (og er fastgjort til PAN TILT) i retning op, ned eller sidelæns, afhængigt af den kontrol, du foretager gennem gryderne.
Linket til PAN TILT 3D -printdesign kan findes her:
Trin 1: Brugte ressourcer
• Flere jumpere til tilslutning
• To Node MCU ESP32'er
• To USB -kabler til ESP32
• Et webcam til kontrol
• To kontrolpotter
• Et protoboard
• En kilde til servoerne
Trin 2: NodeMCU ESP32S - Pinout
Trin 3: ESP32 Periferiudstyr
PWM -periferiudstyr ESP32 har to eksterne enheder, der er i stand til at generere PWM -signaler. Disse inkluderer motoren Pulse Width Modulator (MCPWM) designet til effekt- og motorstyring og LED_PWM, der er udviklet til LED -intensitetskontrol. Men de kan også bruges på en generisk måde.
Vi vil bruge LED_PWM, som kan generere 16 uafhængige PWM -kanaler med konfigurerbare perioder og arbejdscyklusser. Det har op til 16 bit opløsning.
Trin 4: Servomotorstyring PWM
Servomotorstyringen udføres ved at justere pulsbreddemodulationen af en firkant med specifik frekvens.
For den anvendte servo (såvel som for de fleste) er frekvensen ved 50Hz. En bredde på 1 til 2 ms pulslængde bestemmer også servoens vinkelposition.
Vi vil dirigere kanal 0 af LED_PWM til GPIO13 og kanal 1 til GPIO12 ved hjælp af disse oplysninger til at udføre kontrollen.
Trin 5: Analog optagelse
Perifer analog til digital konvertering
ESP32 har analog-til-digital-konvertere, der kan anvendes i op til 18 kanaler, men kun i analog-aktiverede GPIO'er.
Den påførte spænding må ikke overstige 0 til 3V -området.
Den udførte konvertering opretholder ikke en konstant fejl for alle samplede spændinger, og alt afhænger af det konfigurerede område. For en rækkevidde på 150mV ved 2, 450V kræves en adfærdskontrol for mere kritiske applikationer.
Til optagelsen vil vi bruge et potentiometer på 10k som en spændingsdeler. Optagelsen foretages i kanal ADC0 og ADC3, tilgængelig med GPIO36 og GPIO39.
Trin 6: Kredsløb - Server og klient
Trin 7: Kildekode til adgangspunktet og serveren
Erklæringer
Jeg inkluderer WiFi -biblioteket, og jeg definerer nogle variabler.
#include // inclusão da biblioteca WiFi const int freq = 50; // frequência do PWM const int canal_A = 0; // primeiro -kanal gør styring af LED_PWM const int canal_B = 1; // segundo canal 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"; // constante com o SSID do WiFi do ponto de acesso 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 canal A int ciclo_B = 0; // variabel kan modtage en kanal til en kanal En WiFiServer -server (port); // declaração do objeto servidor IPAddress myIP; // declaração da variável de IP
Opsætning ()
Her definerer vi udgangsstifterne. Vi indstiller kanalerne til den ønskede frekvens og indstiller PWM -værdien.
ugyldig opsætning () {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 (kanal_A, frekvens, resolucao); // Ajustando o canal 0 para frequência de 50 Hz e resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o canal 1 para frequência de 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); // omdirigering af kanal 1 til 12 ledcWrite (kanal_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Vi startede serienummeret, adgangspunktet med SSID ESP32ap og adgangskode. Vi får derefter serverens IP og starter serveren.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, password); // 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}
Sløjfe ()
I Loop er det første, vi skal gøre, at instantiere klienten, forbinde og binde til klientvariablen. Kontroller, om klienten er tilsluttet. I så fald starter vi den variabel, der vil modtage dataene. Så længe forbindelsen er etableret, og hvis der modtages data, læser vi tegnene for variablen c. Endelig sammenkæder vi c i datavariablen.
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; // konkatene c med forskellige dados
Hvis der modtages et nyt linjetegn, leder vi efter indekset for tegnet ',' i strengen i dataene. Vi får substreringerne indtil lige før kommaet, og derefter konverterer vi dem til et helt tal. Vi indstiller PWM for kanal A og B. Vi rydder variablen.
hvis (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // skaffe 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 após a vírgula e converta para inteiro ledcWrite (canal_A, ciclo_A); // Ajusta o PWM gør kanal A ledcWrite (kanal_B, ciclo_B); // Ajusta o PWM gør kanal B dados = ""; // Limpa a variável}}}}
Hvis klienten afbryder forbindelsen, bekræfter vi afslutningen af forbindelsen. Vi venter et øjeblik og udskriver "Ingen klient tilsluttet". Vi venter derefter endnu et sekund, før vi genstarter.
// caso o cliente se desconecte, confirmma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem forsinkelse (1000); // aguarda um segundo antes de reiniciar}
Trin 8: Kundens kildekode
Erklæringer
Vi har inkluderet WiFi -biblioteket igen, denne gang på klienten. Vi definerer også variablerne.
#include const char* ssid = "ESP32ap"; // SSID do 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; // Varianter, der kan bruges til værdier for PWM B WiFiClient -klienter; // declaração do objeto cliente
Opsætning ()
Vi definerer GPIO'erne som input, starter serien og opretter forbindelse til adgangspunktet.
ugyldig opsætning () {pinMode (pin_Leitura_A, INPUT); // definer o GPIO som entrada pinMode (pin_Leitura_B, INPUT); // definere o GPIO som entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}
Sløjfe ()
I denne loop vil vi oprette forbindelse til serveren, hvilket betyder den anden ESP.
void loop () {// 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, password); forsinkelse (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 + "…"); // mensagem forsinkelse (1000); }
I dette trin, mens vi er forbundet til serveren, udfører vi variablerne for at gemme læsningen af ADC0 og ADC3. Vi udførte også aflæsningen af 500 prøver og gennemsnittet af målingerne. Vi kortlagde aflæsningen for at oprette den korrekte varighed for styringen af servoerne og sammenkoble og sende den til serveren.
// 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 + analogRead (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = kort (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para control do servo ciclo_B = map (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para control do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Endelig, hvis den ikke er tilsluttet, sikrer vi, at forbindelsen er afbrudt ved at vise den tilsvarende besked.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Trin 9: Filer
Download filerne:
INO
Anbefalede:
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
PWM Med ESP32 - Dæmpning LED med PWM på ESP 32 Med Arduino IDE: 6 trin
PWM Med ESP32 | Dæmpning af LED med PWM på ESP 32 Med Arduino IDE: I denne instruktion vil vi se, hvordan man genererer PWM -signaler med ESP32 ved hjælp af Arduino IDE & PWM bruges dybest set til at generere analog output fra enhver MCU, og den analoge output kan være alt mellem 0V til 3,3V (i tilfælde af esp32) & fra
Kom godt i gang med ESP32 CAM - Streaming af video ved hjælp af ESP CAM over Wifi - ESP32 sikkerhedskamera projekt: 8 trin
Kom godt i gang med ESP32 CAM | Streaming af video ved hjælp af ESP CAM over Wifi | ESP32 Security Camera Project: I dag lærer vi, hvordan man bruger dette nye ESP32 CAM -kort, og hvordan vi kan kode det og bruge det som et sikkerhedskamera og få en streaming video over wifi
Kom godt i gang med ESP32 - Installation af ESP32 -plader i Arduino IDE - ESP32 Blink -kode: 3 trin
Kom godt i gang med ESP32 | Installation af ESP32 -plader i Arduino IDE | ESP32 Blink -kode: I denne instruks kan vi se, hvordan man begynder at arbejde med esp32, og hvordan man installerer esp32 -kort i Arduino IDE, og vi vil programmere esp 32 til at køre blinkkode ved hjælp af arduino ide
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores