Mündəricat:

ESP32 ilə PANTILT Kamera: 9 addım
ESP32 ilə PANTILT Kamera: 9 addım

Video: ESP32 ilə PANTILT Kamera: 9 addım

Video: ESP32 ilə PANTILT Kamera: 9 addım
Video: ESP32-S3 + Camera Module(OV2640) + LTE Module(SIM7600G-H) 2024, Iyul
Anonim
Image
Image
ESP32 ilə PANTILT Kamera
ESP32 ilə PANTILT Kamera

Bu gün bir kameranın yuxarı, aşağı və yan istiqamətlərə hərəkətini təmin edən bir cihaz olan PAN TILT -i təqdim edəcəyəm. Mən özüm bu cihazı WiFi vasitəsilə bu mexanizmi idarə etməyə imkan verən iki servo və ESP32 istifadə edərək 3D çaplı hissələr vasitəsilə istehsal etdim. ESP32 -nin AD kanallarını istifadə edərək oxuları və LED_PWM nəzarətçisini istifadə edərək analoji bir iş görək. Ayrıca, bir TCP / IP bağlantısı üzərində nəzarəti tətbiq edirik.

Videoda, başqa bir ESP32 -ə (WiFi vasitəsilə) göndərilən iki potensiometrin dəyərlərini oxuyan bir ESP32 -ə sahib olduğumu görə bilərsiniz. İki servo mühərrikə bağlıdır. Kamera, qablarda etdiyiniz nəzarətdən asılı olaraq yuxarı, aşağı və ya yan istiqamətlərdə hərəkət edir (və PAN TILT -ə bağlıdır).

PAN TILT 3D çap dizaynının bağlantısını burada tapa bilərsiniz:

Addım 1: İstifadə olunan mənbələr

İstifadə olunan mənbələr
İstifadə olunan mənbələr

• Bağlantı üçün birdən çox atlayıcı

• İki Node MCU ESP32s

• ESP32 üçün iki USB kabeli

• Nəzarət üçün WebCam

• İki nəzarət qabı

• Protoboard

• Servo üçün bir mənbə

Addım 2: NodeMCU ESP32S - Pinout

NodeMCU ESP32S - Pinout
NodeMCU ESP32S - Pinout

Addım 3: ESP32 ətraf qurğuları

ESP32 ətraf qurğuları
ESP32 ətraf qurğuları

PWM Periferik Cihazları ESP32, PWM siqnalları yarada bilən iki ətraf qurğuya malikdir. Bunlara güc və motor nəzarəti üçün nəzərdə tutulmuş Pulse Width Modulator (MCPWM) mühərriki və LED intensivliyinə nəzarət üçün hazırlanmış LED_PWM daxildir. Ancaq bunlar ümumi bir şəkildə də istifadə edilə bilər.

Konfiqurasiya edilə bilən dövrlər və iş dövrü olan 16 müstəqil PWM kanalı yarada bilən LED_PWM -dən istifadə edəcəyik. 16 bitə qədər qətnaməyə malikdir.

Addım 4: Servo Motor İdarəetmə PWM

PWM Servo Motor İdarəetmə Sistemi
PWM Servo Motor İdarəetmə Sistemi

Servo motorun idarə edilməsi, müəyyən bir tezliyə malik bir kvadratın nəbz genişliyi modulyasiyasını tənzimləməklə həyata keçirilir.

İstifadə olunan servo üçün (əksəriyyəti üçün olduğu kimi), tezlik 50Hz -dir. Ayrıca, 1 -dən 2 ms -ə qədər olan bir nəbz uzunluğu servonun açısal mövqeyini təyin edir.

Bu məlumatı idarə etmək üçün LED_PWM kanalının 0 kanalını GPIO13 -ə və kanal 1 -ni GPIO12 -ə yönləndirəcəyik.

Addım 5: Analog Capture

Analoq çəkmə
Analoq çəkmə

Periferik rəqəmsal konvertasiyaya bənzəyir

ESP32, 18-ə qədər kanalda tətbiq edilə bilən analoq-rəqəmsal çeviricilərə malikdir, ancaq yalnız analoqlu GPIO-da.

Tətbiq olunan gərginlik 0 ilə 3V aralığını keçməməlidir.

Edilən dönüşüm, nümunə götürülmüş bütün gərginliklər üçün daimi bir səhv saxlamır və bunların hamısı konfiqurasiya edilmiş diapazondan asılıdır. 2, 450V -də 150mV aralığında, daha kritik tətbiqlər üçün davranış yoxlaması tələb olunur.

Tutmaq üçün bir gərginlik bölücü olaraq 10k potansiyometrdən istifadə edəcəyik. Çəkmə GPIO36 və GPIO39 tərəfindən əldə edilə bilən ADC0 və ADC3 kanallarında aparılacaq.

Addım 6: Dövrə - Server və Müştəri

Dövrə - Server və Müştəri
Dövrə - Server və Müştəri

Addım 7: Giriş nöqtəsinin və serverin mənbə kodu

Bəyanatlar

WiFi kitabxanasını daxil edirəm və bəzi dəyişənləri təyin edirəm.

#include // biblioteca WiFi daxil olmaqla freq = 50; // PWM qurmaq tezliyi int kanal_A = 0; // nəzarət kanalları LED_PWM const int kanal_B = 1; // nəzarət kanalları LED_PWM const int çözümleri = 12; // Resolução usado yoxdur nəzarətçi LED_PWM const int pin_Atuacao_A = 13; // Kanalın kanalını açmaq 0 pin_Atuacao_B = 12; // Kanal 1 -də kanalın yenidən qurulması** ssid = "ESP32ap"; // SSID -dən istifadə etməklə ESP32 -də Wi -Fi bağlantısı yoxdur* parol = "12345678"; // konfiqurasiya yoxlanılmadıqda, konst portda heç bir şey yox idi; 2; // ciclo_A = 0 ilə əlaqəli xidmətlərin göstərilməsi; // A kanal ciclo_B = 0; // müxtəlif kanallar üçün WiFiServer serveri (port); // bəyannamə xidməti IPAddress myIP; // bəyannamə dəyişikliyi IP

Qurmaq ()

Burada çıxış sancaqlarını təyin edirik. Kanalları istədiyiniz tezliyə qoyduq və PWM dəyərini təyin etdik.

boş quraşdırma () {pinMode (pin_Atuacao_A, ÇIXIŞ); // müəyyən etmək üçün pinMode (pin_Atuacao_B, ÇIXIŞ); // müəyyən bir müddət ərzində ledcSetup (kanal_A, tezlik, həll); // Kanalın tezliyi 50 Hz və 12 bitlik ledcSetup (kanal_B, tezlik, həll); // Kanalın 1 tezliyi 50 Hz və 12 bitlik ledcAttachPin (pin_Atuacao_A, kanal_A); // kanalın yenidən yönləndirilməsi 0 üçün 13 düymə ledcAttachPin (pin_Atuacao_B, kanal_B); // yenidən kanal 1 para 12 pc 12 ledcWrite (kanal_A, ciclo_A); // ledwWrite üçün PWM 0 dəyərini təyin etmək (kanal_B, ciclo_B); // PWM para 0 -a görə cəsarət göstərin

Seriala, giriş nöqtəsinə SSID ESP32ap və parol ilə başladıq. Sonra serverin IP ünvanını alırıq və serveri işə salırıq.

Serial.begin (115200); // Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)) iniciando; // mensagem WiFi.softAP (ssid, parol); // SSID ESP32ap və ya 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // xidmətlərin göstərilməsi üçün IP -dən istifadə etməklə (bu parametrləri yoxlamaqla) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (port)); // mensagem server.begin (); // xidmətçi}

Döngü ()

Loop -da, edəcəyimiz ilk şey, müştəri yaratmaq, müştəri dəyişəninə bağlamaq və bağlamaqdır. Müştərinin bağlı olub olmadığını yoxlayın. Əgər belədirsə, məlumatları alacaq dəyişənə başlayırıq. Bağlantı qurulduqca və məlumatlar alındıqda c dəyişəninin simvollarını oxuyuruq. Nəhayət, məlumat dəyişənində c -ni birləşdiririk.

void loop () {WiFiClient cliente = server.available (); // müştəri ilə əlaqə qurun, əgər (cliente.connected ()) {// müştəri ilə əlaqə qurun String dados = ""; // Serial.println ("Cliente conectado.") ilə əlaqəli hər hansı bir dəyişiklik; // mensagem while (cliente.connected ()) {// enquanto a conexão estiver setelecida if (cliente.available ()) {// e se houver dados a charter c = cliente.read (); // leia os caracteres a variável c dados = dados + c; // bir -birindən fərqli olaraq

Yeni bir sətir xarakteri alınarsa, məlumatdakı sətirdə ',' xarakterinin indeksini axtarırıq. Alt sətirləri vergüldən dərhal əvvəl əldə edirik və sonra onları tamsayıya çeviririk. A və B kanallarının PWM -ni təyin edirik. Dəyişəni silirik.

if (c == '\ n') {// recebido int virgula = dados.indexOf (',') üçün yeni xarakter daşıyır; // satın alma xarakteri ',' ciclo_A = (dados.substring (0, virgula))). toInt (); // bir cizgi_b = dos.substring (virgula + 1, dados.length ()). toInt (); ciclo_A); // A kanalını idarə etmək üçün A ledcWrite (kanal_B, ciclo_B); // B kanalında PWM və ya kanal tənzimlənməsi = ""; // Müxtəlif ölçülüdür}}}}

Müştəri əlaqəni kəsərsə, əlaqənin bitdiyini təsdiq edirik. Bir an gözləyin və "Müştəri bağlı deyil" yazırıq. Yenidən başlamazdan əvvəl başqa bir saniyə gözləyək.

// müştəri xidməti, gecikməni təsdiq edin (50); // müştəri xidməti cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem gecikməsi (1000); // əvvəlcədən məlumat əldə et}

Addım 8: Müştəri Mənbə Kodu

Bəyanatlar

WiFi kitabxanasını yenidən müştəriyə əlavə etdik. Ayrıca, dəyişənləri təyin edirik.

#include const char* ssid = "ESP32ap"; // ESP32 const char* password = "12345678" ilə bağlı SSID yoxdur; // Şəxsi əlaqələr qurmaq üçün uint16_t port = 2; // Port char de * server = "192.168.4.1"; // xidmətlərin göstərilməsi IP pin_Leitura_A = 36; // ADC0 konfiqurasiyasından istifadə etmək üçün pin_Leitura_B = 39; // ADC3 int ciclo_A = 0 ilə işləmək üçün GPIO; // PWM -in ciclo və ya cəsarətlə dəyişməsi A ciclo_B = 0; // PWM B WiFiClient müştəri xidmətlərinin dəyərini dəyişmək; // müştəri elan edin

Qurmaq ()

GPIO -ları giriş olaraq təyin edirik, serialı işə salırıq və giriş nöqtəsinə qoşuluruq.

boş quraşdırma () {pinMode (pin_Leitura_A, INPUT); // GPIO -ya daxil olmaq üçün pinMode təyin edin (pin_Leitura_B, INPUT); // müəyyən etmək GPIO komanda daxil Serial.begin (115200); // inicia comunicação serial WiFi.begin (ssid, parol); // conecta ao ponto de acesso}

Döngü ()

Bu Döngədə, digər ESP mənasını verən serverə qoşulacağıq.

void loop () {// se não conectado ao ponto de acesso, a conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid +) "…"); // mensagem WiFi.begin (ssid, parol); gecikmə (2000); } Serial.println (String (millis ()) + " - Conectado…"); // mensagem // se não conectado ao servidor, a conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + ana + ":" + liman + "…"); // mensagem gecikməsi (1000); }

Bu addımda, serverə bağlı olaraq ADC0 və ADC3 oxunuşlarını saxlamaq üçün dəyişənləri icra edirik. Ayrıca, 500 nümunənin oxunmasını həyata keçirdik və oxunuşları ortaladıq. Oxumanı, servoların idarə edilməsi üçün düzgün müddət yaratmaq və birləşdirərək serverə göndərmək üçün xəritələdik.

// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // ADC0 -dən istifadə etməklə müxtəlif vaxtlarda istifadə edilə bilər; // ADC3 və ya amostras = 500 səviyyəsində; // 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 + analogOxu (pin_Leitura_B); kontor ++; } leitura_A = leitura_A / amostralar; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = xəritə (leitura_A, 0, 4095, 140, 490); // xəritələr və xidmətlər ciclo_B = xəritənin idarə edilməsi ilə əlaqədardır (leitura_B, 0, 4095, 140, 490); // servo və ya xidmətin idarə edilməsi üçün əsas şərtlər daxilində // müştəri xidmətlərinin birləşməsi və bağlanması (String (ciclo_A) + "," + String (ciclo_B)); }

Nəhayət, bağlı deyilsinizsə, ekvivalent mesajı göstərərək əlaqənin kəsildiyini təmin edirik.

// müştəri ilə razılaşmaq, müştəri ilə işləmək üçün zəmanət vermək cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado…"); // mensagem}

Addım 9: Fayllar

Faylları yükləyin:

PDF

MƏN YOX

Tövsiyə: