Სარჩევი:
- ნაბიჯი 1: გამოყენებული რესურსები
- ნაბიჯი 2: NodeMCU ESP32S - Pinout
- ნაბიჯი 3: ESP32 პერიფერიული მოწყობილობები
- ნაბიჯი 4: სერვო ძრავის კონტროლი PWM
- ნაბიჯი 5: ანალოგური გადაღება
- ნაბიჯი 6: წრე - სერვერი და კლიენტი
- ნაბიჯი 7: წვდომის წერტილისა და სერვერის წყაროს კოდი
- ნაბიჯი 8: მომხმარებლის წყარო
- ნაბიჯი 9: ფაილები
ვიდეო: PANTILT კამერა ESP32– ით: 9 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:19
დღეს მე წარმოგიდგენთ PAN TILT- ს, რომელიც არის მოწყობილობა, რომელიც შესაძლებელს ხდის კამერის გადაადგილებას ზემოთ, ქვემოთ და გვერდის მიმართულებით. მე თვითონ ვაწარმოებდი ამ მოწყობილობას 3D ნაბეჭდი ნაწილების საშუალებით, ორი სერვისის და ESP32- ის გამოყენებით, რაც შესაძლებელს ხდის ამ მექანიზმის კონტროლს WiFi- ს საშუალებით. მოდით წავიკითხოთ ESP32– ის AD არხების გამოყენებით, ასევე ანალოგური ოპერაცია კონტროლერის LED_PWM გამოყენებით. ასევე, ჩვენ ვიყენებთ კონტროლს TCP / IP კავშირზე.
ვიდეოში ხედავთ, რომ მე მაქვს ESP32, რომელიც კითხულობს ორი პოტენომეტრის მნიშვნელობებს, რომლებიც იგზავნება (WiFi– ით) სხვა ESP32– ზე. ის დაკავშირებულია ორ სერვო ძრავთან. კამერა მოძრაობს (და თან ერთვის PAN TILT- ს) ზემოთ, ქვემოთ ან გვერდულად, ეს დამოკიდებულია იმაზე, თუ რა კონტროლს აკეთებთ ქოთნებში.
PAN TILT 3D ბეჭდვის დიზაინის ბმული შეგიძლიათ იხილოთ აქ:
ნაბიჯი 1: გამოყენებული რესურსები
• მრავალჯერადი მხტუნავები დასაკავშირებლად
• ორი კვანძის MCU ESP32
• ორი USB კაბელი ESP32– ისთვის
• ვებკამერა კონტროლისთვის
• ორი საკონტროლო ქოთანი
• პროტობორდი
• წყარო სერვისებისათვის
ნაბიჯი 2: NodeMCU ESP32S - Pinout
ნაბიჯი 3: ESP32 პერიფერიული მოწყობილობები
PWM პერიფერიული მოწყობილობები ESP32– ს აქვს ორი პერიფერიული მოწყობილობა, რომელსაც შეუძლია შექმნას PWM სიგნალები. ესენია პულსის სიგანის მოდულატორი (MCPWM) ძრავა, რომელიც შექმნილია სიმძლავრისა და ძრავის კონტროლისათვის და LED_PWM, შემუშავებული LED ინტენსივობის კონტროლისთვის. მაგრამ ისინი ასევე შეიძლება გამოყენებულ იქნას ზოგადი გზით.
ჩვენ გამოვიყენებთ LED_PWM- ს, რომელსაც შეუძლია შექმნას 16 დამოუკიდებელი PWM არხი კონფიგურირებადი პერიოდებითა და სამუშაო ციკლით. მას აქვს 16 -მდე ბიტიანი გარჩევადობა.
ნაბიჯი 4: სერვო ძრავის კონტროლი PWM
სერვო ძრავის კონტროლი ხორციელდება კვადრატის პულსის სიგანის მოდულაციის სპეციფიკური სიხშირით.
გამოყენებული სერვოსთვის (ისევე როგორც უმეტესობისთვის), სიხშირეა 50 ჰც. ასევე, სიგანე 1 დან 2 მმ პულსის სიგრძემდე განსაზღვრავს სერვოს კუთხის პოზიციას.
ჩვენ გავაგზავნით LED_PWM არხს 0 GPIO13– ზე და 1 არხს GPIO12– ზე, ამ ინფორმაციის გამოყენებით კონტროლის შესასრულებლად.
ნაბიჯი 5: ანალოგური გადაღება
ციფრული კონვერტაციის პერიფერიული ანალოგი
ESP32– ს აქვს ანალოგურ – ციფრულ გადამყვანები, რომელთა გამოყენება შესაძლებელია 18 – მდე არხზე, მაგრამ მხოლოდ ანალოგურ ჩართულ GPIO– ში.
გამოყენებული ძაბვა არ უნდა აღემატებოდეს 0 -დან 3V დიაპაზონს.
შესრულებული კონვერტაცია არ ინარჩუნებს მუდმივ შეცდომას შერჩეული ყველა ძაბვისთვის და ეს ყველაფერი დამოკიდებულია კონფიგურირებულ დიაპაზონზე. 150mV დიაპაზონისთვის 2, 450V, ქცევის შემოწმება საჭიროა უფრო კრიტიკული პროგრამებისთვის.
გადასაღებად ჩვენ გამოვიყენებთ 10 კ -ის პოტენომეტრს ძაბვის გამყოფად. გადაღება მოხდება არხზე ADC0 და ADC3, ხელმისაწვდომი GPIO36 და GPIO39.
ნაბიჯი 6: წრე - სერვერი და კლიენტი
ნაბიჯი 7: წვდომის წერტილისა და სერვერის წყაროს კოდი
განცხადებები
მე შევიტან WiFi ქსელის ბიბლიოთეკას და განვსაზღვრავ რამდენიმე ცვლადს.
#მოიცავს // მოიცავს ბიბლიოთეკას WiFi const int freq = 50; // სიხშირეები PWM const int canal_A = 0; // Primeiro canal do controlador LED_PWM const int canal_B = 1; // segundo canal do controlador LED_PWM const int resolutionucao = 12; // გადაწყვეტილების მიღება არ არის საჭირო კონტროლის 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"; // მუდმივი კომუნიკაცია SSID– ით WiFi– სთან ერთად 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; // ცვლადი მიმღები არხის WiFiServer სერვერი (პორტი); // გამოაცხადოს მომსახურების IPA მისამართი myIP; // დეკლარაცია da varável de IP
Აწყობა ()
აქ ჩვენ განვსაზღვრავთ გამომავალი ქინძისთავებს. ჩვენ ვაყენებთ არხებს სასურველ სიხშირეზე და ვაყენებთ PWM მნიშვნელობას.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // განსაზღვრეთ o pino de atuação como saída pinMode (pin_Atuacao_B, OUTPUT); // definindo o pino de atuação B como saída ledcSetup (canal_A, freq, resolutionucao); // Ajustando o canal 0 para frequencyência de 50 Hz e 126 ledc ledcSetup (canal_B, freq, resolutionucao); // Ajustando o canal 1 para frequencyência de 50 Hz e resolution 12 12bit ledcAttachPin (pin_Atuacao_A, canal_A); // გადამისამართება არხზე 0 ან პინო 13 ledcAttachPin (pin_Atuacao_B, canal_B); // გადამისამართება და არხი 1 პარა პინო 12 ledcWrite (canal_A, ciclo_A); // განსაზღვრეთ o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM პუნქტი 0
ჩვენ დავიწყეთ სერიალი, წვდომის წერტილი SSID ESP32ap– ით და პაროლით. ჩვენ ვიღებთ სერვერის IP მისამართს და ვიწყებთ სერვერს.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + სიმებიანი (ssid)); // mensagem WiFi.softAP (ssid, პაროლი); // ინიციატივით და წვდომის შესახებ SSID ESP32ap და 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:" + სიმებიანი (პორტი)); // mensagem server.begin (); // iniciando o servidor}
მარყუჟი ()
მარყუჟში, პირველი, რასაც ჩვენ ვაპირებთ, არის კლიენტის ინსტანცია, კლიენტის ცვლადთან დაკავშირება და შეკავშირება. შეამოწმეთ არის თუ არა კლიენტი დაკავშირებული. თუ ასეა, ჩვენ ვიწყებთ ცვლადს, რომელიც მიიღებს მონაცემებს. სანამ კავშირი დამყარდება და თუ მონაცემები მიიღება, ჩვენ ვკითხულობთ c ცვლადის სიმბოლოებს. დაბოლოს, ჩვენ ვაკავშირებთ 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 conexão estiver estabelecida if (cliente.available ()) {// e se houver dados a receiber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
თუ ახალი ხაზის სიმბოლოა მიღებული, ჩვენ ვეძებთ სიმბოლოს ინდექსს ',' სტრიქონში მონაცემებში. ჩვენ ვიღებთ ქვესტრიქონებს მძიმის წინ, შემდეგ კი მათ ვაქცევთ მთელ რიცხვს. ჩვენ ვაყენებთ PWM არხებს A და B. ჩვენ ვასუფთავებთ ცვლადს.
if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // შესყიდვა 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, ციკლო_ა); // Ajusta o PWM do canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}
თუ კლიენტი გათიშულია, ჩვენ ვადასტურებთ კავშირის დასრულებას. ჩვენ დაველოდებით ერთ წამს და ვბეჭდავთ "კლიენტი არ არის დაკავშირებული". შემდეგ ჩვენ ველოდებით კიდევ ერთ წამს, სანამ დავიწყებთ.
// კლიენტისთვის, რათა დადგინდეს, დაადასტუროს, რომ დაგვიანებულია (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // მენეჯამის დაგვიანებით (1000); // aguarda um segundo antes de reiniciar}
ნაბიჯი 8: მომხმარებლის წყარო
განცხადებები
ჩვენ კვლავ ჩავრთეთ WiFi ბიბლიოთეკა, ამჯერად კლიენტზე. ასევე, ჩვენ განვსაზღვრავთ ცვლადებს.
#მოიცავს const char* ssid = "ESP32ap"; // SSID ponto de acesso ESP32 const char* password = "12345678"; // Senha para acessar o ponto de acesso const uint16_t პორტი = 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; // vará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 კლიენტი; // დეკლარაციის გაკეთება objeto cliente
Აწყობა ()
ჩვენ განვსაზღვრავთ GPIO– ს, როგორც შეყვანას, ვიწყებთ სერიალს და ვუკავშირდებით წვდომის წერტილს.
void setup () {pinMode (pin_Leitura_A, INPUT); // განსაზღვრეთ GPIO como entrada pinMode (pin_Leitura_B, INPUT); // განსაზღვრა o GPIO como entrada Serial.begin (115200); // inicia comunicação სერიული WiFi.begin (ssid, პაროლი); // conecta ao ponto de acesso}
მარყუჟი ()
ამ მარყუჟში ჩვენ დავუკავშირდებით სერვერს, რაც ნიშნავს სხვა ESP- ს.
void loop () {// se não conectado ao ponto de acesso, tenta se conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, პაროლი); დაგვიანება (2000); } Serial.println (სიმებიანი (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 + ":" + პორტი + "…"); // მენეჯამის დაგვიანებით (1000); }
ამ ეტაპზე, სერვერთან დაკავშირებისას, ჩვენ ვასრულებთ ცვლადებს ADC0 და ADC3 კითხვის შესანახად. ასევე, ჩვენ შევასრულეთ 500 ნიმუშის კითხვა და საშუალოდ. ჩვენ დავწერეთ კითხვა, რათა შევქმნათ სერვისების კონტროლის სწორი ხანგრძლივობა და გავაერთიანოთ და გავაგზავნოთ სერვერზე.
// 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); contador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = რუკა (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controle do servo ciclo_B = რუკა (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controle do servo // concatena e envia para o servidor cliente.println (სიმებიანი (ciclo_A) + "," " + სიმებიანი (ciclo_B)); }
დაბოლოს, თუ ის არ არის დაკავშირებული, ჩვენ დარწმუნებული ვართ, რომ კავშირი შეწყდა ეკვივალენტური შეტყობინების ჩვენებით.
// რომ არ გამოჩნდეს, გარანტიას მოგცემთ საბოლოო ჯამში cliente.stop (); Serial.println (სიმებიანი (millis ()) + " - კლიენტი desconectado …"); // mensagem}
ნაბიჯი 9: ფაილები
ჩამოტვირთეთ ფაილები:
ინო
გირჩევთ:
დროის გასვლის კამერა ESP32-CAM დაფის გამოყენებით: 6 ნაბიჯი
დროის გასვლის კამერა ESP32-CAM დაფის გამოყენებით: ეს პროექტი ემყარება წინა ციფრული გამოსახულების კამერის პროექტს და ჩვენ ვაშენებთ დროის გასვლის კამერას ESP32-CAM დაფის გამოყენებით. ყველა სურათი ინახება microSD ბარათზე თანმიმდევრობით და დაფა იძინებს სურათის გადაღების შემდეგ, რათა დაზოგოს
IP კამერა სახის გამოვლენით ESP32-CAM დაფის გამოყენებით: 5 ნაბიჯი
IP კამერა სახის გამოვლენით ESP32-CAM დაფის გამოყენებით: ეს პოსტი სხვებთან შედარებით განსხვავებულია და ჩვენ გადავხედავთ ძალიან საინტერესო ESP32-CAM დაფას, რომელიც საოცრად იაფია (9 დოლარზე ნაკლები) და მარტივი გამოსაყენებლად. ჩვენ ვქმნით მარტივ IP კამერას, რომელიც შეიძლება გამოყენებულ იქნას პირდაპირი ვიდეო ნაკადის გადასაცემად 2
ციფრული გადაღებული კამერა ESP32-CAM დაფის გამოყენებით: 5 ნაბიჯი
ციფრული ფოტო კამერა ESP32-CAM დაფის გამოყენებით: ამ პოსტში ჩვენ ვისწავლით თუ როგორ უნდა ავაშენოთ ციფრული ფოტო კამერა ESP32-CAM დაფის გამოყენებით. როდესაც გადატვირთვის ღილაკს დააჭერთ, დაფა გადაიღებს სურათს, შეინახავს მას microSD ბარათზე და შემდეგ კვლავ ღრმა ძილს დაუბრუნდება. ჩვენ ვიყენებთ EEPROM- ს
ESP32-CAM კორპუსის სისტემა და 3D პრინტერის კამერა: 10 ნაბიჯი (სურათებით)
ESP32-CAM Case System და 3D Printer Cam: მე ვეძებდი კამერის შეცვლას ჩემს 3-D პრინტერზე რაღაც პატარა, მარტივი და ფუნქციონალური …. და იაფი. რამდენიმე Google ძიებამ მიმიყვანა ESP32-Cam მოდულამდე. თქვენ შეგიძლიათ იპოვოთ ისინი 10 დოლარზე ნაკლებ ფასად, ისევე როგორც ნაკლებად და ისინი მართლაც კარგად ასრულებენ
ESP32 კამერა სურათების შესვლის კლიენტი: 5 ნაბიჯი
ESP32 კამერა სურათების აღრიცხვა კლიენტი: ESP32 კამერა სურათების აღრიცხვა კლიენტის პროექტი ორიენტირებულია ESP32 მიკრო კონტროლერის გამოყენებით სურათის გადასაღებად და გაგზავნას ცენტრალურ სერვერზე ინტერნეტის საშუალებით ESP32 მოდულის WiFi შესაძლებლობების გამოყენებით. ძირითადი PCB დაფა შეიქმნა ორი ძირითადი მიზნის გათვალისწინებით: