Talaan ng mga Nilalaman:
- Hakbang 1: Ginamit na Mga Mapagkukunan
- Hakbang 2: NodeMCU ESP32S - Pinout
- Hakbang 3: ESP32 Peripherals
- Hakbang 4: Servo Motor Control PWM
- Hakbang 5: Makuha ng Analog
- Hakbang 6: Circuit - Server at Client
- Hakbang 7: Source Code ng Access Point at Server
- Hakbang 8: Code ng Pinagmulan ng Customer
- Hakbang 9: Mga File
Video: PANTILT Camera Na May ESP32: 9 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Ngayon, ipapakita ko ang PAN TILT, na isang aparato na nagbibigay-daan sa paggalaw ng isang camera para sa mga direksyon ng pataas, pababa, at sa mga gilid. Ako mismo ang gumawa ng aparatong ito sa pamamagitan ng mga naka-print na bahagi ng 3D, gamit ang dalawang servos at ang ESP32, na ginagawang posible upang makontrol ang mekanismong ito sa pamamagitan ng WiFi. Pagkatapos ay kumuha tayo ng mga pagbabasa gamit ang mga AD channel ng ESP32, pati na rin ang isang analog na operasyon gamit ang LED_PWM ng controller. Gayundin, inilalapat namin ang kontrol sa isang koneksyon sa TCP / IP.
Sa video, makikita mo na mayroon akong isang ESP32 na nagbabasa ng mga halaga ng dalawang potentiometers, na ipinadala (sa pamamagitan ng WiFi) sa isa pang ESP32. Ito ay konektado sa dalawang servo motor. Gumagalaw ang camera (at nakakabit sa PAN TILT) sa mga direksyon ng pataas, pababa, o patagilid, depende sa kontrol na iyong ginagawa sa mga kaldero.
Ang link sa disenyo ng print na PAN TILT 3D ay matatagpuan dito:
Hakbang 1: Ginamit na Mga Mapagkukunan
• Maramihang mga jumper para sa koneksyon
• Dalawang Node MCU ESP32s
• Dalawang mga USB cable para sa ESP32
• Isang WebCam para sa kontrol
• Dalawang mga palayok na kontrol
• Isang protoboard
• Isang mapagkukunan para sa mga servo
Hakbang 2: NodeMCU ESP32S - Pinout
Hakbang 3: ESP32 Peripherals
PWM Peripherals Ang ESP32 ay may dalawang mga peripheral na may kakayahang bumuo ng mga signal ng PWM. Kasama rito ang makina ng Pulse Width Modulator (MCPWM) na dinisenyo para sa kontrol ng kuryente at motor, at ang LED_PWM, na binuo para sa kontrol ng intensidad ng LED. Ngunit maaari din silang magamit sa isang generic na paraan.
Gagamitin namin ang LED_PWM, na maaaring makabuo ng 16 mga independiyenteng PWM channel na may mga configure na panahon at mga cycle ng trabaho. Mayroon itong hanggang sa 16 piraso ng resolusyon.
Hakbang 4: Servo Motor Control PWM
Ang kontrol ng servo motor ay ginaganap sa pamamagitan ng pag-aayos ng pulso lapad na modulasyon ng isang parisukat na may tiyak na dalas.
Para sa ginamit na servo (pati na rin para sa karamihan), ang dalas ay nasa 50Hz. Gayundin, ang isang lapad ng 1 hanggang 2ms haba ng pulso ay tumutukoy sa angular na posisyon ng servo.
Ire-ruta namin ang channel 0 ng LED_PWM sa GPIO13, at ang channel 1 sa GPIO12, gamit ang impormasyong ito upang maisagawa ang kontrol.
Hakbang 5: Makuha ng Analog
Analog sa digital conversion peripheral
Ang ESP32 ay may mga analogue-to-digital converter na maaaring mailapat hanggang sa 18 mga channel, ngunit sa mga GPIO na pinapagana ng analog.
Ang inilapat na boltahe ay hindi dapat lumagpas sa saklaw na 0 hanggang 3V.
Ang ginawang conversion ay hindi nagpapanatili ng isang pare-pareho na error para sa lahat ng mga voltages na naka-sample, at ang lahat ay nakasalalay sa naka-configure na saklaw. Para sa isang saklaw na 150mV sa 2, 450V, kinakailangan ng isang tseke sa pag-uugali para sa mas kritikal na mga aplikasyon.
Para sa pagkuha, gagamit kami ng potentiometer na 10k bilang isang divider ng boltahe. Ang pagkuha ay magagawa sa channel ADC0 at ADC3, maa-access ng GPIO36 at GPIO39.
Hakbang 6: Circuit - Server at Client
Hakbang 7: Source Code ng Access Point at Server
Mga Pahayag
Isinasama ko ang WiFi library, at tinutukoy ko ang ilang mga variable.
#include // 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á as 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 Isang WiFiServer server (port); // declaração do objeto servidor IPAddress myIP; // declaração da variável de IP
Pag-setup ()
Dito, tinutukoy namin ang mga output pin. Itinakda namin ang mga channel sa nais na dalas at itinakda ang halagang PWM.
void setup () {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 sa mga oras ng 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); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Sinimulan namin ang serial, access point gamit ang SSID ESP32ap, at password. Pagkatapos makuha namin ang IP ng server at simulan ang server.
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, password); // 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}
Loop ()
Sa Loop, ang unang bagay na gagawin namin ay i-instantiate ang client, kumokonekta at nagbubuklod sa variable ng client. Suriin kung nakakonekta ang kliyente. Kung gayon, sinisimulan namin ang variable na makakatanggap ng data. Hangga't ang koneksyon ay itinatag, at kung ang data ay natanggap, binabasa namin ang mga character para sa variable c. Panghuli, pinagsama namin ang c sa variable ng data.
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 habang (cliente.connected ()) {// enquanto a conexão estiver establelecida if (cliente.available ()) {// e se houver maging a receber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Kung natanggap ang isang bagong character na character, hahanapin namin ang index ng character na ',' sa string sa data. Nakukuha namin ang mga substring hanggang sa kanan bago ang kuwit, at pagkatapos ay i-convert namin ang mga ito sa integer. Itinakda namin ang PWM ng mga channel A at B. Nilinaw namin ang variable.
kung (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 convertta para inteiro ciclo_B = dados.substring (virgula + 1, dijadikan.length ()). toInt (); // obtenha a substring após a vírgula e convertta para inteiro ledcWrite (canal_A, ciclo_A); // Ajusta o PWM gawin ang kanal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}
Kung magdiskonekta ang kliyente, kumpirmahin namin ang pagtatapos ng koneksyon. Naghihintay kami para sa isang sandali at i-print ang "Walang client na konektado". Naghihintay kami pagkatapos ng isa pang segundo bago muling simulan.
// caso o cliente se desconecte, confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // pagkaantala ng mensagem (1000); // aguarda um segundo antes de reiniciar}
Hakbang 8: Code ng Pinagmulan ng Customer
Mga Pahayag
Isinama namin muli ang library ng WiFi, sa oras na ito sa client. Gayundin, tinutukoy namin ang mga variable.
# isama ang 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 valor do ciclo do PWM B WiFiClient cliente; // declaração do objeto cliente
Pag-setup ()
Tinutukoy namin ang mga GPIO bilang input, simulan ang serial, at kumonekta sa access point.
void setup () {pinMode (pin_Leitura_A, INPUT); // tukuyin o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // tukuyin o GPIO como entrada Serial.begin (115200); // inicia isang comunicação serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}
Loop ()
Sa Loop na ito, kumokonekta kami sa server, nangangahulugang ang iba pang ESP.
void loop () {// se não conectado ao ponto de acesso, tenta se conectar habang (WiFi.status ()! = WL_CONNected) {Serial.println (String (millis ()) + "- Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, password); pagkaantala (2000); } Serial.println (String (millis ()) + "- Conectado…"); // mensagem // se não conectado ao servidor, tenta se conectar habang (! cliente.connect (host, port)) {Serial.println (String (millis ()) + "- Conectando no Servidor" + host + ":" + port + "…"); // pagkaantala ng mensagem (1000); }
Sa hakbang na ito, habang nakakonekta sa server, isinasagawa namin ang mga variable upang maimbak ang pagbabasa ng ADC0 at ADC3. Gayundin, gumanap kami ng pagbabasa ng 500 mga sample at na-average ang mga pagbasa. Na-map namin ang pagbabasa upang lumikha ng tamang tagal para sa kontrol ng mga servo, at pagsamahin at ipadala ito sa server.
// enquanto estiver conectado ao servidor habang (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 habang (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 = mapa (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)); }
Panghuli, kung hindi nakakonekta, tinitiyak namin na ang koneksyon ay natapos sa pamamagitan ng pagpapakita ng katumbas na mensahe.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + "- cliente desconectado…"); // mensagem}
Hakbang 9: Mga File
I-download ang mga file:
INO
Inirerekumendang:
Robot Car Na May Bluetooth, Camera at MIT App Inventor2: 12 Mga Hakbang (na may Mga Larawan)
Robot Car With Bluetooth, Camera and MIT App Inventor2: Nais mo bang bumuo ng iyong sariling robot car? Kaya … ito ang iyong pagkakataon !! Sa Instructable na ito, lalakad kita sa kung paano gumawa ng isang Robot Car na kinokontrol sa pamamagitan ng Bluetooth at MIT App Inventor2. Magkaroon ng kamalayan na ako ay isang newbie at na ito ang aking unang instuc
Ang Laser Pointer na naka-mount sa spectacle para sa Mga Taong May Mga Kapansanan sa Locomotor: 9 Mga Hakbang (na may Mga Larawan)
Ang Laser Pointer na naka-mount sa spectacle para sa Mga Taong May Kapansanan sa Locomotor: Ang mga taong may malubhang mga kapansanan sa lokomotor tulad ng mga sanhi ng cerebral palsy ay madalas na may mga kumplikadong pangangailangan sa komunikasyon. Maaaring kailanganin silang gumamit ng mga board na may alpabeto o karaniwang ginagamit na mga salitang nakalimbag sa kanila upang makatulong sa komunikasyon. Gayunpaman, marami
RasbperryPi Car Na May FPV Camera. Kontrol sa pamamagitan ng Web Browser: 31 Mga Hakbang (na may Mga Larawan)
RasbperryPi Car Na May FPV Camera. Kontrol sa pamamagitan ng Web Browser: Kami ay magtatayo ng 4wd kotse - ang pagpipiloto ay magiging katulad tulad ng sa isang tangke - upang iikot ang isang gilid ng gulong ay paikutin na may iba't ibang bilis kaysa sa iba. Sa kotse ay ilalagay ang camera sa espesyal na may-ari kung saan maaari naming baguhin ang posisyon ng camera. Ang robot ay magiging c
ZYBO OV7670 Camera Na May Pan / tilt Control: 39 Mga Hakbang (na may Mga Larawan)
ZYBO OV7670 Camera With Pan / tilt Control: Magsimula sa unang hakbang para sa detalye sa paglikha lamang ng isang 2-axis servo PWM controller. Magsimula sa napakalaking block diagram (Hakbang 19) para sa buong proyekto. Ginamit namin ang pag-setup ng Camera + Pan / ikiling: https://www.amazon.com/gp/product/B013JF9GCAThe PmodCON3 mula sa Digilent wa
Kumuha ng Kamangha-manghang Mga Litrato ng Macro Sa Anumang Camera Camera Camera Lalo na ang isang IPhone: 6 na Hakbang
Kumuha ng Mga Kamangha-manghang Mga Litrato ng Macro Sa Anumang Camera Camera Camera … Lalo na ang isang iPhone: Kailanman nais na makakuha ng isa sa mga kamangha-manghang mga larawan na malapit … ang isa na nagsasabing … WOW!? … gamit ang isang camera phone camera na mas kaunti !? Talaga, ito ay isang addon ng pagpapalaki para sa anumang camera phone camera upang mapalaki ang iyong umiiral na lens ng camera upang magawa