ዝርዝር ሁኔታ:

PANTILT ካሜራ ከ ESP32: 9 ደረጃዎች ጋር
PANTILT ካሜራ ከ ESP32: 9 ደረጃዎች ጋር

ቪዲዮ: PANTILT ካሜራ ከ ESP32: 9 ደረጃዎች ጋር

ቪዲዮ: PANTILT ካሜራ ከ ESP32: 9 ደረጃዎች ጋር
ቪዲዮ: RAMPS 1.6 - Basics 2024, ህዳር
Anonim
Image
Image
PANTILT ካሜራ ከ ESP32 ጋር
PANTILT ካሜራ ከ ESP32 ጋር

ዛሬ ፣ ወደ ላይ ፣ ወደታች እና ወደ ጎን አቅጣጫዎች የካሜራ እንቅስቃሴን የሚያነቃቃ መሣሪያ የሆነውን PAN TILT ን አቀርባለሁ። እኔ ራሴ ይህንን መሣሪያ በ 3 ዲ የታተሙ ክፍሎች ፣ ሁለት ሰርቶፖችን እና ESP32 ን በመጠቀም ፣ ይህንን ዘዴ በ WiFi በኩል ለመቆጣጠር ያስችለናል። የ ESP32 ን የ AD ሰርጦችን ፣ እንዲሁም መቆጣጠሪያውን LED_PWM በመጠቀም የአናሎግ ሥራን በመጠቀም ንባቦችን እንውሰድ። እንዲሁም ፣ በ TCP / IP ግንኙነት ላይ መቆጣጠሪያውን እንተገብራለን።

በቪዲዮው ውስጥ (እኔ በ WiFi በኩል) ወደ ሌላ ESP32 የሚላኩትን የሁለቱ ፖታቲሞሜትር እሴቶችን የሚያነብ ESP32 እንዳለኝ ማየት ይችላሉ። ከሁለቱ ሰርቮ ሞተሮች ጋር ተገናኝቷል። በሸክላዎቹ በኩል በሚያደርጉት መቆጣጠሪያ ላይ በመመርኮዝ ካሜራው ወደ ላይ ፣ ወደ ታች ወይም ወደ ጎን አቅጣጫዎች (እና ከ PAN TILT ጋር ተያይ isል)።

ወደ PAN TILT 3D የህትመት ንድፍ አገናኝ እዚህ ይገኛል

ደረጃ 1 - ያገለገሉ ሀብቶች

ጥቅም ላይ የዋሉ ሀብቶች
ጥቅም ላይ የዋሉ ሀብቶች

• ለግንኙነት ብዙ ዝላይዎች

• ሁለት መስቀለኛ መንገድ MCU ESP32 ዎች

• ለ ESP32 ሁለት የዩኤስቢ ገመዶች

• ለቁጥጥር የድር ካሜራ

• ሁለት የመቆጣጠሪያ ማሰሮዎች

• ፕሮቶቦርድ

• ለ servos ምንጭ

ደረጃ 2: NodeMCU ESP32S - Pinout

NodeMCU ESP32S - Pinout
NodeMCU ESP32S - Pinout

ደረጃ 3 - ESP32 ተጓipች

ESP32 ዳርቻዎች
ESP32 ዳርቻዎች

PWM Peripherals ESP32 የ PWM ምልክቶችን የማመንጨት ችሎታ ያላቸው ሁለት ተጓipች አሉት። እነዚህ ለኃይል እና ለሞተር ቁጥጥር የተነደፈውን የ Pulse Width Modulator (MCPWM) ሞተር እና ለ LED ኃይለኛ ቁጥጥር የተገነባውን LED_PWM ያካትታሉ። ግን እነሱ በአጠቃላይ መንገድ ጥቅም ላይ ሊውሉ ይችላሉ።

ሊዋቀሩ ከሚችሉ ወቅቶች እና የስራ ዑደቶች ጋር 16 ገለልተኛ የ PWM ሰርጦችን ማፍለቅ የሚችልን LED_PWM እንጠቀማለን። እስከ 16 ቢት ጥራት አለው።

ደረጃ 4 - Servo የሞተር ቁጥጥር PWM

Servo የሞተር ቁጥጥር PWM
Servo የሞተር ቁጥጥር PWM

የ servo ሞተር መቆጣጠሪያው የሚከናወነው የአንድ የተወሰነ ካሬ ድግግሞሽ ስፋት ድግግሞሽ በማስተካከል ነው።

ጥቅም ላይ ለዋለው (እንዲሁም ለአብዛኛው) ፣ ድግግሞሹ በ 50Hz ነው። እንዲሁም ከ 1 እስከ 2ms የ pulse ርዝመት ስፋት የ servo ማዕዘኑን አቀማመጥ ይወስናል።

መቆጣጠሪያውን ለማከናወን ይህንን መረጃ በመጠቀም የ LED_PWM ሰርጥ 0 ን ወደ GPIO13 እና 1 ወደ GPIO12 እናመራለን።

ደረጃ 5 የአናሎግ ቀረፃ

የአናሎግ ቀረፃ
የአናሎግ ቀረፃ

አናሎግ ወደ ዲጂታል የመቀየሪያ ዳርቻ

ESP32 እስከ 18 ሰርጦች ውስጥ ሊተገበር የሚችል ከአናሎግ-ወደ-ዲጂታል ተለዋዋጮች አሉት ፣ ግን በአናሎግ በነቁ ጂፒኦዎች ውስጥ ብቻ።

የተተገበረው ቮልቴጅ ከ 0 እስከ 3 ቪ ክልል መብለጥ የለበትም።

የተከናወነው ልወጣ ለናሙና ለሁሉም ናሙናዎች የማያቋርጥ ስህተት አይጠብቅም ፣ እና ይሄ ሁሉም በተዋቀረው ክልል ላይ የተመሠረተ ነው። ለ 150mV ክልል በ 2 ፣ 450 ቪ ፣ ለበለጠ ወሳኝ ትግበራዎች የባህሪ ምርመራ ያስፈልጋል።

ለመያዝ ፣ እንደ የቮልቴጅ መከፋፈያ 10 ኪ ፖታቲሞሜትር እንጠቀማለን። መያዝ በ GPIO36 እና GPIO39 ተደራሽ በሆነ ሰርጥ ADC0 እና ADC3 ውስጥ ይከናወናል።

ደረጃ 6 - ወረዳ - አገልጋይ እና ደንበኛ

ወረዳ - አገልጋይ እና ደንበኛ
ወረዳ - አገልጋይ እና ደንበኛ

ደረጃ 7 - የመዳረሻ ነጥብ እና የአገልጋይ ምንጭ ኮድ

መግለጫዎች

የ WiFi ቤተ -መጽሐፍት አካትቻለሁ ፣ እና አንዳንድ ተለዋዋጮችን እገልጻለሁ።

#ያካትቱ // inclusão da biblioteca WiFi const int freq = 50; // frequência do 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 resolucao = 12; // Resolução usado no controlador 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"; // 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 receberá conexões int ciclo_A = 0; // variável que receberá o ciclo de atuação do canal A int ciclo_B = 0; // variável que receberá o ciclo de atuação do canal የ WiFi አገልጋይ አገልጋይ (ወደብ); // declaração do objeto servidor IPAddress myIP; // declaração da variável de IP

አዘገጃጀት ()

እዚህ ፣ የውጤት ፒኖችን እንገልፃለን። ሰርጦቹን ወደሚፈለገው ድግግሞሽ እናዘጋጃለን እና የ PWM እሴትን አዘጋጅተናል።

ባዶነት ማዋቀር () {pinMode (pin_Atuacao_A ፣ OUTPUT); // definindo o pino de atuação A como saída pinMode (pin_Atuacao_B ፣ OUTPUT); // definindo o pino de atuação B como saída ledcSetup (canal_A, freq, resolucao); // Ajustando o canal 0 para frequência de 50 Hz e resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o canal 1 para frequência de 50 Hz e resolução de 12bits ledcAttachPin (pin_Atuacao_A ፣ canal_A); // redirecionando o canal 0 para o pino 13 ledcAttachPin (pin_Atuacao_B ፣ canal_B); // redirecionando o canal 1 para o pino 12 ledcWrite (canal_A, ciclo_A); // የ PWM para 0 ledcWrite (canal_B ፣ ciclo_B) ጽናት ያድርጉ። // የ PWM para 0 ን ጉልህ ያድርጉት

ተከታታይ ፣ የመዳረሻ ነጥብ በ SSID ESP32ap እና በይለፍ ቃል ጀምረናል። ከዚያ የአገልጋዩን አይፒ እናገኛለን እና አገልጋዩን እንጀምራለን።

Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid ፣ የይለፍ ቃል); // 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 ወይም servidor}

ሉፕ ()

በ Loop ውስጥ ፣ እኛ መጀመሪያ የምናደርገው ደንበኛን ከደንበኛው ተለዋዋጭ ጋር ማገናኘት እና ማሰር ነው። ደንበኛው መገናኘቱን ያረጋግጡ። እንደዚያ ከሆነ ውሂቡን የሚቀበለውን ተለዋዋጭ እንጀምራለን። ግንኙነቱ እስከተመሠረተ ፣ እና መረጃ ከተቀበለ ፣ ለተለዋዋጭ ሐ ቁምፊዎችን እናነባለን። በመጨረሻም ፣ በመረጃ ተለዋዋጭ ውስጥ ሐን እናያይዛለን።

ባዶነት loop () {WiFiClient cliente = server.available (); // se u cliente conectar, 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 ሳለ (cliente.connected ()) {// enquanto a conexão estiver estabelecida if (cliente.available ()) {// e se houver dados a receber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados

አዲስ መስመር ገጸ -ባህሪ ከተቀበለ ፣ በመረጃው ውስጥ ባለው ሕብረቁምፊ ውስጥ የባህሪው ‹፣› ን ጠቋሚ እንፈልጋለን። ከኮማው በፊት እስከሚደርስ ድረስ ንዑስ ጽሑፎችን እናገኛለን ፣ ከዚያ ወደ ኢንቲጀር እንለውጣቸዋለን። የሰርጦች ሀ እና ለ PWM ን እናዘጋጃለን ተለዋዋጭውን እናጸዳለን።

ከሆነ (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // '' '' '' '' '' '' '' '' '' '' '' '' '' (''); // 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, ciclo_A); // አጁስታታ ወይም ፒኤምኤም ቦይ A ledcWrite (canal_B ፣ ciclo_B); // Ajusta o PWM ቦይ ቢ ዳዶስ = ""; // ሊምፓ አንድ variável}}}}

ደንበኛው ከተቋረጠ የግንኙነቱን መጨረሻ እናረጋግጣለን። ለአፍታ እንጠብቃለን እና “ምንም ደንበኛ አልተገናኘም” ን እናተምማለን። ከዚያ እንደገና ከመጀመርዎ በፊት ሌላ ሰከንድ እንጠብቃለን።

// caso o cliente se desconecte, confirma o fim da conexão መዘግየት (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem መዘግየት (1000); // aguarda um segundo antes de reiniciar}

ደረጃ 8 የደንበኛ ምንጭ ኮድ

መግለጫዎች

በዚህ ጊዜ በደንበኛው ላይ የ WiFi ቤተ -መጽሐፍትን እንደገና አካተናል። እንዲሁም ፣ ተለዋዋጮችን እንገልፃለን።

#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 receberá o valor do ciclo do PWM A int ciclo_B = 0; // Variável que receberá o velor do ciclo do PWM B WiFiClient cliente; // declaração do objeto cliente

አዘገጃጀት ()

ጂፒኦዎችን እንደ ግብዓት እንገልፃለን ፣ ተከታታይን እንጀምራለን እና ከመዳረሻ ነጥብ ጋር እንገናኝ።

ባዶነት ማዋቀር () {pinMode (pin_Leitura_A ፣ INPUT) ፤ // GPIO como entrada pinMode (pin_Leitura_B ፣ INPUT) ይግለጹ; // ይግለጹ የ GPIO como entrada Serial.begin (115200); // inicia a comunicação ተከታታይ WiFi.begin (ssid ፣ የይለፍ ቃል); // conecta ao ponto de acesso}

ሉፕ ()

በዚህ Loop ውስጥ ከአገልጋዩ ጋር እንገናኛለን ፣ ማለትም ሌላውን ESP ማለት ነው።

ባዶነት loop () {// se não conectado ao ponto de acesso, tena se conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid ፣ የይለፍ ቃል); መዘግየት (2000); } Serial.println (ሕብረቁምፊ (ሚሊስ ()) + " - 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 ናሙናዎችን ንባብ አከናውነናል እና ንባቦቹን አማካኝ አድርገናል። ለ servos ቁጥጥር ትክክለኛውን የቆይታ ጊዜ ለመፍጠር ንባቡን ካርታ አድርገናል ፣ እና አጣምረን ወደ አገልጋዩ እንልካለን።

// enquanto estiver conectado ao servidor ሳለ (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 ሳለ (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 = 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 (ሕብረቁምፊ (ciclo_A) + "," + String (ciclo_B)); }

በመጨረሻም ፣ ካልተገናኘ ፣ ተመጣጣኝ መልዕክቱን በማሳየት ግንኙነቱ መቋረጡን እናረጋግጣለን።

// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (ሕብረቁምፊ (ሚሊስ ()) + " - ደንበኛ desconectado …"); // mensagem}

ደረጃ 9 - ፋይሎች

ፋይሎቹን ያውርዱ ፦

ፒዲኤፍ

INO

የሚመከር: