Агуулгын хүснэгт:
- Алхам 1: Ашигласан нөөц
- Алхам 2: NodeMCU ESP32S - Pinout
- Алхам 3: ESP32 дагалдах төхөөрөмжүүд
- Алхам 4: Servo Motor Control PWM
- Алхам 5: Аналог зураг авах
- Алхам 6: Хэлхээ - Сервер ба үйлчлүүлэгч
- Алхам 7: Хандалтын цэг ба серверийн эх код
- Алхам 8: Хэрэглэгчийн эх код
- Алхам 9: Файлууд
Видео: ESP32: 9 алхамтай PANTILT камер
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Өнөөдөр би камерыг дээш, доош, хажуу тийш чиглүүлэх хөдөлгөөнийг хийх төхөөрөмж болох 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
Алхам 3: ESP32 дагалдах төхөөрөмжүүд
ХОУХ -ны нэмэлт төхөөрөмжүүд ESP32 нь ХОУХ -ны дохио үүсгэх чадвартай хоёр дагалдах төхөөрөмжтэй. Үүнд цахилгаан болон моторын хяналтанд зориулагдсан Pulse Width Modulator (MCPWM) хөдөлгүүр, LED эрчимийг хянахад зориулагдсан LED_PWM орно. Гэхдээ тэдгээрийг бас ерөнхий хэлбэрээр ашиглаж болно.
Бид LED_PWM -ийг ашиглах бөгөөд энэ нь тохируулж болох хугацаа, ажлын мөчлөг бүхий 16 бие даасан ХОУХШ -ийг бий болгох боломжтой болно. Энэ нь 16 бит хүртэлх нарийвчлалтай.
Алхам 4: Servo Motor Control PWM
Серво моторын хяналтыг тодорхой давтамжтай квадратын импульсийн өргөн модуляцийг тохируулах замаар гүйцэтгэдэг.
Ашигласан 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: Файлууд
Файлуудыг татаж авах:
INO
Зөвлөмж болгож буй:
Esp32: 9 алхамтай автомат гель спирт диспенсер
Esp32-тэй автомат гель спирт диспенсер: Заавар дээр бид бүрэн эх загварыг хэрхэн яаж хийх, esp32-тэй автомат гель спирт диспансер угсрах, алхам алхмаар угсрах, электрон хэлхээ, эх кодыг бүхэлд нь тайлбарласан болно. алхам
ST7920 128X64 LCD дэлгэц нь ESP32: 3 алхамтай
ST7920 128X64 LCD дэлгэц нь ESP32: Энэ заавар нь чанарын хувьд ямар ч шагнал авахгүй нь тодорхой байна! Энэ төслийг эхлүүлэхийн өмнө би интернетээр аялаж, энэ LCD -ийг ESP32 -тэй холбох талаар юу ч олж чадаагүй тул амжилтанд хүрсний дараа үүнийг хийх болно гэж бодсон. баримтжуулсан байх ёстой
ENV2 эсвэл бусад камер утасны камер тогтворжуулагч: 6 алхам
ENV2 эсвэл бусад камер утасны камер тогтворжуулагч: Та хэзээ нэгэн цагт видео хийхийг хүсч байсан ч танд зөвхөн камерын утас байгаа юу? Та камертай утсаараа видео хийж байсан ч түүнийгээ барьж чадахгүй байна уу? Энэ бол таны хувьд сургамжтай зүйл юм
Hawkeye Brownie камер дахь вэб камер: 3 алхам (зурагтай)
Hawkeye Brownie камер дахь вэбкамер: Хэдэн цагаан эрвээхэйн өмнө би Make сэтгүүл дээр хуучин эвхдэг камерын дотор вэбкамер байрлуулах тухай зөгнөлтэй таарч байсан бөгөөд энэ нь миний хийх гэж оролдож байсан зүйлтэй илүү ойр байсан юм. гэхдээ би үүнд тохирох төгс хэргийг олж чадаагүй байна. Би дуртай
Хэт улаан туяаны шөнийн харааны дижитал камер/камер: 17 алхам (зурагтай)
Хэт улаан туяаны шөнийн харааны дижитал камер/камер: Энэ нь Discovery Kids -ийн шөнийн харааны камерыг " жинхэнэ хэт улаан туяаны шөнийн харааны технологийг ашиглах” -г хуурамчаар сурталчилсан) бодит хэт улаан туяаны шөнийн харааны камер болгон хэрхэн хөрвүүлэх талаар тайлбарлах болно. Энэ нь IR webca -тай төстэй юм