Mündəricat:
- Addım 1: İstifadə olunan mənbələr
- Addım 2: NodeMCU ESP32S - Pinout
- Addım 3: ESP32 ətraf qurğuları
- Addım 4: Servo Motor İdarəetmə PWM
- Addım 5: Analog Capture
- Addım 6: Dövrə - Server və Müştəri
- Addım 7: Giriş nöqtəsinin və serverin mənbə kodu
- Addım 8: Müştəri Mənbə Kodu
- Addım 9: Fayllar
Video: ESP32 ilə PANTILT Kamera: 9 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
• 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
Addım 3: 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
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
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
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:
MƏN YOX
Tövsiyə:
Uno ilə ESP8266 WeMos D1 R1 Wifi Prosessoru istifadə edərək ESP32-Cam ilə Şəkillər çəkin və göndərin: 7 addım
Uno ilə ESP8266 WeMos D1 R1 Wifi Prosessorundan istifadə edərək ESP32-Kamera ilə Şəkillər çəkin və göndərin: Uno ilə ESP8266 WeMos D1 R1 WiFI Prosessoru istifadə edərək ESP32-Cam (OV2640) istifadə edərək şəkil çəkin və e-poçtla göndərin, Google Diskə qeyd edin və göndərin Twilio istifadə edən Whatsapp.Tələblər: Uno ilə ESP8266 WeMos D1 R1 WiFI Prosessoru (https: // protosupplies
MicroPython ilə SSD1306 Oled ilə ESP32 Arayüzü: 5 addım
MicroPython ilə SSD1306 Oled ilə ESP32 Arayüzü: Micropython, pythonun optimallaşdırdığı və kiçik bir piton izidir. Yaddaş məhdudiyyətləri və aşağı enerji istehlakı olan quraşdırılmış cihaz üçün qurulması nəzərdə tutulmuşdur
ESP32 ilə PWM - Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: 6 addım
ESP32 ilə PWM | Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: Bu təlimatlarda Arduino IDE istifadə edərək ESP32 ilə PWM siqnallarının necə yaradılacağını görəcəyik. PWM əsasən hər hansı bir MCU -dan analoq çıxışı yaratmaq üçün istifadə olunur və bu analog çıxış 0V ilə 3.3V arasında ola bilər (esp32 vəziyyətində) & dan
ESP32 ilə işə başlayın - Arduino IDE -də ESP32 lövhələrinin quraşdırılması - ESP32 Blink Kodu: 3 addım
ESP32 ilə işə başlayın | Arduino IDE -də ESP32 lövhələrinin quraşdırılması | ESP32 Blink Kodu: Bu təlimatlarda esp32 ilə işləməyə necə başlayacağımızı və esp32 lövhələrini Arduino IDE -yə necə quracağımızı görəcəyik və arduino ide istifadə edərək yanıb -sönmə kodunu işə salmaq üçün esp 32 -ni proqramlaşdıracağıq
Bir veb kamera ilə bir kamera qur: 6 addım
Bir veb kamerası ilə bir kamera yaradın: Salam mənim adım Sebastian və bu mənim ilk təlimatımdır, İngilis dilim pisdir, buna görə də tərcüməçi mümkün olan ən yaxşısını qoymaq üçün istifadə edəcək, sonra mod və ya admin onu artıq təşəkkür edərək düzəldə bilərsə çox sağolun! Bu layihə üçün yaxşıyıq