Satura rādītājs:
- 1. darbība. Izmantotie resursi
- 2. solis: NodeMCU ESP32S - Pinout
- 3. darbība: ESP32 perifērijas ierīces
- 4. solis: Servo motora vadība PWM
- 5. darbība: analoga tveršana
- 6. darbība: ķēde - serveris un klients
- 7. darbība: piekļuves punkta un servera avota kods
- 8. darbība. Klienta avota kods
- 9. darbība: faili
Video: PANTILT kamera ar ESP32: 9 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Šodien es iepazīstināšu ar PAN TILT, kas ir ierīce, kas ļauj pārvietot kameru virzienos uz augšu, uz leju un uz sāniem. Es pats ražoju šo ierīci, izmantojot 3D drukātas detaļas, izmantojot divus servos un ESP32, kas ļauj kontrolēt šo mehānismu, izmantojot WiFi. Pēc tam ņemsim rādījumus, izmantojot ESP32 AD kanālus, kā arī analogo darbību, izmantojot kontrolieri LED_PWM. Mēs arī kontrolējam TCP / IP savienojumu.
Videoklipā varat redzēt, ka man ir ESP32, kas nolasa abu potenciometru vērtības, kuras tiek nosūtītas (izmantojot WiFi) uz citu ESP32. Tas ir savienots ar diviem servomotoriem. Kamera pārvietojas (un ir pievienota PAN TILT) augšup, lejup vai uz sāniem atkarībā no vadības, ko veicat caur katliem.
Saite uz PAN TILT 3D drukas dizainu atrodama šeit:
1. darbība. Izmantotie resursi
• Vairāki džemperi savienošanai
• Divu mezglu MCU ESP32
• Divi USB kabeļi ESP32
• Tīmekļa kamera kontrolei
• Divi vadības podi
• protobords
• Servo avots
2. solis: NodeMCU ESP32S - Pinout
3. darbība: ESP32 perifērijas ierīces
PWM perifērijas ierīces ESP32 ir divas perifērijas ierīces, kas spēj ģenerēt PWM signālus. Tie ietver impulsa platuma modulatora (MCPWM) dzinēju, kas paredzēts jaudas un motora vadībai, un LED_PWM, kas izstrādāts LED intensitātes kontrolei. Bet tos var izmantot arī vispārīgā veidā.
Mēs izmantosim LED_PWM, kas var ģenerēt 16 neatkarīgus PWM kanālus ar konfigurējamiem periodiem un darba cikliem. Tam ir līdz 16 bitu izšķirtspēja.
4. solis: Servo motora vadība PWM
Servomotora vadība tiek veikta, pielāgojot kvadrāta impulsa platuma modulāciju ar noteiktu frekvenci.
Izmantotajam servo (kā arī lielākajai daļai) frekvence ir 50 Hz. Arī impulsa garums no 1 līdz 2 ms nosaka servo leņķisko stāvokli.
Mēs novirzīsim LED_PWM 0. kanālu uz GPIO13 un 1. kanālu uz GPIO12, izmantojot šo informāciju, lai veiktu vadību.
5. darbība: analoga tveršana
Analogā un digitālā pārveidošanas perifērija
ESP32 ir analogu-ciparu pārveidotāji, kurus var izmantot līdz 18 kanāliem, bet tikai GPIO, kas nodrošina analogu.
Spriegums nedrīkst pārsniegt diapazonu no 0 līdz 3 V.
Veiktā pārveidošana neuztur nemainīgu kļūdu visiem spriegumiem, kas ņemti paraugā, un tas viss ir atkarīgs no konfigurētā diapazona. 150 mV diapazonam pie 2, 450 V kritiskākām lietojumprogrammām ir jāpārbauda uzvedība.
Uzņemšanai mēs izmantosim 10k potenciometru kā sprieguma dalītāju. Uzņemšana tiks veikta kanālos ADC0 un ADC3, kuriem var piekļūt GPIO36 un GPIO39.
6. darbība: ķēde - serveris un klients
7. darbība: piekļuves punkta un servera avota kods
Paziņojumi
Es iekļauju WiFi bibliotēku un definēju dažus mainīgos.
#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 kanāls_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"; // nemainīgs SSID vai WiFi, lai piekļūtu 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 server (ports); // deklaração do objeto servidor IPAddress myIP; // deklarācija par IP variāciju
Uzstādīt ()
Šeit mēs definējam izejas tapas. Mēs iestatām kanālus vēlamajā frekvencē un iestatām PWM vērtību.
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 0
Mēs sākām sēriju, piekļuves punktu ar SSID ESP32ap un paroli. Pēc tam mēs iegūstam servera IP un sākam serveri.
Serial.begin (115200); // iniciand a a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, parole); // 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 (ports)); // mensagem server.begin (); // iniciando o servidor}
Cilpa ()
Programmā Loop pirmā lieta, ko mēs darīsim, ir klienta parauga izveidošana, savienojot un saistot ar klienta mainīgo. Pārbaudiet, vai klients ir savienots. Ja tā, mēs sākam mainīgo, kas saņems datus. Kamēr savienojums ir izveidots un dati tiek saņemti, mēs lasām mainīgā c rakstzīmes. Visbeidzot, datu mainīgajā mēs savienojam 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
Ja tiek saņemta jaunas rindas rakstzīme, datu virknē mēs meklējam rakstzīmes “,” indeksu. Mēs iegūstam apakšvirknes līdz pat komatam, un pēc tam pārvēršam tās par veselu skaitli. Mēs iestatām A un B kanālu PWM. Mēs notīrām mainīgo.
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 vai PWM do kanāls A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do kanāls B dados = ""; // Limpa a variável}}}}
Ja klients atvienojas, mēs apstiprinām savienojuma beigas. Mēs pagaidām kādu brīdi un izdrukājam “Nav pievienots klients”. Pēc tam mēs gaidām vēl vienu sekundi pirms restartēšanas.
// 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. darbība. Klienta avota kods
Paziņojumi
Mēs atkal esam iekļāvuši WiFi bibliotēku, šoreiz uz klienta. Mēs arī definējam mainīgos.
#include const char* ssid = "ESP32ap"; // SSID uz punktu 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; // Variável que receberá o valor do ciclo do PWM B WiFiClient cliente; // deklaração do objeto cliente
Uzstādīt ()
Mēs definējam GPIO kā ievadi, sākam sēriju un izveidojam savienojumu ar piekļuves punktu.
void setup () {pinMode (pin_Leitura_A, INPUT); // definēt o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // definēt o GPIO como entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}
Cilpa ()
Šajā cilpā mēs izveidosim savienojumu ar serveri, kas nozīmē otru ESP.
void loop () {// tas nav iespējams, bet pēc tam būs nepieciešams, lai gan (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, parole); kavēšanās (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 + ":" + ports + "…"); // mensagem delay (1000); }
Šajā solī, kamēr ir izveidots savienojums ar serveri, mēs izpildām mainīgos, lai saglabātu ADC0 un ADC3 nolasījumus. Mēs arī nolasījām 500 paraugus un aprēķinājām vidējos rādītājus. Mēs kartējām lasījumu, lai izveidotu pareizu servo vadības ilgumu, savienotu un nosūtītu to uz serveri.
// 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); kontadors ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = karte (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correctta para controle do servo ciclo_B = karte (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração koreta para controle do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Visbeidzot, ja nav izveidots savienojums, mēs nodrošinām savienojuma pārtraukšanu, parādot līdzvērtīgu ziņojumu.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - klienta deskonektado …"); // mensagem}
9. darbība: faili
Lejupielādējiet failus:
ES NĒ
Ieteicams:
Laika intervāla kamera, izmantojot ESP32-CAM paneli: 6 soļi
Laika intervāla kamera, izmantojot ESP32-CAM paneli: Šis projekts balstās uz iepriekšējo digitālo attēlu kameru projektu, un mēs veidojam laika intervāla kameru, izmantojot ESP32-CAM plati. Visi attēli secīgi tiek saglabāti microSD kartē, un tāfele pēc attēla uzņemšanas iet gulēt, lai palīdzētu ietaupīt
IP kamera ar sejas noteikšanu, izmantojot ESP32-CAM paneli: 5 soļi
IP kamera ar sejas noteikšanu, izmantojot ESP32-CAM dēli: Šis ziņojums atšķiras no citiem, un mēs apskatām ļoti interesanto ESP32-CAM plati, kas ir pārsteidzoši lēta (mazāk nekā 9 USD) un viegli lietojama. Mēs izveidojam vienkāršu IP kameru, ko var izmantot tiešraides video plūsmas straumēšanai, izmantojot 2
Vienkāršākā tīmekļa kamera kā drošības kamera - kustību noteikšana un e -pastā nosūtīti attēli: 4 soļi
Vienkāršākā tīmekļa kamera kā drošības kamera - kustību noteikšana un e -pastā nosūtītie attēli: jums vairs nav jālejupielādē vai jākonfigurē programmatūra, lai no jūsu tīmekļa kameras uz e -pastu saņemtu kustības noteiktus attēlus - vienkārši izmantojiet pārlūkprogrammu. Izmantojiet jaunāko pārlūkprogrammu Firefox, Chrome, Edge vai Opera operētājsistēmā Windows, Mac vai Android, lai uzņemtu attēlu
Darba sākšana ar ESP32 - ESP32 dēļu instalēšana Arduino IDE - ESP32 mirgojošs kods: 3 soļi
Darba sākšana ar ESP32 | ESP32 dēļu instalēšana Arduino IDE | ESP32 mirgošanas kods: šajā pamācībā mēs redzēsim, kā sākt strādāt ar esp32 un kā instalēt esp32 plates Arduino IDE, un mēs programēsim esp 32, lai palaistu mirgojošu kodu, izmantojot arduino ide
Tīmekļa kamera Hawkeye Brownie kamerā: 3 soļi (ar attēliem)
Tīmekļa kamera Hawkeye Brownie kamerā: Pirms dažām kodēm es žurnālā Make saskāros ar diy par tīmekļa kameras ievietošanu vecā salokāmajā kamerā, un tas bija kaut kas tuvāks tam, ko esmu mēģinājis darīt ar punktu un nošāva digicam bet es neesmu atradis ideālu lietu. Man patīk