Sisällysluettelo:
- Vaihe 1: Käytetyt resurssit
- Vaihe 2: NodeMCU ESP32S - Pinout
- Vaihe 3: ESP32 -oheislaitteet
- Vaihe 4: Servomoottorin ohjaus PWM
- Vaihe 5: Analoginen sieppaus
- Vaihe 6: Piiri - palvelin ja asiakas
- Vaihe 7: Tukiaseman ja palvelimen lähdekoodi
- Vaihe 8: Asiakkaan lähdekoodi
- Vaihe 9: Tiedostot
Video: PANTILT -kamera, jossa ESP32: 9 askelta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Esittelen tänään PAN TILTin, joka on kamera, joka mahdollistaa kameran liikkeen ylös, alas ja sivuille. Itse valmistin tämän laitteen 3D -tulostettujen osien kautta käyttämällä kahta servoa ja ESP32: ta, mikä mahdollistaa tämän mekanismin ohjaamisen WiFi -yhteyden kautta. Otetaan sitten lukemat käyttämällä ESP32: n AD -kanavia sekä analoginen toiminto ohjaimella LED_PWM. Käytämme myös TCP / IP -yhteyden valvontaa.
Videosta näet, että minulla on ESP32, joka lukee kahden potentiometrin arvot, jotka lähetetään (WiFi -yhteyden kautta) toiseen ESP32 -laitteeseen. Se on kytketty kahteen servomoottoriin. Kamera liikkuu (ja on kiinnitetty PAN TILT -laitteeseen) ylös-, alas- tai sivusuunnassa riippuen ruukkujen läpi tekemästäsi ohjauksesta.
Linkki PAN TILT 3D -tulostussuunnitteluun löytyy täältä:
Vaihe 1: Käytetyt resurssit
• Useita kytkimiä
• Kaksi solmua MCU ESP32
• Kaksi ESP32 -USB -kaapelia
• Web -kamera ohjausta varten
• Kaksi ohjausastiaa
• Protoboard
• Servojen lähde
Vaihe 2: NodeMCU ESP32S - Pinout
Vaihe 3: ESP32 -oheislaitteet
PWM -oheislaitteet ESP32: ssa on kaksi oheislaitetta, jotka pystyvät tuottamaan PWM -signaaleja. Näitä ovat tehon ja moottorin ohjaukseen suunniteltu pulssileveysmodulaattori (MCPWM) ja LED -voimakkuuden säätöön kehitetty LED_PWM. Mutta niitä voidaan käyttää myös yleisellä tavalla.
Käytämme LED_PWM: ää, joka voi luoda 16 itsenäistä PWM -kanavaa, joilla on määritettävissä olevat jaksot ja työkierrot. Siinä on jopa 16 bittiä resoluutiota.
Vaihe 4: Servomoottorin ohjaus PWM
Servomoottorin ohjaus suoritetaan säätämällä neliön pulssileveysmodulaatiota tietyllä taajuudella.
Käytetyssä servossa (samoin kuin useimmissa) taajuus on 50 Hz. Myös 1 - 2 ms: n pulssin pituus määrittää servon kulma -asennon.
Reititämme LED_PWM -kanavan 0 GPIO13: een ja kanavan 1 GPIO12: een käyttämällä näitä tietoja ohjauksen suorittamiseen.
Vaihe 5: Analoginen sieppaus
Analoginen digitaaliseen muuntamiseen tarkoitettu oheislaite
ESP32: ssa on analogia-digitaalimuuntimet, joita voidaan käyttää jopa 18 kanavalla, mutta vain analogisia GPIO-laitteita.
Käytetty jännite ei saa ylittää 0–3 V: n aluetta.
Suoritetussa muunnoksessa ei ole jatkuvaa virhettä kaikilla otetuilla jännitteillä, ja tämä kaikki riippuu määritetystä alueesta. 150 mV: n alueella 2, 450 V: n käyttäytymistarkistus vaaditaan kriittisempiin sovelluksiin.
Tallennuksessa käytämme 10k: n potentiometriä jännitteenjakajana. Sieppaus suoritetaan kanavilla ADC0 ja ADC3, joihin pääsee GPIO36: n ja GPIO39: n kautta.
Vaihe 6: Piiri - palvelin ja asiakas
Vaihe 7: Tukiaseman ja palvelimen lähdekoodi
Lausunnot
Sisällytän WiFi -kirjaston ja määritän muuttujia.
#include // inclusão da biblioteca WiFi const int freq = 50; // frequência do PWM const int kanava_A = 0; // primeiro canal do controlador LED_PWM const int kanava_B = 1; // segundo canal do controlador LED_PWM const int resolucao = 12; // Ratkaisu ei valvontaa 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"; // vakiomuotoinen tai SSID -yhteys langattomaan verkkoon 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 -palvelin (portti); // deklaração do objeto servidor IPAddress myIP; // IP -osoitteen muuttujan ilmoitus
Perustaa ()
Tässä määritellään ulostulonastat. Asetamme kanavat halutulle taajuudelle ja asetamme PWM -arvon.
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 for Frequência de 50 Hz and resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o canal 1 for 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 para 0
Aloitimme sarjan, tukiaseman SSID ESP32ap -laitteella ja salasanalla. Saamme sitten palvelimen IP -osoitteen ja aloitamme palvelimen.
Sarja.alku (115200); // aloita Serial Serial.println ("Iniciando ponto de acesso:" + Jono (ssid)); // mensagem WiFi.softAP (ssid, salasana); // SSID ESP32ap ja 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:" + Jono (portti)); // mensagem server.begin (); // iniciando o servidor}
Silmukka ()
Loopissa ensimmäinen asia, jonka aiomme tehdä, on asiakkaan hetkellinen luominen, yhdistäminen ja sitoutuminen asiakasmuuttujaan. Tarkista, onko asiakas yhteydessä. Jos näin on, aloitamme muuttujan, joka vastaanottaa tiedot. Niin kauan kuin yhteys on muodostettu ja jos dataa vastaanotetaan, luemme muuttujan c merkit. Lopuksi ketjutamme c datamuuttujassa.
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 ("Asiakasyhteys."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver estabelecida if (cliente.available ()) {// e se houver dados a receber char c = cliente.read (); // löytää os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Jos vastaanotetaan uuden rivin merkki, etsimme datan merkkijonosta merkin ',' indeksin. Saamme alimerkkijonot ennen pilkkua ja muunnamme ne sitten kokonaislukuiksi. Asetamme kanavien A ja B PWM. Tyhjennämme muuttujan.
if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // hanki 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, ciclo_A); // Ajusta tai PWM do canal A ledcWrite (canal_B, ciclo_B); // Ajusta tai PWM do kanava B dados = ""; // Limpa a variável}}}}
Jos asiakas katkaisee yhteyden, vahvistamme yhteyden päättymisen. Odotamme hetken ja tulostamme "Ei asiakasta yhdistetty". Odotamme sitten toisen sekunnin ennen kuin aloitamme uudelleen.
// 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}
Vaihe 8: Asiakkaan lähdekoodi
Lausunnot
Olemme lisänneet WiFi -kirjaston uudelleen, tällä kertaa asiakkaan päälle. Lisäksi määritämme muuttujat.
#include const char* ssid = "ESP32ap"; // SSID 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; // 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
Perustaa ()
Määritämme GPIO: t tuloksi, aloitamme sarjan ja muodostamme yhteyden tukiasemaan.
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}
Silmukka ()
Tässä silmukassa muodostamme yhteyden palvelimeen, eli toiseen ESP: hen.
void loop () {// koska se ei ole mahdollista, kun ponto de acesso, tenta se conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, salasana); viive (2000); } Sarja.println (Jono (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 + ":" + portti + "…"); // mensagem delay (1000); }
Tässä vaiheessa, kun olemme yhteydessä palvelimeen, suoritamme muuttujat ADC0- ja ADC3 -lukujen tallentamiseksi. Lisäksi luimme 500 näytettä ja laskimme lukemien keskiarvon. Kartoimme lukeman luodaksemme oikean keston servojen ohjaukselle ja yhdistämällä ja lähettämällä sen palvelimelle.
// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // variavel 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 + analoginen luku (pin_Leitura_B); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = kartta (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração korreta para controle do servo ciclo_B = kartta (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração korjaus para controle do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Lopuksi, jos yhteyttä ei ole muodostettu, varmistamme, että yhteys on katkaistu näyttämällä vastaava viesti.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (Jono (millis ()) + " - asiakasasiakas…"); // mensagem}
Vaihe 9: Tiedostot
Lataa tiedostot:
INO
Suositeltava:
Club -valaistusjärjestelmä, jossa MadMapper & Teensy 3.2: 14 askelta
Klubin valaistusjärjestelmä MadMapper & Teensy 3.2: lla: Vuonna 2018 tein ensimmäisen version tästä pienen budjetin klubivalaistusjärjestelmästä uudenvuodenaaton juhliin Ramallahissa Palestiinassa kollektiivini The UNION kanssa, lisää tarinasta ja kollektiivista tämän lopussa artikla. Järjestelmä perustui WS2812
Esp8266 -pohjainen tehostusmuunnin, jossa on hämmästyttävä Blynk -käyttöliittymä, jossa on palautesäädin: 6 vaihetta
Esp8266 -pohjainen tehostusmuunnin hämmästyttävällä Blynk -käyttöliittymällä, jossa on palautesäädin: Tässä projektissa näytän sinulle tehokkaan ja yleisen tavan DC -jännitteiden lisäämiseen. Näytän sinulle, kuinka helppoa voi olla tehostusmuuntimen rakentaminen Nodemcun avulla. Rakennetaan se. Se sisältää myös näytön volttimittarin ja palautteen
Hälytys makuuhuoneeseen, jossa on valot ja äänet !: 6 askelta
Hälytys makuuhuoneeseen, jossa on valot ja äänet!: Hei, tänään näytän sinulle, kuinka tehdä hälytys makuuhuoneesi ovelle Arduino UNO: n avulla
ESP32 -liitäntä, jossa on SSD1306, jossa on MicroPython: 5 vaihetta
ESP32 -liitäntä SSD1306: lla, jossa on MicroPython: Mikropython on pythonin optimoima ja pieni jalanjälki. Mikropython on saatavana monille ohjainperheille, mukaan lukien ESP8266, ESP32, Ardui
ESP32 -pohjainen M5Stack M5stick C -säämonitori, jossa DHT11 - M5stick-C: n lämpötila- ja kosteusindeksin seuranta DHT11: 6 askelta
ESP32 -pohjainen M5Stack M5stick C -säämonitori, jossa DHT11 | M5stick-C: n lämpötilan kosteus- ja lämpöindeksin seuranta DHT11: llä: Hei kaverit, tässä ohjeessa opimme liittämään DHT11-lämpötila-anturin m5stick-C: hen (m5stackin kehityskortti) ja näyttämään sen m5stick-C: n näytöllä. Joten tässä opetusohjelmassa luemme lämpötilan, kosteuden ja amp; lämmitän