Innholdsfortegnelse:
- Trinn 1: Ressurser brukt
- Trinn 2: NodeMCU ESP32S - Pinout
- Trinn 3: ESP32 eksterne enheter
- Trinn 4: Servomotorkontroll PWM
- Trinn 5: Analog fangst
- Trinn 6: Krets - Server og klient
- Trinn 7: Kildekode til tilgangspunktet og serveren
- Trinn 8: Kundens kildekode
- Trinn 9: Filer
Video: PANTILT -kamera med ESP32: 9 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
I dag vil jeg presentere PAN TILT, som er en enhet som muliggjør bevegelse av et kamera for retningene opp, ned og til sidene. Selv produserte jeg denne enheten gjennom 3D -trykte deler, ved hjelp av to servoer og ESP32, som gjør det mulig å kontrollere denne mekanismen via WiFi. La oss deretter ta avlesninger ved hjelp av AD -kanalene til ESP32, samt en analog operasjon ved hjelp av kontrolleren LED_PWM. Vi bruker også kontrollen over en TCP / IP -tilkobling.
I videoen kan du se at jeg har en ESP32 som leser verdiene til de to potensiometrene, som sendes (via WiFi) til en annen ESP32. Den er koblet til de to servomotorene. Kameraet beveger seg (og er festet til PAN TILT) i retning opp, ned eller sidelengs, avhengig av kontrollen du gjør gjennom grytene.
Lenken til PAN TILT 3D -utskriftsdesign finner du her:
Trinn 1: Ressurser brukt
• Flere hoppere for tilkobling
• To Node MCU ESP32 -er
• To USB -kabler for ESP32
• Et webkamera for kontroll
• To kontrollpotter
• En protoboard
• En kilde til servoene
Trinn 2: NodeMCU ESP32S - Pinout
Trinn 3: ESP32 eksterne enheter
PWM -eksterne enheter ESP32 har to eksterne enheter som er i stand til å generere PWM -signaler. Disse inkluderer motoren Pulse Width Modulator (MCPWM) designet for effekt og motorstyring, og LED_PWM, utviklet for LED -intensitetskontroll. Men de kan også brukes på en generisk måte.
Vi vil bruke LED_PWM, som kan generere 16 uavhengige PWM -kanaler med konfigurerbare perioder og arbeidssykluser. Den har opptil 16 bits oppløsning.
Trinn 4: Servomotorkontroll PWM
Servomotorstyringen utføres ved å justere pulsbreddemodulasjonen til et kvadrat med spesifikk frekvens.
For servoen som brukes (så vel som for de fleste) er frekvensen på 50Hz. En bredde på 1 til 2 ms pulslengde bestemmer også servoens vinkelposisjon.
Vi vil rute kanal 0 av LED_PWM til GPIO13, og kanal 1 til GPIO12, ved å bruke denne informasjonen til å utføre kontrollen.
Trinn 5: Analog fangst
Perifer til analog til digital konvertering
ESP32 har analog-til-digital-omformere som kan brukes i opptil 18 kanaler, men bare i analog-aktiverte GPIO-er.
Den påførte spenningen må ikke overstige 0 til 3V -området.
Konverteringen utfører ikke en konstant feil for alle spenninger som samples, og alt avhenger av det konfigurerte området. For et område på 150mV ved 2, 450V, er det nødvendig med en atferdskontroll for mer kritiske applikasjoner.
For fangst vil vi bruke et potensiometer på 10k som en spenningsdeler. Fangsten vil bli utført i kanal ADC0 og ADC3, tilgjengelig med GPIO36 og GPIO39.
Trinn 6: Krets - Server og klient
Trinn 7: Kildekode til tilgangspunktet og serveren
Uttalelser
Jeg inkluderer WiFi -biblioteket, og jeg definerer noen variabler.
#include // inclusão da biblioteca WiFi const int freq = 50; // frequência do PWM const int canal_A = 0; // primeiro canal do controlador 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 for 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; // variável que receberá o ciclo de atuação do canal A WiFiServer server (port); // declaração do objeto servidor IPAddress myIP; // declaração da variável de IP
Oppsett ()
Her definerer vi utgangspinnene. Vi setter kanalene til ønsket frekvens og angir PWM -verdien.
ugyldig oppsett () {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 av kanal 1 for 12 ledcWrite (kanal_A, ciklo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Vi startet serienummeret, tilgangspunktet med SSID ESP32ap og passord. Vi får deretter IP -adressen til serveren og starter serveren.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, passord); // 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}
Løkke ()
I Loop er det første vi skal gjøre å instantiere klienten, koble til og binde seg til klientvariabelen. Sjekk om klienten er tilkoblet. I så fall starter vi variabelen som vil motta dataene. Så lenge forbindelsen er etablert, og hvis data mottas, leser vi tegnene for variabelen c. Til slutt kombinerer vi c i datavariabelen.
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
Hvis et nytt linjetegn mottas, ser vi etter indeksen til tegnet ',' i strengen i dataene. Vi får substreringene til rett før komma, og deretter konverterer vi dem til heltall. Vi setter PWM for kanalene A og B. Vi fjerner variabelen.
if (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 do canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}
Hvis klienten kobler fra, bekrefter vi slutten av tilkoblingen. Vi venter et øyeblikk og skriver ut "Ingen klient tilkoblet". Vi venter deretter et sekund til vi starter på nytt.
// 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}
Trinn 8: Kundens kildekode
Uttalelser
Vi har inkludert WiFi -biblioteket igjen, denne gangen på klienten. Vi definerer også variablene.
#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; // Variabel som kan hjelpe deg å bruke PWM B WiFiClient -klient; // declaração do objeto cliente
Oppsett ()
Vi definerer GPIO -ene som input, starter serien og kobler til tilgangspunktet.
ugyldig oppsett () {pinMode (pin_Leitura_A, INPUT); // definere o GPIO som entrada pinMode (pin_Leitura_B, INPUT); // definere o GPIO como entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}
Løkke ()
I denne løkken vil vi koble til serveren, det vil si den andre 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, passord); 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 trinnet, mens vi er koblet til serveren, utfører vi variablene for å lagre avlesningen av ADC0 og ADC3. Vi utførte også avlesningen av 500 prøver og gjennomsnittet avlesningene. Vi kartla avlesningen for å lage riktig varighet for kontrollen av servoene, 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 = kart (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)); }
Til slutt, hvis den ikke er tilkoblet, sikrer vi at tilkoblingen er avsluttet ved å vise tilsvarende melding.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Trinn 9: Filer
Last ned filene:
INO
Anbefalt:
Spill av video med ESP32: 10 trinn (med bilder)
Spill av video med ESP32: Denne instruksen viser noe om å spille av video og lyd med ESP32
MQTT stemningslys med ESP32: 4 trinn (med bilder)
MQTT Mood Lights With ESP32: Jeg hadde lenge vært fristet til å hoppe på LED -vognen, så jeg løp ut og hentet en LED -stripe å leke med. Jeg endte opp med å lage disse stemningslysene. De kan kontrolleres med MQTT, noe som gjør det mulig å legge til alle slags smarte. Dette er en
PWM Med ESP32 - Dimmende LED med PWM på ESP 32 Med Arduino IDE: 6 trinn
PWM Med ESP32 | Dimmende LED med PWM på ESP 32 Med Arduino IDE: I denne instruksen vil vi se hvordan du genererer PWM -signaler med ESP32 ved hjelp av Arduino IDE & PWM brukes i utgangspunktet til å generere analog utgang fra hvilken som helst MCU, og den analoge utgangen kan være alt mellom 0V til 3,3V (i tilfelle esp32) & fra
Komme i gang med ESP32 CAM - Streaming av video ved bruk av ESP CAM over Wifi - ESP32 sikkerhetskamera -prosjekt: 8 trinn
Komme i gang med ESP32 CAM | Streaming av video ved bruk av ESP CAM over Wifi | ESP32 Security Camera Project: I dag lærer vi hvordan du bruker dette nye ESP32 CAM -kortet og hvordan vi kan kode det og bruke det som et sikkerhetskamera og få en streaming video over wifi
Komme i gang med ESP32 - Installere ESP32 -kort i Arduino IDE - ESP32 Blink -kode: 3 trinn
Komme i gang med ESP32 | Installere ESP32 -kort i Arduino IDE | ESP32 Blink -kode: I denne instruksjonsboken vil vi se hvordan du begynner å jobbe med esp32 og hvordan du installerer esp32 -kort i Arduino IDE, og vi vil programmere esp 32 for å kjøre blinkkode ved hjelp av arduino ide