İçindekiler:
- Adım 1: Kullanılan Kaynaklar
- 2. Adım: NodeMCU ESP32S - Pin çıkışı
- 3. Adım: ESP32 Çevre Birimleri
- Adım 4: Servo Motor Kontrol PWM
- Adım 5: Analog Yakalama
- Adım 6: Devre - Sunucu ve İstemci
- Adım 7: Erişim Noktası ve Sunucunun Kaynak Kodu
- Adım 8: Müşteri Kaynak Kodu
- 9. Adım: Dosyalar
Video: ESP32'li PANTILT Kamera: 9 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Bugün bir kameranın yukarı, aşağı ve yanlara doğru hareket etmesini sağlayan bir cihaz olan PAN TILT'i tanıtacağım. Bu cihazı kendim 3D baskılı parçalarla, iki servo ve bu mekanizmayı WiFi üzerinden kontrol etmeyi mümkün kılan ESP32 kullanarak ürettim. Ardından ESP32'nin AD kanallarını kullanarak okumaları ve ayrıca LED_PWM denetleyicisini kullanarak bir analog işlemi alalım. Ayrıca kontrolü bir TCP/IP bağlantısı üzerinden uyguluyoruz.
Videoda, (WiFi üzerinden) başka bir ESP32'ye gönderilen iki potansiyometrenin değerlerini okuyan bir ESP32'ye sahip olduğumu görebilirsiniz. İki servo motora bağlıdır. Kamera, tencerelerden yaptığınız kontrole bağlı olarak yukarı, aşağı veya yan yönlerde hareket eder (ve PAN TILT'e takılıdır).
PAN TILT 3D baskı tasarımının bağlantısı burada bulunabilir:
Adım 1: Kullanılan Kaynaklar
• Bağlantı için çoklu jumperlar
• İki Düğüm MCU ESP32
• ESP32 için iki USB kablosu
• Kontrol için bir Web Kamerası
• İki kontrol kabı
• Bir protokol
• Servolar için bir kaynak
2. Adım: NodeMCU ESP32S - Pin çıkışı
3. Adım: ESP32 Çevre Birimleri
PWM Çevre Birimleri ESP32, PWM sinyalleri üretebilen iki çevre birimine sahiptir. Bunlar, güç ve motor kontrolü için tasarlanmış Darbe Genişlik Modülatörü (MCPWM) motorunu ve LED yoğunluk kontrolü için geliştirilmiş LED_PWM'yi içerir. Ancak genel anlamda da kullanılabilirler.
Yapılandırılabilir periyotlar ve çalışma döngüleri ile 16 bağımsız PWM kanalı üretebilen LED_PWM'yi kullanacağız. 16 bit çözünürlüğe sahiptir.
Adım 4: Servo Motor Kontrol PWM
Servo motor kontrolü, belirli bir frekansa sahip bir karenin darbe genişlik modülasyonunu ayarlayarak gerçekleştirilir.
Kullanılan servo için (ve çoğu için), frekans 50Hz'dir. Ayrıca 1 ila 2 ms darbe uzunluğu genişliği servonun açısal konumunu belirler.
Kontrolü gerçekleştirmek için bu bilgiyi kullanarak LED_PWM'nin 0 kanalını GPIO13'e ve kanal 1'i GPIO12'ye yönlendireceğiz.
Adım 5: Analog Yakalama
Analogdan dijitale dönüştürme çevre birimi
ESP32, 18 kanala kadar uygulanabilen, ancak yalnızca analog özellikli GPIO'larda uygulanabilen analogdan dijitale dönüştürücülere sahiptir.
Uygulanan voltaj 0 ila 3V aralığını geçmemelidir.
Gerçekleştirilen dönüştürme, örneklenen tüm voltajlar için sabit bir hata sağlamaz ve bunların tümü, yapılandırılan aralığa bağlıdır. 2, 450V'de 150mV'lik bir aralık için, daha kritik uygulamalar için bir davranış kontrolü gereklidir.
Yakalama için voltaj bölücü olarak 10k'lık bir potansiyometre kullanacağız. Yakalama, GPIO36 ve GPIO39 tarafından erişilebilen ADC0 ve ADC3 kanallarında yapılacaktır.
Adım 6: Devre - Sunucu ve İstemci
Adım 7: Erişim Noktası ve Sunucunun Kaynak Kodu
İfadeler
WiFi kütüphanesini ekliyorum ve bazı değişkenleri tanımlıyorum.
#include // biblioteca dahil WiFi const int freq = 50; //frequência do PWM const int canal_A = 0; //ana kanal kontrol cihazı LED_PWM const int canal_B = 1; //segundo canal do controlador LED_PWM const int resolucao = 12; // ABD'de kontrol cihazı yok LED_PWM const int pin_Atuacao_A = 13; //Pino para onde o kanal 0 dizi yeniden yönlendirme const int pin_Atuacao_B = 12; //Pino para onde o kanal 1 sunucu redirecionado const char* ssid = "ESP32ap"; //constante com o SSID Wi-Fi'yi ağ bağlantısına bağla ESP32 const char* şifre = "12345678"; // onaylanmadan önce onaylanmadı, bağlantı noktası yok, sabit bağlantı noktası = 2; //conexões int ciclo_A = 0; //değişken que receberá o ciclo de atuação do canal A int ciclo_B = 0; //bir WiFiSunucusu sunucusu(bağlantı noktası); // sunucu IPAdresi myIP; // IP değişkenlerini bildir
Kurmak ()
Burada çıkış pinlerini tanımlıyoruz. Kanalları istenilen frekansa ayarlayıp PWM değerini ayarlıyoruz.
void setup(){ pinMode(pin_Atuacao_A, OUTPUT); //çevrimiçi pinMode(pin_Atuacao_B, OUTPUT); //çözümleme ve güncelleme ayarları (canal_A, freq, resolucao); //Ajustando o kanal 0 para frekansı de 50 Hz ve resolução de 12bit ledcSetup(canal_B, freq, resolucao); //Ajustando o kanal 1 para frekans de 50 Hz ve resolução de 12 bit ledcAttachPin(pin_Atuacao_A, canal_A); //redirecionando o kanal 0 para o pino 13 ledcAttachPin(pin_Atuacao_B, canal_B); //redirecionando o kanal 1 para o pino 12 ledcWrite(canal_A, ciclo_A); //PWM para 0'ın değerini tanımlayın ledcWrite(canal_B, ciclo_B); // PWM para 0'ı tanımla veya valor yap
Seriyi, erişim noktasını SSID ESP32ap ve şifre ile başlattık. Daha sonra sunucunun IP'sini alıyoruz ve sunucuyu başlatıyoruz.
Seri.başla(115200); //iniciando a Serial Serial.println("Iniciando ponto de acesso: " + String(ssid)); //mensagem WiFi.softAP (ssid, şifre); // SSID ESP32ap ve senha 12345678 Serial.println("Obtendo IP"); //mensagem myIP = WiFi.softAPIP (); // IP sunucu hizmeti (yapılandırma için mevcut değil) Serial.println("IP: " + WiFi.localIP()); //mensagem Serial.println("Iniciando sunucu em: " + String(port)); //mensagem server.begin(); //iniciando veya sunucu }
Döngü ()
Loop'ta yapacağımız ilk şey, istemci değişkenine bağlanıp bağlanarak istemciyi başlatmaktır. İstemcinin bağlı olup olmadığını kontrol edin. Eğer öyleyse, verileri alacak olan değişkeni başlatıyoruz. Bağlantı kurulduğu sürece ve eğer veri alınırsa, c değişkeni için karakterleri okuruz. Son olarak, veri değişkeninde c'yi birleştiriyoruz.
void loop() { WiFiClient cliente = server.available(); // müşteri bağlantıları, değişken istemcileri ilişkilendirme if (cliente.connected()) { //bu istemci bağlantıları String dados = ""; // çok değişkenli bir değişken var. Serial.println("İstemci bağlantısı."); //mensagem while (cliente.connected()) { //enquanto bir conexão estiver estabelecida if (cliente.available()) { //e bir receber char c = cliente.read(); // leia os caracteres para a değişkeni c dados = dados + c; // değişken değişkenleri birleştirir
Bir satırsonu karakteri alınırsa, verilerdeki dizede ',' karakterinin dizinini ararız. Alt dizeleri virgülden hemen öncesine kadar alırız ve sonra onları tamsayıya dönüştürürüz. A ve B kanallarının PWM'sini ayarlıyoruz. Değişkeni temizliyoruz.
if (c == '\n') { //recebido int virgula = dados.indexOf(', '); // pelo índice do caracter ', ' na string em dados ciclo_A = (dados.substring(0, virgula))).toInt(); //bir alt dizgiyi bir alt dizgiyi bir bütünleşik ciclo_B = dados.substring(virgula + 1, dados.length()) ile elde edin; ciclo_A); //Ajusta o PWM do canal A ledcWrite(canal_B, ciclo_B); //Ajusta o PWM do canal B dados = ""; //Bir değişkeni sınırlayın } } } }
İstemcinin bağlantısı kesilirse, bağlantının sona erdiğini onaylarız. Bir an bekleriz ve "Müşteri bağlı değil" yazdırırız. Daha sonra yeniden başlatmadan önce bir saniye daha bekleriz.
// istemci ve bağlantının kaldırılması, gecikmenin onaylanması (50); //korumaya devam et cliente.stop(); Serial.println("Nenhum cliente conectado."); //menagem gecikmesi(1000); // aguarda um segundo antes de reiniciar }
Adım 8: Müşteri Kaynak Kodu
İfadeler
WiFi kütüphanesini bu sefer istemciye tekrar dahil ettik. Ayrıca değişkenleri tanımlıyoruz.
#include const char* ssid = "ESP32ap"; //SSID ponto de acesso ESP32 const char* şifre = "12345678"; //Senha para acessar o ponto de acesso const uint16_t bağlantı noktası = 2; //Bağlantı noktası, sunucu const char * ana bilgisayar = "192.168.4.1"; //endereço IP do server 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; // ciclo do PWM A int ciclo_B = 0; //PWM B WiFiClient istemcisi için geçerli olan değişkenler; // müşteriyi nesne olarak ilan et
Kurmak ()
GPIO'ları giriş olarak tanımlıyoruz, seriyi başlatıyoruz ve erişim noktasına bağlanıyoruz.
geçersiz kurulum(){ pinMode(pin_Leitura_A, INPUT); //tanımla o GPIO ortak giriş pinMode(pin_Leitura_B, INPUT); //tanımla o GPIO ortak giriş Serial.begin(115200); // bir comunicação seri WiFi.begin(ssid, şifre); //bağlantı noktası ponto de acesso }
Döngü ()
Bu Döngüde diğer ESP anlamına gelen sunucuya bağlanacağız.
void loop(){ //en bağımsız bağlantı, bağlantı noktası, geçici bağlantı while (WiFi.status() != WL_CONNECTED) { Serial.println(String(millis()) + " - WiFi bağlantısı yok " + ssid + "…"); //mensagem WiFi.begin(ssid, şifre); gecikme(2000); } Serial.println(String(millis()) + " - Conectado…"); //mensagem //bağlantısız sunucu, geçici bağlantı while (!cliente.connect(host, port)) { Serial.println(String(millis()) + " - Sunucusuz Conectando " + ana bilgisayar + ":" + bağlantı noktası + "…"); //menagem gecikmesi(1000); }
Bu adımda sunucuya bağlıyken ADC0 ve ADC3 okumalarını depolamak için değişkenleri çalıştırıyoruz. Ayrıca, 500 örneğin okumasını gerçekleştirdik ve okumaların ortalamasını aldık. Servoların kontrolü için doğru süreyi oluşturmak için okumanın haritasını çıkardık ve birleştirerek sunucuya gönderdik.
//enquanto estiver conectado ao sunucu while (cliente.connected()) { int leitura_A = 0; //değişken para armazenar a leitura do ADC0 int leitura_B = 0; //değişken para armazenar a leitura do ADC3 int amostras = 500; //número de amostras int contador = 0; //contador de amostras while (contador < amostras) { //acumua değişkenleri leituras leitura_A = leitura_A + analogRead(pin_Leitura_A); leitura_B = leitura_B + analogRead(pin_Leitura_B); contador++; } leitura_A = leitura_A / amostras; //média das leituras leitura_B = leitura_B / amostras; ciclo_A = harita(leitura_A, 0, 4095, 140, 490); //mapeia a leitura para criar a duração correta para kontrole do servo ciclo_B = map(leitura_B, 0, 4095, 140, 490); //servo için bir duraç kontrolü parasal kontrol //envia envia para o sunucu cliente.println(String(ciclo_A) + ", " + String(ciclo_B)); }
Son olarak bağlı değilse, eşdeğer mesajı görüntüleyerek bağlantının sonlandırıldığından emin oluyoruz.
//birbirine bağlı değil, müşteriye.stop(); Serial.println(String(millis()) + " - istemci desconectado…"); //mensagem }
9. Adım: Dosyalar
Dosyaları indirin:
BEN HAYIR
Önerilen:
NodeMCU'lu CCTV Kamera + Eski Dizüstü Bilgisayarın Kamera Modülü (Blynk Kullanan ve Kullanmadan): 5 Adım
NodeMCU'lu CCTV Kamera + Eski Dizüstü Bilgisayarın Kamera Modülü (Blynk Kullanan ve Kullanmadan): Merhaba arkadaşlar! Bu talimatta size eski bir dizüstü bilgisayarın kamera modülünü ve nodeMCU'yu CCTV'ye benzer bir şey yapmak için nasıl kullandığımı göstereceğim
UNICORN KAMERA - Raspberry Pi Zero W NoIR 8MP Kamera Yapısı: 7 Adım (Resimlerle)
UNICORN KAMERA - Raspberry Pi Zero W NoIR 8MP Kamera Yapısı: Pi Zero W NoIR 8MP Kamera Yapısı Bu Eğitilebilir Kitap, Kızılötesi Kamera veya Gerçekten Harika Taşınabilir Kamera veya Taşınabilir Raspberry Pi Kamera isteyen veya Sadece eğlenmek isteyen herkese yardımcı olmak için oluşturuldu, heheh . Bu en uygun fiyatlı ve yapılandırılabilir
Küçük Kamera/Video Kamera için Trekking Pole Monopodu: 4 Adım
Küçük Kamera/Video Kamera için Trekking Pole Monopodu: Yürüyüş yaparken çok fazla fotoğraf çekmeyi severim, ancak tripodum ciddi yürüyüşler için biraz ağırdır ve goril-pod tarzı tripodumun doğru noktaya gelmesi çok uzun sürer ve çok kararlı değil (daha güzel bir tane almalıydım). Bu basit k
Bir Nikon Sc-28 Ttl Kablosuna bir Pc Sync Jakı Ekleyin (Kamera Açık Flaş ve Tetik Kapalı Kamera Flaşları için Otomatik Ayarları kullanın!!): 4 Adım
Bir Nikon Sc-28 Ttl Kablosuna bir Pc Sync Jakı ekleyin (Kamerada Flaş ve Tetikleme Kapalı Kamera Flaşları için Otomatik Ayarları kullanın!!): Bu talimatta size bu sinir bozucu tescilli 3pin TTL konektörlerinden birini nasıl çıkaracağınızı göstereceğim. Nikon SC-28 kapalı kamera TTL kablosunun yan tarafına yerleştirin ve standart bir PC senkronizasyon konektörü ile değiştirin. bu, özel bir flaş kullanmanıza izin verir, s
Kızılötesi Gece Görüşlü Dijital Kamera/kamera: 17 Adım (Resimlerle)
Kızılötesi Gece Görüşlü Dijital Kamera/video kamera: Bu talimat, Discovery Kids Gece Görüşlü Video Kameranın ("gerçek kızılötesi gece görüş teknolojisi" kullanması için yanlış bir şekilde tanıtılır) GERÇEK kızılötesi gece görüşlü video kameraya nasıl dönüştürüleceğini açıklar. Bu, IR webca'ya benzer