Mục lục:
- Bước 1: Tài nguyên được sử dụng
- Bước 2: NodeMCU ESP32S - Sơ đồ chân
- Bước 3: Thiết bị ngoại vi ESP32
- Bước 4: Điều khiển động cơ Servo PWM
- Bước 5: Chụp tương tự
- Bước 6: Mạch - Máy chủ và Máy khách
- Bước 7: Mã nguồn của Điểm truy cập và Máy chủ
- Bước 8: Mã nguồn khách hàng
- Bước 9: Tập tin
Video: Máy ảnh PANTILT với ESP32: 9 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Hôm nay, tôi sẽ giới thiệu PAN TILT, là một thiết bị cho phép di chuyển máy ảnh theo các hướng lên, xuống và sang hai bên. Bản thân tôi đã sản xuất thiết bị này thông qua các bộ phận được in 3D, sử dụng hai servos và ESP32, giúp điều khiển cơ chế này thông qua WiFi. Sau đó, chúng ta hãy đọc các bài đọc bằng cách sử dụng các kênh AD của ESP32, cũng như hoạt động tương tự bằng cách sử dụng bộ điều khiển LED_PWM. Ngoài ra, chúng tôi áp dụng kiểm soát kết nối TCP / IP.
Trong video, bạn có thể thấy rằng tôi có một ESP32 đọc giá trị của hai chiết áp, được gửi (qua WiFi) đến một ESP32 khác. Nó được kết nối với hai động cơ servo. Máy ảnh di chuyển (và được gắn vào PAN TILT) theo hướng lên, xuống hoặc sang ngang, tùy thuộc vào điều khiển bạn thực hiện qua các chậu.
Liên kết đến thiết kế in 3D PAN TILT có thể được tìm thấy tại đây:
Bước 1: Tài nguyên được sử dụng
• Nhiều jumper để kết nối
• Hai Node MCU ESP32s
• Hai cáp USB cho ESP32
• Một WebCam để kiểm soát
• Hai bình điều khiển
• Một tấm bảng
• Một nguồn cho các servos
Bước 2: NodeMCU ESP32S - Sơ đồ chân
Bước 3: Thiết bị ngoại vi ESP32
Thiết bị ngoại vi PWM ESP32 có hai thiết bị ngoại vi có khả năng tạo ra tín hiệu PWM. Chúng bao gồm động cơ Bộ điều biến độ rộng xung (MCPWM) được thiết kế để điều khiển công suất và động cơ, và LED_PWM, được phát triển để điều khiển cường độ LED. Nhưng chúng cũng có thể được sử dụng một cách chung chung.
Chúng tôi sẽ sử dụng LED_PWM, có thể tạo ra 16 kênh PWM độc lập với các khoảng thời gian và chu kỳ làm việc có thể định cấu hình. Nó có độ phân giải lên đến 16 bit.
Bước 4: Điều khiển động cơ Servo PWM
Điều khiển động cơ servo được thực hiện bằng cách điều chỉnh điều chế độ rộng xung của một hình vuông với tần số cụ thể.
Đối với servo được sử dụng (cũng như hầu hết), tần số là 50Hz. Ngoài ra, chiều rộng xung từ 1 đến 2ms xác định vị trí góc của servo.
Chúng tôi sẽ định tuyến kênh 0 của LED_PWM đến GPIO13 và kênh 1 đến GPIO12, sử dụng thông tin này để thực hiện điều khiển.
Bước 5: Chụp tương tự
Thiết bị ngoại vi chuyển đổi tương tự sang kỹ thuật số
ESP32 có bộ chuyển đổi tương tự sang kỹ thuật số có thể được áp dụng trong tối đa 18 kênh, nhưng chỉ trong các GPIO hỗ trợ tương tự.
Điện áp đặt vào không được vượt quá dải 0 đến 3V.
Quá trình chuyển đổi được thực hiện không duy trì lỗi liên tục đối với tất cả các điện áp được lấy mẫu và tất cả điều này phụ thuộc vào dải được định cấu hình. Đối với dải 150mV ở 2, 450V, cần kiểm tra hành vi đối với các ứng dụng quan trọng hơn.
Để chụp, chúng tôi sẽ sử dụng một chiết áp 10k làm bộ chia điện áp. Việc thu thập sẽ được thực hiện trong kênh ADC0 và ADC3, có thể truy cập bằng GPIO36 và GPIO39.
Bước 6: Mạch - Máy chủ và Máy khách
Bước 7: Mã nguồn của Điểm truy cập và Máy chủ
Các câu lệnh
Tôi bao gồm thư viện WiFi và tôi xác định một số biến.
#include // inclusão da biblioteca WiFi const int freq = 50; // thường xuyên làm PWM const int channel_A = 0; // kênh primeiro do controlador LED_PWM const int channel_B = 1; // kênh segundo do controlador LED_PWM const int Resolutionucao = 12; // Resolução usado không có controlador LED_PWM const int pin_Atuacao_A = 13; // Pino para onde o channel 0 será redirecionado const int pin_Atuacao_B = 12; // Pino para onde o channel 1 será redirecionado const char * ssid = "ESP32ap"; // Constante com o SSID do WiFi do ponto de acesso 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 Reberá as conexões int ciclo_A = 0; // variável que Collectberá o ciclo de atuação do kênh A int ciclo_B = 0; // variável que Collectberá o ciclo de atuação do kênh Một máy chủ WiFiServer (cổng); // khai báo do objeto servidor IPAddress myIP; // statementaração da variável de IP
Cài đặt ()
Ở đây, chúng tôi xác định các chân đầu ra. Chúng tôi đặt các kênh ở tần số mong muốn và đặt giá trị PWM.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // định nghĩa o pino de atuação A como saída pinMode (pin_Atuacao_B, OUTPUT); // định nghĩa o pino de atuação B como saída ledcSetup (channel_A, freq, Resolutionucao); // Ajustando o kênh 0 para thường xuyên sangcia de 50 Hz e Resolutionução de 12bits ledcSetup (channel_B, freq, Resolutionucao); // Ajustando o kênh 1 para thường xuyên sangcia de 50 Hz e Resolutionução de 12bits ledcAttachPin (pin_Atuacao_A, kênh_A); // redirecionando o kênh 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, kênh_B); // redirecionando o kênh 1 para o pino 12 ledcWrite (kênh_A, ciclo_A); // Defndo o valor do PWM para 0 ledcWrite (channel_B, ciclo_B); // Defndo o valor do PWM para 0
Chúng tôi đã bắt đầu nối tiếp, điểm truy cập với SSID ESP32ap và mật khẩu. Sau đó chúng tôi lấy IP của máy chủ và khởi động máy chủ.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, mật khẩu); // iniciando o ponto de acesso com SSID ESP32ap e 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:" + String (port)); // mensagem server.begin (); // iniciando o servidor}
Vòng ()
Trong Loop, điều đầu tiên chúng ta sẽ làm là khởi tạo máy khách, kết nối và ràng buộc với biến máy khách. Kiểm tra xem máy khách đã được kết nối chưa. Nếu vậy, chúng tôi bắt đầu biến sẽ nhận dữ liệu. Miễn là kết nối được thiết lập và nếu dữ liệu được nhận, chúng tôi đọc các ký tự cho biến c. Cuối cùng, chúng ta nối c trong biến dữ liệu.
void loop () {WiFiClient cliente = server.available (); // se um cliente conectar, liên kết một cliente variável if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // inicia a variável que Recberá os dados Serial.println ("Cliente conectado."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver settingelecida if (cliente.available ()) {// e se houver dados a Collectber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Nếu một ký tự dòng mới được nhận, chúng tôi tìm kiếm chỉ mục của ký tự ',' trong chuỗi trong dữ liệu. Chúng tôi nhận được các chuỗi con cho đến ngay trước dấu phẩy, và sau đó chúng tôi chuyển đổi chúng thành số nguyên. Chúng tôi đặt PWM của kênh A và B. Chúng tôi xóa biến.
if (c == '\ n') {// se um caracter de nova linha for Rebido int virgula = dados.indexOf (','); // mua pelo índice do caracter ',' na string em dados ciclo_A = (dados.substring (0, virgula)). toInt (); // obtenha một chuỗi con até antes da vírgula e convertta para inteiro ciclo_B = dados.substring (virgula + 1, dados.length ()). toInt (); // obtenha một chuỗi con após một vírgula e convertta para inteiro ledcWrite (channel_A, ciclo_A); // Ajusta o PWM do channel A ledcWrite (channel_B, ciclo_B); // Ajusta o PWM do kênh B dados = ""; // Limpa a variável}}}}
Nếu máy khách ngắt kết nối, chúng tôi xác nhận việc kết thúc kết nối. Chúng tôi đợi trong giây lát và in "Không có máy khách kết nối". Sau đó chúng tôi đợi thêm một giây trước khi khởi động lại.
// caso o cliente se desconecte, confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem delay (1000); // aguarda um segundo antes de reiniciar}
Bước 8: Mã nguồn khách hàng
Các câu lệnh
Chúng tôi đã đưa vào thư viện WiFi một lần nữa, lần này là trên máy khách. Ngoài ra, chúng tôi xác định các biến.
#include const char * ssid = "ESP32ap"; // SSID do ponto de acesso ESP32 const char * password = "12345678"; // Senha para acessar o ponto de acesso const uint16_t port = 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; // variável que Collectberá o valor do ciclo do PWM A int ciclo_B = 0; // Variável que Collectberá o valor do ciclo do PWM B WiFiClient cliente; // statementaração do objeto cliente
Cài đặt ()
Chúng tôi xác định các GPIO là đầu vào, bắt đầu nối tiếp và kết nối với điểm truy cập.
void setup () {pinMode (pin_Leitura_A, INPUT); // định nghĩa o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // định nghĩa o GPIO como entrada Serial.begin (115200); // inicia a comunicação nối tiếp WiFi.begin (ssid, mật khẩu); // nóncta ao ponto de acesso}
Vòng ()
Trong Vòng lặp này, chúng tôi sẽ kết nối với máy chủ, nghĩa là ESP khác.
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, mật khẩu); chậm trễ (2000); } Serial.println (String (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 + ":" + cổng + "…"); // mensagem delay (1000); }
Trong bước này, trong khi kết nối với máy chủ, chúng tôi thực thi các biến để lưu trữ việc đọc ADC0 và ADC3. Ngoài ra, chúng tôi thực hiện đọc 500 mẫu và lấy trung bình các bài đọc. Chúng tôi đã ánh xạ việc đọc để tạo ra thời lượng chính xác cho việc kiểm soát các servos, đồng thời nối và gửi nó đến máy chủ.
// 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 = map (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controlle do servo ciclo_B = map (leitura_B, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controlle do servo // concatena e envia para o servidor cliente.println (String (ciclo_A) + "," + String (ciclo_B)); }
Cuối cùng, nếu không được kết nối, chúng tôi đảm bảo rằng kết nối đã bị ngắt bằng cách hiển thị thông báo tương đương.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + "- cliente desconectado…"); // mensagem}
Bước 9: Tập tin
Tải xuống các tệp:
NS
Đề xuất:
Chỉnh sửa ảnh nhanh chóng và tuyệt vời với Picasa: 10 bước (với ảnh)
Chỉnh sửa ảnh nhanh chóng và tuyệt vời với Picasa: Với một máy ảnh kỹ thuật số tuyệt vời, trách nhiệm lớn là quản lý hàng nghìn bức ảnh. Điều này có thể là một khó khăn, đặc biệt nếu bạn muốn sử dụng chúng để ghi lại một quy trình cho Các tài liệu hướng dẫn. Tôi biết cách sử dụng Photoshop, nhưng thường xuyên hơn là tôi chuyển sang sử dụng G
Làm giá đỡ cho máy ảnh DSLR với giá chưa đến 6 đô la bằng cách sử dụng ống PVC (Chân máy / Chân máy cho mọi máy ảnh): 6 bước
Làm giá đỡ cho máy ảnh DSLR với giá chưa đến 6 đô la bằng cách sử dụng ống PVC (Monopod / chân máy cho mọi máy ảnh): Có …. Bạn có thể tự làm giá đỡ chỉ với một số ống PVC và chữ T. Nó rất nhẹ … Nó được cân bằng hoàn hảo … Nó rắn chắc … Nó thân thiện với khả năng tùy chỉnh … Tôi là Sooraj Bagal và tôi sẽ chia sẻ kinh nghiệm của mình về giá đỡ máy ảnh này mà tôi đã tạo cho
Tự làm miếng đệm làm mát máy tính xách tay - Hack cuộc sống tuyệt vời với quạt CPU - Ý tưởng sáng tạo - Quạt máy tính: 12 bước (có hình ảnh)
Tự làm miếng đệm làm mát máy tính xách tay | Hack cuộc sống tuyệt vời với quạt CPU | Ý tưởng sáng tạo | Fan máy tính: Bạn cần xem video này cho đến khi kết thúc. để hiểu video
Chụp những bức ảnh macro tuyệt vời với bất kỳ máy ảnh camera nào của điện thoại Đặc biệt là iPhone: 6 bước
Chụp những bức ảnh macro tuyệt vời với bất kỳ máy ảnh camera nào của điện thoại … Đặc biệt là iPhone: Bạn đã từng muốn có được một trong những bức ảnh cận cảnh tuyệt vời đó … bức ảnh nói rằng … WOW !? … với một chiếc máy ảnh camera điện thoại không hơn không kém !? Về cơ bản, đây là một tiện ích bổ sung cho bất kỳ máy ảnh điện thoại nào để phóng đại ống kính máy ảnh hiện có của bạn để chụp
Làm thế nào để xây dựng một cấp độ máy ảnh tăng sáng cho máy ảnh DSLR: 4 bước (với Hình ảnh)
Làm thế nào để xây dựng mức độ sáng của máy ảnh cho máy ảnh DSLR: Bạn đã bao giờ chụp trong điều kiện ánh sáng yếu và nhận thấy ảnh của mình bị lệch chưa? Vâng, tôi chắc chắn có! Gần đây, tôi đã làm rất nhiều việc với việc chụp ảnh phơi sáng lâu và khi tôi ra ngoài thực địa bằng cách sử dụng gorillapod, tôi thấy mình rất mệt