Mundarija:
- 1 -qadam: Ishlatilgan manbalar
- 2 -qadam: NodeMCU ESP32S - Pinout
- 3 -qadam: ESP32 tashqi qurilmalari
- 4 -qadam: Servo dvigatelni boshqarish PWM
- 5 -qadam: Analog tasvirni olish
- 6 -qadam: O'chirish - server va mijoz
- 7 -qadam: Kirish nuqtasi va serverning manba kodi
- 8 -qadam: Mijoz kodi
- 9 -qadam: fayllar
Video: ESP32: 9 qadamli PANTILT kamera
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Bugun men PAN TILT ni taqdim etaman, bu kamera yuqoriga, pastga va yon tomonga harakatlanishini ta'minlaydigan qurilma. Men o'zim bu qurilmani 3D bosilgan qismlar orqali ishlab chiqdim, ikkita servo va ESP32 yordamida, bu mexanizmni WiFi orqali boshqarishga imkon beradi. Keling, ESP32 ning AD kanallari yordamida o'qishni, shuningdek LED_PWM tekshirgichi yordamida analog operatsiyalarni olaylik. Shuningdek, biz TCP / IP ulanishini boshqaramiz.
Videoda siz ESP32 -da ikkita potentsiometrning qiymatlarini o'qiyotganini ko'rishingiz mumkin, ular (WiFi orqali) boshqa ESP32 -ga yuboriladi. U ikkita servo dvigatelga ulangan. Kamera idishlar orqali boshqarishingizga qarab yuqoriga, pastga yoki yonga siljiydi (va PAN TILTga biriktirilgan).
PAN TILT 3D bosma dizayniga havolani bu erda topish mumkin:
1 -qadam: Ishlatilgan manbalar
• Ulanish uchun bir nechta o'tish moslamalari
• Ikki tugunli MCU ESP32
• ESP32 uchun ikkita USB kabeli
• nazorat qilish uchun veb -kamera
• Ikkita boshqaruv idishi
• Protoboard
• Servo uchun manba
2 -qadam: NodeMCU ESP32S - Pinout
3 -qadam: ESP32 tashqi qurilmalari
PWM tashqi qurilmalari ESP32 PWM signallarini ishlab chiqarishga qodir ikkita tashqi qurilmaga ega. Bularga kuch va motorni boshqarish uchun mo'ljallangan Pulse Width Modulator (MCPWM) dvigateli va LED intensivligini boshqarish uchun ishlab chiqilgan LED_PWM kiradi. Lekin ular ham umumiy usulda ishlatilishi mumkin.
Biz LED_PWM -dan foydalanamiz, u konfiguratsiya qilinadigan davrlar va ish tsikllari bilan 16 ta mustaqil PWM kanalini yaratishi mumkin. U 16 bitgacha piksellar soniga ega.
4 -qadam: Servo dvigatelni boshqarish PWM
Servo dvigatelni boshqarish ma'lum chastotali kvadratning impuls kengligi modulyatsiyasini sozlash orqali amalga oshiriladi.
Ishlatiladigan servo uchun (ko'pchilik uchun bo'lgani kabi), chastota 50 Gts. Bundan tashqari, 1 dan 2 ms gacha bo'lgan puls uzunligi kengligi servoning burchak holatini aniqlaydi.
Biz nazorat qilish uchun ushbu ma'lumotdan foydalanib, LED_PWM ning 0 -kanalini GPIO13 ga va 1 -kanalini GPIO12 ga yo'naltiramiz.
5 -qadam: Analog tasvirni olish
Periferik raqamli konvertatsiyaga o'xshash
ESP32 analog-raqamli konvertorlarga ega, ularni 18 kanalgacha ishlatish mumkin, lekin faqat analogli GPIOlarda.
Qo'llaniladigan kuchlanish 0 dan 3V gacha bo'lishi kerak.
Amalga oshirilgan konvertatsiya tanlangan barcha kuchlanishlar uchun doimiy xatolikni saqlamaydi va bularning barchasi tuzilgan diapazonga bog'liq. 2, 450V kuchlanishdagi 150mV diapazoni uchun muhimroq ilovalar uchun xatti -harakatni tekshirish talab qilinadi.
Qo'lga olish uchun biz kuchlanish taqsimlagichi sifatida 10k potentsiometrdan foydalanamiz. Suratga olish GPIO36 va GPIO39 orqali kirish mumkin bo'lgan ADC0 va ADC3 kanallarida amalga oshiriladi.
6 -qadam: O'chirish - server va mijoz
7 -qadam: Kirish nuqtasi va serverning manba kodi
Bayonotlar
Men WiFi kutubxonasini o'z ichiga olaman va ba'zi o'zgaruvchilarni aniqlayman.
#include // inclusão da biblioteca WiFi const int freq = 50; // PWM const int kanal_A = 0 chastotasi; // kanalni nazorat qilish LED_PWM const int kanal_B = 1; // kanalni nazorat qilish LED_PWM const int resolucao = 12; // LED_PWM konfiguratsiyasi yo'q pin_Atuacao_A = 13; // Kanalni o'chirib qo'yish 0 raqamini o'zgartiradi, pin_Atuacao_B = 12; // Kanalning 1 -bandini o'zgartirish kerak* ssid = "ESP32ap"; // doimiy SSID yoki Wi -Fi tarmog'iga ulanish ESP32 const char* password = "12345678"; // konfirmachão de conexão no ponto de acesso const int port = 2; // port caflo_A = 0; // variável que receptberá o ciclo de atuação do kanal A int ciclo_B = 0; // WiFiServer serveri (port); // deklaratsiya qilish kerak IPAddress myIP; // IP -ni e'lon qilish
Sozlash ()
Bu erda biz chiqish pinlarini aniqlaymiz. Biz kanallarni kerakli chastotaga o'rnatamiz va PWM qiymatini o'rnatamiz.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // aniq belgilash uchun pinMode (pin_Atuacao_B, OUTPUT); // lcSetup (kanal_A, chastotalar, rezolyutsiyalar); // Kanal sozlamalari 50 gigagertsli chastotalar va 12 bitli ledcSetup (kanal_B, chastota, rezolyutsiya); // Kanalning 1 chastotali chastotasi 50 Hz va 12 bitli ledcAttachPin (pin_Atuacao_A, kanal_A); // kanalni qayta yo'naltirish 0 para 13 pc ledcAttachPin (pin_Atuacao_B, channel_B); // kanalni qayta yo'naltirish 1 para o pino 12 ledcWrite (channel_A, ciclo_A); // PWM para 0 ledcWrite (kanal_B, ciclo_B) ni aniqlang; // PWM uchun 0 qiymatini aniqlang
Biz ketma -ket, kirish nuqtasini SSID ESP32ap va parol bilan boshladik. Keyin biz serverning IP -manzilini olamiz va serverni ishga tushiramiz.
Serial.begin (115200); // Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)) iniciando; // mensagem WiFi.softAP (ssid, parol); // SSID ESP32ap va boshqa 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // IP -ni yoki xizmatni ko'rsatish (serverni sozlash) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (port)); // mensagem server.begin (); // xizmat ko'rsatuvchi}
Loop ()
Loop -da, biz qilmoqchi bo'lgan birinchi narsa, mijoz o'zgaruvchisiga ulanish va ulanish uchun mijozni ishga tushirishdir. Mijoz ulanganligini tekshiring. Agar shunday bo'lsa, biz ma'lumotlarni oladigan o'zgaruvchini ishga tushiramiz. Aloqa o'rnatilguncha va agar ma'lumotlar qabul qilinsa, biz c o'zgaruvchining belgilarini o'qiymiz. Nihoyat, biz ma'lumotlar o'zgaruvchisida c ni birlashtiramiz.
void loop () {WiFiClient cliente = server.available (); // mijozlar bir -biriga mos kelsa, associe a variável cliente if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // Serial.println ("Cliente conectado.") ni tanlashda; // mensagem while (cliente.connected ()) {// enquanto a conexão estiver setelecida if (cliente.available ()) {// e c houver dados a qabul qiluvchi char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // bir -biriga mos kelmaydigan dadalar
Agar yangi qatorli belgi olinsa, biz ma'lumotlar satridan ',' belgisining indeksini qidiramiz. Biz pastki satrlarni vergul oldidan oldik va keyin ularni butun songa aylantiramiz. Biz A va B kanallarining PWM -ni o'rnatamiz. O'zgaruvchini tozalaymiz.
if (c == '\ n') {// se na carova de nova linha for recebido int virgula = dados.indexOf (','); // buyrug'ini bajaring ',' 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 (); ciclo_A); // LWWite kanalini sozlash uchun PWM (kanal_B, ciclo_B); // B kanalidagi PWM yoki kanalni sozlash = ""; // Limfa varianti}}}}
Agar mijoz uzilsa, biz ulanish tugaganligini tasdiqlaymiz. Biz biroz kutamiz va "Mijoz ulanmagan" ni chop etamiz. Qayta boshlashdan oldin yana bir soniya kutamiz.
// caso o cliente se desconecte, Confirma o fim da conexão delay (50); // mijoz momenti mijozga.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem kechikishi (1000); // bir necha kun oldin
8 -qadam: Mijoz kodi
Bayonotlar
Biz WiFi kutubxonasini yana qo'shdik, bu safar mijoz. Bundan tashqari, biz o'zgaruvchilarni aniqlaymiz.
#includ char const* ssid = "ESP32ap"; // ESP32 const char* password = "12345678" SSID -ni ochish shart emas; // Siz ochishingiz mumkin emas, lekin uess16_t port = 2; // Port of escuta do servidor const char * host = "192.168.4.1"; // IP -xizmatlar uchun xizmat ko'rsatish const pin_Leitura_A = 36; // ADC0 konfiguratsiyasining GPIO -si pin_Leitura_B = 39; // ADC3 int ciclo_A = 0 ga teng GPIO; // o'zgaruvchan PWMni bajarishga majburlash A int ciclo_B = 0; // PWM B WiFiClient mijozlari uchun har xil narxlar; // mijozlar uchun e'lon qilish
Sozlash ()
Biz GPIO -ni kirish sifatida belgilaymiz, ketma -ketlikni ishga tushiramiz va kirish nuqtasiga ulanamiz.
void setup () {pinMode (pin_Leitura_A, INPUT); // GPIO -ga kirishni aniqlash pinMode (pin_Leitura_B, INPUT); // aniqlash GPIO como entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, parol); // conecta ao ponto de acesso}
Loop ()
Ushbu Loopda biz serverga ulanamiz, ya'ni boshqa ESP.
void loop () {// se não conectado ao ponto de acesso, a con conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid +) "…"); // mensagem WiFi.begin (ssid, parol); kechikish (2000); } Serial.println (String (millis ()) + " - Conectado…"); // mensagem // se não conectado ao servidor, a con conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":") + port + "…"); // mensagem kechikishi (1000); }
Ushbu bosqichda, serverga ulanganimizda, biz ADC0 va ADC3 o'qilishini saqlash uchun o'zgaruvchilarni bajaramiz. Shuningdek, biz 500 ta namunani o'qib chiqdik va o'qishni o'rtacha qildik. Biz servolarni boshqarish uchun to'g'ri vaqtni yaratish va uni birlashtirish va serverga yuborish uchun o'qishni xaritaga kiritdik.
// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // ADC0 inte leitura_B = 0 uchun turli xil variantlar; // ADC3 int amostras = 500 ga teng; // 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); kontor ++; } leitura_A = leitura_A / amostralar; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = xarita (leitura_A, 0, 4095, 140, 490); // mapeia a leitura va ciclo_B = servo ciclo_B = xaritada nazorat qilish (leitura_B, 0, 4095, 140, 490); // xaritalar va xizmatlar uchun xizmatlar ro'yxati // mijozlar uchun mijozlar.println (String (ciclo_A) + "," + String (ciclo_B)); }
Nihoyat, agar ulanmagan bo'lsa, biz unga mos keladigan xabarni ko'rsatish orqali aloqaning uzilganligini ta'minlaymiz.
// mijozlar bilan ishlashni yakunlash uchun kafolat berish; Serial.println (String (millis ()) + " - mijoz desconectado…"); // mensagem}
9 -qadam: fayllar
Fayllarni yuklab oling:
INO
Tavsiya:
Esp32: 9 qadamli avtomatik gel spirtli dispenseri
Esp32 bilan avtomatik alkogolli dispenser: Qo'llanmada biz qanday qilib to'liq prototipni yasashni, esp32 bilan avtomatik jel spirtli dispenserni yig'ishni ko'rib chiqamiz. qadam
ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq
ATtiny13 va WS2812 bilan 1 dollarlik LED kayfiyatli chiroq: Bu to'rtta rejimga ega past narxli ruhiy chiroq. Kamalak uchquni. Yorug'lik uchquni vaqti -vaqti bilan yuqoriga qarab harakat qiladi va asta -sekin rangni o'zgartiradi.2. Kamalakning porlashi. Rangni asta -sekin o'zgartiradigan barqaror porlash. Sham yoqish simulyatsiyasi.4. O'chirilgan. Siz
MadMapper & Teensy 3.2: 14 qadamli klub yoritish tizimi
MadMapper & Teensy 3.2 bilan klubni yoritish tizimi: 2018 yilda men o'z uyushmasim bilan birgalikda Falastindagi Ramallahda bo'lib o'tadigan Yangi yil kechasi uchun bu kam byudjetli klub yoritish tizimining birinchi versiyasini yaratdim. maqola. Tizim WS2812 ga asoslangan edi
28BYJ-48 5V qadamli dvigatel va A4988 drayveri: 4 qadam
28BYJ-48 5V qadamli dvigatel va A4988 haydovchisi: Siz hech qachon Arduino yoki micro: bit-ning bir nechta chiqishidan foydalanib, robotni aniq burchakka burilishni xohlaganmisiz? Bularning barchasi arzonmi? Bu sizga ko'rsatma! Bu yo'riqnomada biz juda arzon pog'onali dvigatelni qanday ishlatishni bilib olamiz
3 ta tugmachali 28BYJ-48 qadamli dvigateldan qanday foydalanish kerak: 5 qadam
3 ta tugmachali 28BYJ-48 qadamli dvigateldan qanday foydalanish kerak: Bosqichli dvigatelni tugmalar yordamida boshqarishni xohlaysizmi? Bu soat yo'nalishi bo'yicha, soat miliga teskari va keyin to'xtatish funktsiyasini bajarishi mumkinmi? Keyin bu video siz uchun