Tartalomjegyzék:

PANTILT kamera ESP32: 9 lépésben
PANTILT kamera ESP32: 9 lépésben

Videó: PANTILT kamera ESP32: 9 lépésben

Videó: PANTILT kamera ESP32: 9 lépésben
Videó: ESP32-S3 + Camera Module(OV2640) + LTE Module(SIM7600G-H) 2024, November
Anonim
Image
Image
PANTILT kamera ESP32 -vel
PANTILT kamera ESP32 -vel

Ma bemutatom a PAN TILT -et, amely egy olyan eszköz, amely lehetővé teszi a kamera mozgását felfelé, lefelé és oldalra. Ezt az eszközt magam készítettem 3D nyomtatott alkatrészeken keresztül, két szervó és az ESP32 segítségével, ami lehetővé teszi, hogy ezt a mechanizmust WiFi -n keresztül vezéreljük. Vegyünk leolvasást az ESP32 AD csatornái, valamint analóg művelet segítségével a LED_PWM vezérlő segítségével. Ezenkívül a vezérlést TCP / IP -kapcsolaton is alkalmazzuk.

A videón látható, hogy van egy ESP32 -em, amely leolvassa a két potenciométer értékeit, amelyeket (WiFi -n keresztül) egy másik ESP32 -re küld. A két szervomotorhoz van csatlakoztatva. A kamera mozog (és a PAN TILT -hez van rögzítve) felfelé, lefelé vagy oldalirányban, attól függően, hogy milyen irányítást hajt végre az edényeken.

A PAN TILT 3D nyomtatási terv linkje itt található:

1. lépés: Felhasznált erőforrások

Felhasznált források
Felhasznált források

• Több jumper a csatlakoztatáshoz

• Két csomópontú MCU ESP32

• Két USB -kábel az ESP32 -hez

• Webkamera a vezérléshez

• Két vezérlőedény

• Protoboard

• Forrás a szervókhoz

2. lépés: NodeMCU ESP32S - Pinout

NodeMCU ESP32S - Pinout
NodeMCU ESP32S - Pinout

3. lépés: ESP32 perifériák

ESP32 perifériák
ESP32 perifériák

PWM perifériák Az ESP32 két perifériával rendelkezik, amelyek képesek PWM jelek generálására. Ezek közé tartozik az impulzusszélesség -modulátor (MCPWM) motor, amelyet teljesítmény- és motorvezérlésre terveztek, valamint a LED_PWM, amelyet a LED -intenzitás szabályozására fejlesztettek ki. De általános módon is használhatók.

A LED_PWM -et fogjuk használni, amely 16 független PWM csatornát tud létrehozni konfigurálható periódusokkal és munkaciklusokkal. Akár 16 bit felbontású.

4. lépés: Szervo motorvezérlés PWM

Szervo motorvezérlés PWM
Szervo motorvezérlés PWM

A szervomotor vezérlését egy négyzet impulzusszélesség -modulációjának meghatározott frekvenciával történő beállításával hajtják végre.

A használt szervó (és a legtöbb) frekvenciája 50 Hz. Ezenkívül az 1-2 ms -os impulzusszélesség határozza meg a szervó szöghelyzetét.

A LED_PWM 0. csatornáját a GPIO13 -ra, az 1. csatornát a GPIO12 -re irányítjuk, ezen információk felhasználásával a vezérlés végrehajtásához.

5. lépés: Analóg rögzítés

Analóg rögzítés
Analóg rögzítés

Analóg -digitális átalakító periféria

Az ESP32 analóg-digitális konverterrel rendelkezik, amely akár 18 csatornán is alkalmazható, de csak analóg GPIO-kban.

Az alkalmazott feszültség nem haladhatja meg a 0–3 V tartományt.

Az elvégzett átalakítás nem tart fenn állandó hibát minden mintavett feszültségnél, és mindez a konfigurált tartománytól függ. A 150 mV -os tartománynál 2, 450 V -nál a kritikusabb alkalmazásoknál viselkedés -ellenőrzés szükséges.

A rögzítéshez 10k potenciométert fogunk használni feszültségosztóként. A rögzítés az ADC0 és ADC3 csatornákon történik, amelyek GPIO36 és GPIO39 hozzáféréssel érhetők el.

6. lépés: Áramkör - szerver és ügyfél

Áramkör - szerver és kliens
Áramkör - szerver és kliens

7. lépés: A hozzáférési pont és a kiszolgáló forráskódja

Nyilatkozatok

Belefoglalom a WiFi könyvtárat, és definiálok néhány változót.

#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"; // konstans com vagy SSID a Wi -Fi -hez 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 WiFiServer szerver (port); // deklaração do objeto servidor IPAddress myIP; // deklaração da variável de IP

Beállít ()

Itt definiáljuk a kimeneti csapokat. A csatornákat a kívánt frekvenciára állítjuk, és beállítjuk a PWM értéket.

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 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 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); // redirecionando o canal 1 para o pino 12 ledcWrite (canal_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM 0

Elindítottuk a sorozatot, a hozzáférési pontot SSID ESP32ap és jelszóval. Ezután megkapjuk a szerver IP -címét, és elindítjuk a szervert.

Sorozat.kezdet (115200); // iniciand a a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, jelszó); // 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}

Hurok ()

A Loop -ban az első dolog, amit meg fogunk tenni, hogy példányosítjuk az ügyfelet, és csatlakozunk az ügyfélváltozóhoz. Ellenőrizze, hogy az ügyfél csatlakozik -e. Ha igen, akkor elindítjuk a változót, amely fogadja az adatokat. Amíg létrejön a kapcsolat, és ha adat érkezik, olvassuk a c változó karaktereit. Végül összefűzzük a c -t az adatváltozóban.

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

Ha újsoros karakter érkezik, az adatok karakterláncában megkeressük a ',' karakter indexét. Az alláncokat közvetlenül a vessző előtt kapjuk meg, majd egész számmá alakítjuk. Beállítjuk az A és B csatornák PWM -jét. Töröljük a változót.

if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // procure 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, ciklo_A); // Ajusta vagy PWM do canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}

Ha az ügyfél bontja a kapcsolatot, megerősítjük a kapcsolat végét. Várunk egy pillanatot, és kinyomtatjuk a „Nincs ügyfél csatlakoztatva” feliratot. Ezután várunk még egy másodpercet, mielőtt újraindítjuk.

// 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. lépés: Az ügyfél forráskódja

Nyilatkozatok

Ismét beillesztettük a WiFi könyvtárat, ezúttal az ügyfélre. Ezenkívül definiáljuk a változókat.

#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; // 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

Beállít ()

A GPIO -kat bemenetként definiáljuk, elindítjuk a sorozatot, és csatlakozunk a hozzáférési ponthoz.

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 serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}

Hurok ()

Ebben a ciklusban csatlakozni fogunk a szerverhez, vagyis a másik ESP -hez.

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, jelszó); késleltetés (2000); } Serial.println (Karakterlánc (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); }

Ebben a lépésben, miközben csatlakozik a szerverhez, végrehajtjuk a változókat az ADC0 és ADC3 olvasásának tárolására. Ezenkívül 500 minta leolvasását végeztük el, és átlagoltuk a leolvasott értékeket. Feltérképeztük az olvasást, hogy a szervók vezérlésének megfelelő időtartamát hozzuk létre, összefűzzük és elküldjük a szervernek.

// 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 = térkép (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correcta para controle do servo ciclo_B = térkép (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)); }

Végül, ha nincs kapcsolat, akkor az egyenértékű üzenet megjelenítésével biztosítjuk, hogy a kapcsolat megszakadt.

// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (Karakterlánc (millis ()) + " - ügyfél desconectado…"); // mensagem}

9. lépés: Fájlok

Töltse le a fájlokat:

PDF

ÉN NEM

Ajánlott: