Tartalomjegyzék:
- 1. lépés: Felhasznált erőforrások
- 2. lépés: NodeMCU ESP32S - Pinout
- 3. lépés: ESP32 perifériák
- 4. lépés: Szervo motorvezérlés PWM
- 5. lépés: Analóg rögzítés
- 6. lépés: Áramkör - szerver és ügyfél
- 7. lépés: A hozzáférési pont és a kiszolgáló forráskódja
- 8. lépés: Az ügyfél forráskódja
- 9. lépés: Fájlok
Videó: PANTILT kamera ESP32: 9 lépésben
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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
• 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
3. lépés: 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
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 -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
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:
ÉN NEM
Ajánlott:
Programozza be saját 2048 játékát Java/Java !: 8 lépésben
Programozza saját 2048 -as játékát W/Java -val !: Imádom a 2048 -as játékot. Ezért úgy döntöttem, hogy saját verziómat programozom. Nagyon hasonlít a valódi játékhoz, de saját magam programozásával szabadon megváltoztathatom, amit akarok, amikor csak akarok. Ha 5x5 -ös játékot akarok a tipikus 4x4 helyett, akkor
Automatikus gél alkoholos adagoló Esp32: 9 lépésben
Automatikus gél alkoholos adagoló Esp32-vel: Az oktatóanyagban látni fogjuk, hogyan lehet teljes prototípust készíteni, automatikus gél-alkohol-adagolót összeállítani az esp32-vel, amely magában foglalja a lépésről lépésre történő összeszerelést, az elektronikus áramkört és a forráskódot is, lépésről lépésre elmagyarázva lépés
Arcfelismerés a Raspberry Pi 4B készüléken 3 lépésben: 3 lépésben
Arcfelismerés a Raspberry Pi 4B készüléken 3 lépésben: Ebben az utasításban az arcfelismerést fogjuk elvégezni a Raspberry Pi 4 rendszeren Shunya O/S alkalmazással a Shunyaface Library segítségével. A Shunyaface egy arcfelismerő/felismerő könyvtár. A projekt célja a leggyorsabb észlelési és felismerési sebesség elérése a
Elektromos turbina ESP32: 9 lépésben
Elektromos turbina ESP32 -vel: Ma egy elektromos turbinát fogok megvitatni az ESP32 -vel. A szerelvénynek van egy része, amelyet 3D -ben nyomtattak ki. Bemutatom az ESP32 PWM funkcióját, amely alkalmas elektromos motorok vezérlésére. Ezt egyenáramú motorban fogják használni. Én is démonozni fogok
A NODEMcu USB port nem működik? Töltse fel a kódot USB használatával TTL (FTDI) modulba mindössze 2 lépésben: 3 lépésben
A NODEMcu USB port nem működik? Töltse fel a kódot az USB to TTL (FTDI) modul használatával mindössze 2 lépésben: Elege van abból, hogy sok vezetéket csatlakoztat USB -ről TTL modulra a NODEMcu -hoz, kövesse ezt az utasítást, és csak két lépésben töltse fel a kódot. Ha a A NODEMcu nem működik, akkor ne essen pánikba. Csak az USB -illesztőprogram -chip vagy az USB -csatlakozó