Sisukord:
- Samm: kasutatud ressursid
- 2. samm: NodeMCU ESP32S - Pinout
- Samm: ESP32 välisseadmed
- Samm: servomootori juhtimine PWM
- Samm: analooghõive
- 6. samm: ahel - server ja klient
- Samm: pääsupunkti ja serveri lähtekood
- 8. samm: kliendi lähtekood
- 9. samm: failid
Video: PANTILT -kaamera ESP32: 9 sammuga
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Täna tutvustan PAN TILT -i, mis on seade, mis võimaldab kaamera liikumist üles, alla ja külgedele. Ma ise valmistasin selle seadme 3D -prinditud osade kaudu, kasutades kahte servot ja ESP32, mis võimaldab seda mehhanismi juhtida WiFi kaudu. Võtame siis näidud, kasutades ESP32 AD -kanaleid, samuti analoogoperatsiooni, kasutades kontrollerit LED_PWM. Samuti rakendame kontrolli TCP / IP -ühenduse üle.
Videost näete, et mul on ESP32, mis loeb kahe potentsiomeetri väärtusi, mis saadetakse (WiFi kaudu) teisele ESP32 -le. See on ühendatud kahe servomootoriga. Kaamera liigub (ja on kinnitatud PAN TILT -i külge) üles, alla või külgsuunas, olenevalt potist läbi viidud juhtimisest.
PAN TILT 3D -trükikujunduse lingi leiate siit:
Samm: kasutatud ressursid
• Mitu džemprid ühendamiseks
• Kaks sõlme MCU ESP32
• Kaks USB -kaablit ESP32 jaoks
• Veebikaamera juhtimiseks
• Kaks kontrollpotti
• Protoboard
• Servode allikas
2. samm: NodeMCU ESP32S - Pinout
Samm: ESP32 välisseadmed
PWM -i välisseadmed ESP32 -l on kaks välisseadet, mis on võimelised genereerima PWM -signaale. Nende hulka kuuluvad impulsi laiuse modulaatori (MCPWM) mootor, mis on ette nähtud võimsuse ja mootori juhtimiseks, ning LED_PWM, mis on välja töötatud LED -i intensiivsuse reguleerimiseks. Kuid neid saab kasutada ka üldisel viisil.
Kasutame LED_PWM -i, mis suudab genereerida 16 sõltumatut PWM -kanalit koos seadistatavate perioodide ja töötsüklitega. Sellel on kuni 16 bitti eraldusvõimet.
Samm: servomootori juhtimine PWM
Servomootori juhtimine toimub ruudu impulsi laiuse modulatsiooni reguleerimisega kindla sagedusega.
Kasutatava servo (nagu ka enamiku) puhul on sagedus 50 Hz. Samuti määrab servo nurgaasendi laius 1 kuni 2 ms.
Me suuname LED_PWM kanali 0 kanalile GPIO13 ja kanali 1 GPIO12 -le, kasutades seda teavet juhtimiseks.
Samm: analooghõive
Analoog -digitaalmuundamise välisseade
ESP32-l on analoog-digitaalmuundurid, mida saab kasutada kuni 18 kanalil, kuid ainult analoog-toega GPIO-des.
Rakendatud pinge ei tohi ületada vahemikku 0 kuni 3 V.
Teostatud teisendus ei säilita kõigi proovivõetud pingete korral pidevat viga ja see kõik sõltub konfigureeritud vahemikust. Vahemiku 150 mV juures 2, 450 V korral tuleb kriitilisemate rakenduste puhul kontrollida käitumist.
Pildistamiseks kasutame pingejagurina 10k potentsiomeetrit. Jäädvustamine toimub kanalites ADC0 ja ADC3, millele pääsevad juurde GPIO36 ja GPIO39.
6. samm: ahel - server ja klient
Samm: pääsupunkti ja serveri lähtekood
Avaldused
Lisan WiFi -teegi ja määratlen mõned muutujad.
#include // inclusão da biblioteca WiFi const int freq = 50; // frequência do PWM const int canal_A = 0; // primeiro kanal do controlador LED_PWM const int kanal_B = 1; // segundo kanal 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"; // konstant com või SSID, mis ühendab WiFi -d, lisab ESP32 const char* password = "12345678"; // senha para confirmaçã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 WiFiServeri server (port); // deklaração do objeto servidor IPAddress myIP; // deklaração da variável de IP
Seadistamine ()
Siin määratleme väljundtihvtid. Seadsime kanalid soovitud sagedusele ja seadsime PWM väärtuse.
void setup () {pinMode (pin_Atuacao_A, VÄLJUND); // 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 canal 0 para Frequência de 50 Hz and resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o canal 1 para Frequência de 50 Hz and resolução de 12bits ledcAttachPin (pin_Atuacao_A, canal_A); // redirecionando o canal 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // ümbersuunamine või kanal 1 para või pino 12 ledcWrite (canal_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Alustasime seeriat, pääsupunkti SSID ESP32ap ja parooliga. Seejärel saame serveri IP -aadressi ja käivitame serveri.
Seriaalne algus (115200); // initsialiseeri a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, parool); // SSID ESP32ap e senha 12345678 Serial.println ("Obtendo IP") alustamine või käivitamine; // 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}
Silmus ()
Loopis esimene asi, mida me teeme, on kliendi kiirendamine, ühendades ja sidudes kliendi muutujaga. Kontrollige, kas klient on ühendatud. Kui jah, siis käivitame muutuja, mis andmeid vastu võtab. Niikaua kui ühendus on loodud ja kui andmeid võetakse vastu, loeme muutuja c märke. Lõpuks ühendame andmete muutujaga c.
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
Uue rea märgi vastuvõtmisel otsime andmete stringist märgi ',' indeksi. Me saame alamstringid enne koma ja seejärel teisendame need täisarvuks. Seadime kanalite A ja B PWM. Tühjendame muutuja.
if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // hankige pelo índice do caracter ',' ja 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, tsüklo_A); // Ajusta või PWM do kanal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do kanal B dados = ""; // Limpa a variável}}}}
Kui klient katkestab ühenduse, kinnitame ühenduse lõppemise. Ootame hetke ja trükime "Klienti pole ühendatud". Seejärel ootame enne taaskäivitamist veel sekund.
// caso o cliente se desconecte, confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem delay (1000); // aguarda um segundo antes de reiniciar}
8. samm: kliendi lähtekood
Avaldused
Oleme taas kaasanud WiFi raamatukogu, seekord kliendi peale. Samuti määratleme muutujad.
#include const char* ssid = "ESP32ap"; // SSID ponto de ESC32 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; // vará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
Seadistamine ()
Me määratleme GPIOd sisendina, käivitame jada ja loome ühenduse pääsupunktiga.
void setup () {pinMode (pin_Leitura_A, INPUT); // define o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // define o GPIO como entrada Serial.begin (115200); // inicia a comunicação jada WiFi.begin (ssid, parool); // conecta ao ponto de acesso}
Silmus ()
Selles silmus loome ühenduse serveriga, mis tähendab teist ESP -d.
void loop () {// kui see ei ole võimalik, siis tuleb seda teha, kui (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando WiFi puudub + ssid + "…"); // mensagem WiFi.begin (ssid, parool); viivitus (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 delay (1000); }
Selles etapis, kui oleme serveriga ühendatud, käivitame muutujad ADC0 ja ADC3 lugemise salvestamiseks. Samuti lugesime 500 proovi ja keskmistasime näidud. Kaardistasime lugemise, et luua servode juhtimiseks õige kestus, ühendada ja saata see serverisse.
// 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); kontador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = kaart (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correctta para controle do servo ciclo_B = kaart (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correctta para controle do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Lõpuks, kui pole ühendust, tagame samaväärse teate kuvamisega ühenduse katkestamise.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - klientide desconectado …"); // mensagem}
9. samm: failid
Laadige failid alla:
INO
Soovitan:
Automaatne geel -alkoholi dosaator Esp32: 9 sammuga
Automaatne geel-alkoholi dosaator koos Esp32-ga: Õpetuses näeme, kuidas teha täielik prototüüp, esp32-ga automaatse geel-alkoholi jaoturi kokkupanek, see sisaldab samm-sammult kokkupanekut, elektroonilist vooluahelat ja ka lähtekoodi, mida selgitatakse samm-sammult samm
Mängu kujundus Flickis 5 sammuga: 5 sammu
Mängu kujundamine Flickis 5 sammuga: Flick on tõesti lihtne viis mängu loomiseks, eriti pusle, visuaalse romaani või seiklusmängu sarnaseks
Vaarika PI 3 - lubage jadaühendus TtyAMA0 kuni BCM GPIO 14 ja GPIO 15: 9 sammuga
Raspberry PI 3 - lubage jadaühendus TtyAMA0 -ga BCM GPIO 14 ja GPIO 15 -le: hiljuti olin huvitatud UART0 lubamisest oma Raspberry Pi -s (3b), et saaksin selle ühendada otse RS -232 signaalitaseme seadmega, kasutades standardset 9 -kinnitage d-sub-pistik ilma USB-RS-232-adapterita. Osa minu huvist
Klubi valgustussüsteem koos MadMapperi ja Teensy 3.2: 14 sammuga
Klubivalgustussüsteem koos MadMapper & Teensy 3.2 -ga: 2018. aastal tegin selle väikese eelarvega klubivalgustussüsteemi esimese versiooni aastavahetuse peol Ramallah's Palestiinas koos oma kollektiiviga UNION, lähemalt loo ja kollektiivi kohta selle lõpus artikkel. Süsteem põhines WS2812
Elektriturbiin ESP32: 9 sammuga
Elektriturbiin koos ESP32 -ga: Täna arutan ESP32 -ga elektriturbiini. Komplektis on osa, mis trükiti 3D -vormingus. Esitan ESP32 PWM funktsiooni, mis sobib elektrimootorite juhtimiseks. Seda kasutatakse alalisvoolumootoris. Ma teen ka deemoni