Агуулгын хүснэгт:

ESP32: 9 алхамтай PANTILT камер
ESP32: 9 алхамтай PANTILT камер

Видео: ESP32: 9 алхамтай PANTILT камер

Видео: ESP32: 9 алхамтай PANTILT камер
Видео: ESP32-S3 + Camera Module(OV2640) + LTE Module(SIM7600G-H) 2024, Долдугаар сарын
Anonim
Image
Image
ESP32 бүхий PANTILT камер
ESP32 бүхий PANTILT камер

Өнөөдөр би камерыг дээш, доош, хажуу тийш чиглүүлэх хөдөлгөөнийг хийх төхөөрөмж болох PAN TILT -ийг танилцуулах болно. Би өөрөө энэ төхөөрөмжийг 3D хэвлэсэн эд ангиудаар хоёр servo болон ESP32 ашиглан үйлдвэрлэсэн бөгөөд энэ нь WiFi -ээр дамжуулан энэ механизмыг удирдах боломжийг олгодог. Дараа нь ESP32 -ийн AD сувгууд болон LED_PWM хянагч ашиглан аналог үйлдлийг ашиглан уншиж үзье. Түүнчлэн, бид TCP / IP холболтын хяналтыг ашигладаг.

Видео бичлэг дээр та өөр ESP32 руу (WiFi -ээр) илгээгддэг хоёр потенциометрийн утгыг уншдаг ESP32 програмтай болохыг харж болно. Энэ нь хоёр servo мотортой холбогдсон байна. Камер нь саванд хийх хяналтаас хамааран дээш, доош эсвэл хажуу тийш хөдөлдөг (мөн PAN TILT -т залгагдсан байдаг).

PAN TILT 3D хэвлэх дизайны линкийг эндээс авах боломжтой:

Алхам 1: Ашигласан нөөц

Ашигласан нөөц
Ашигласан нөөц

• Холбох олон холбогч

• Хоёр зангилаа MCU ESP32s

• ESP32 -д зориулсан хоёр USB кабель

• Хяналтын зориулалттай вэб камер

• Хоёр хяналтын сав

• Протобор

• Сервогийн эх сурвалж

Алхам 2: NodeMCU ESP32S - Pinout

NodeMCU ESP32S - Pinout
NodeMCU ESP32S - Pinout

Алхам 3: ESP32 дагалдах төхөөрөмжүүд

ESP32 дагалдах төхөөрөмжүүд
ESP32 дагалдах төхөөрөмжүүд

ХОУХ -ны нэмэлт төхөөрөмжүүд ESP32 нь ХОУХ -ны дохио үүсгэх чадвартай хоёр дагалдах төхөөрөмжтэй. Үүнд цахилгаан болон моторын хяналтанд зориулагдсан Pulse Width Modulator (MCPWM) хөдөлгүүр, LED эрчимийг хянахад зориулагдсан LED_PWM орно. Гэхдээ тэдгээрийг бас ерөнхий хэлбэрээр ашиглаж болно.

Бид LED_PWM -ийг ашиглах бөгөөд энэ нь тохируулж болох хугацаа, ажлын мөчлөг бүхий 16 бие даасан ХОУХШ -ийг бий болгох боломжтой болно. Энэ нь 16 бит хүртэлх нарийвчлалтай.

Алхам 4: Servo Motor Control PWM

Servo моторын хяналтын ХОУХ
Servo моторын хяналтын ХОУХ

Серво моторын хяналтыг тодорхой давтамжтай квадратын импульсийн өргөн модуляцийг тохируулах замаар гүйцэтгэдэг.

Ашигласан servo -ийн хувьд (мөн ихэнх тохиолдолд) давтамж нь 50 Гц байна. Мөн 1 -ээс 2 мс хүртэл импульсийн урт нь servo -ийн өнцгийн байрлалыг тодорхойлдог.

Бид энэхүү мэдээллийг ашиглан LED_PWM -ийн 0 сувгийг GPIO13 руу, 1 сувгийг GPIO12 руу чиглүүлэх болно.

Алхам 5: Аналог зураг авах

Аналог зураг авах
Аналог зураг авах

Дижитал хөрвүүлэх захын аналог

ESP32 нь аналоги-тоон хөрвүүлэгчтэй бөгөөд үүнийг 18 хүртэлх сувагт ашиглах боломжтой боловч зөвхөн аналог идэвхжүүлсэн GPIO-д ашиглах боломжтой.

Ашигласан хүчдэл нь 0 -ээс 3V хүртэл байх ёсгүй.

Гүйцэтгэсэн хөрвүүлэлт нь дээж авсан бүх хүчдэлийн хувьд тогтмол алдаа гаргадаггүй бөгөөд энэ нь тохируулсан мужаас хамаарна. 2, 450 В -ийн 150 мВ -ийн хувьд илүү чухал програмуудын хувьд зан төлөвийг шалгах шаардлагатай.

Барихын тулд бид хүчдэл хуваагч болгон 10k потенциометрийг ашиглах болно. Зургийг GPIO36 ба GPIO39 -ээр нэвтрэх боломжтой ADC0 ба ADC3 суваг дээр хийх болно.

Алхам 6: Хэлхээ - Сервер ба үйлчлүүлэгч

Хэлхээ - Сервер ба үйлчлүүлэгч
Хэлхээ - Сервер ба үйлчлүүлэгч

Алхам 7: Хандалтын цэг ба серверийн эх код

Мэдэгдэл

Би WiFi номын санг агуулдаг бөгөөд зарим хувьсагчийг тодорхойлдог.

#include // inclusão da biblioteca WiFi const int int freq = 50; // PWM const int kanal_A = 0 давтамж; // primeiro channel do controlador LED_PWM const int canal_B = 1; // хяналтын суваг LED_PWM const int шийдэл = 12; // Хяналт байхгүй LED_PWM const int pin_Atuacao_A = 13; // Pino para onde o o kanal 0 seri redirecionado const int pin_Atuacao_B = 12; // Суурь 1 суваг дахин чиглүүлэх боломжтой char* ssid = "ESP32ap"; // SSID хийх эсвэл Wi -Fi ашиглах нь ESP32 const char* password = "12345678"; // senha para Confirmação de conexão no ponto de acesso const int port = 2; // cclo_A = 0 гэсэн үндсэн дарааллаар хүлээн авах боломжтой; // variável que receptberá o ciclo de atuação do channel A int ciclo_B = 0; // variável que receptberá o ciclo de atuação do a WiFiServer сервер (порт); // Deklaração do objeto servidor IPAddress myIP; // IP -ийн мэдэгдэл

Тохируулах ()

Энд бид гаралтын тээглүүрийг тодорхойлдог. Бид сувгуудыг хүссэн давтамж руу тохируулж, ХОУХШ -ийн утгыг тохируулна.

хүчингүй тохиргоо () {pinMode (pin_Atuacao_A, OUTPUT); // тодорхойлолт эсвэл тайлбар хийх PinMode (pin_Atuacao_B, OUTPUT); // тодорхойлолт эсвэл тайлбарыг зааж өгөв B como saída ledcSetup (channel_A, freq, resolutionucao); // Ajustando o channel 0 para chastência de 50 Hz e resolutionuchão de 12bits ledcSetup (channel_B, freq, resolutionucao); // Ajustando o channel 1 -ийн давтамж 50 Hz ба 12bits ledcAttachPin (pin_Atuacao_A, channel_A); // дахин чиглүүлэх суваг 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, channel_B); // дахин чиглүүлэх суваг 1 para o pino 12 ledcWrite (channel_A, ciclo_A); // PWM para 0 ledcWrite (kanal_B, ciclo_B); // PWM 0 -ийн үнэ цэнийг тодорхойлно уу

Бид SSID ESP32ap, нууц үг ашиглан нэвтрэх цэг, нэвтрэх цэгийг эхлүүлсэн. Дараа нь бид серверийн IP хаягийг олж аваад серверээ эхлүүлнэ.

Цуваа.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, нууц үг); // SSID ESP32ap e senha 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // IP -г ашиглах (серверийн тохиргоо хийх) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (порт)); // mensagem server.begin (); // индиандо эсвэл сервидор}

Гогцоо ()

Loop дээр бидний хийх хамгийн эхний зүйл бол үйлчлүүлэгчийг үүсгэх, үйлчлүүлэгчийн хувьсагчтай холбох, холбох явдал юм. Үйлчлүүлэгч холбогдсон эсэхийг шалгаарай. Хэрэв тийм бол бид өгөгдлийг хүлээн авах хувьсагчийг эхлүүлнэ. Холбоо тогтоогдож, хэрэв өгөгдөл хүлээн авбал бид c хувьсагчийн тэмдэгтүүдийг уншдаг. Эцэст нь бид өгөгдлийн хувьсагч дахь c -ийг холбоно.

void loop () {WiFiClient cliente = server.available (); // se Client conectar, associe a variável cliente if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // inicia a variável que takeberá os dados Serial.println ("Cliente conectado."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver setelecida if (cliente.available ()) {// e se houver dados a receptber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados

Хэрэв шинэ мөрийн тэмдэгт хүлээн авбал бид өгөгдлийн мөрөөс ',' тэмдэгтийн индексийг хайна. Бид дэд мөрүүдийг таслалаас өмнөхөн авдаг бөгөөд дараа нь тэдгээрийг бүхэл тоо болгон хөрвүүлдэг. Бид A ба B сувгийн ХОУХ -ийг тохируулдаг. Хувьсагчийг арилгадаг.

if (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // procure 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 (); ciclo_A); // AWA эсвэл PWM хийх суваг A ledcWrite (channel_B, ciclo_B); // ХБХ -ийн суваг B babos = ""; // Нэмэлт хувилбар}}}}

Хэрэв үйлчлүүлэгч салгавал бид холболтын төгсгөлийг баталгаажуулна. Бид хэсэг хүлээгээд "Үйлчлүүлэгч холбогдоогүй байна" гэж хэвлэнэ. Дараа нь дахин асаахаасаа өмнө дахиад нэг секунд хүлээнэ үү.

// caso o cliente se desconecte, Confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem саатал (1000); // aguarda um segundo antes de reiniciar}

Алхам 8: Хэрэглэгчийн эх код

Мэдэгдэл

Бид энэ удаа үйлчлүүлэгчид WiFi номын санг дахин орууллаа. Түүнчлэн, бид хувьсагчдыг тодорхойлдог.

#includ char const* ssid = "ESP32ap"; // SSID хийхгүй байх нь 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 хийх servidor const int pin_Leitura_A = 36; // GPIO нь ADC0 const int pin_Leitura_B = 39; // ADC3 int ciclo_A = 0 гэсэн GPIO програмууд; // variável que receptberá o valor do ciclo do PWM A int ciclo_B = 0; // PWM B WiFiClient -ийн үйлчлүүлэгчдийн сонголтууд; // үйлчлүүлэгчийг тунхаглах

Тохируулах ()

Бид GPIO -ийг оролт гэж тодорхойлж, цувралыг эхлүүлж, хандалтын цэг рүү холбогддог.

хүчингүй тохиргоо () {pinMode (pin_Leitura_A, INPUT); // тодорхойлох o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // тодорхойлох o GPIO como entrada Serial.begin (115200); // inicia a comunicação цуваа WiFi.begin (ssid, нууц үг); // conecta ao ponto de acesso}

Гогцоо ()

Энэхүү Loop дээр бид бусад 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 (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 + ":" + порт + "…"); // mensagem саатал (1000); }

Энэ үе шатанд сервертэй холбогдохдоо ADC0 ба ADC3 -ийн уншилтыг хадгалах хувьсагчдыг ажиллуулдаг. Мөн бид 500 дээжийн уншлага хийж, уншилтыг дунджаар хийсэн. Бид servo -уудыг хянах зөв хугацааг бий болгохын тулд уншилтыг нэгтгэж, сервер рүү илгээнэ үү.

// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // ADC0 int leitura_B = 0; // 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 / амостра; // 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 = map (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 (String (ciclo_A) + "," + String (ciclo_B)); }

Эцэст нь хэрэв холбогдоогүй бол түүнтэй тэнцэх мессежийг харуулснаар холболт тасарсан эсэхийг баталгаажуулна.

// se não coonectado, баталгаат хугацаа дуусах хүртэл cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado…"); // mensagem}

Алхам 9: Файлууд

Файлуудыг татаж авах:

PDF

INO

Зөвлөмж болгож буй: