Cov txheej txheem:
- Kauj Ruam 1: Cov Khoom Siv
- Kauj Ruam 2: NodeMCU ESP32S - Pinout
- Kauj Ruam 3: ESP32 Cov Khoom Siv Hluav Taws Xob
- Kauj Ruam 4: Servo Motor Control PWM
- Kauj ruam 5: Analog Capture
- Kauj Ruam 6: Circuit - Server thiab Client
- Kauj Ruam 7: Tus lej Code ntawm Access Point thiab Server
- Kauj Ruam 8: Cov Neeg Siv Khoom Code
- Kauj ruam 9: Cov ntaub ntawv
Video: PANTILT Lub Koob Yees Duab Nrog ESP32: 9 Cov Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:27
Hnub no, kuv yuav nthuav qhia lub PAN TILT, uas yog lub cuab yeej uas tso cai txav lub koob yees duab rau cov lus qhia ntawm nce, nqis, thiab mus rau ob sab. Kuv tus kheej tau tsim cov cuab yeej no dhau los ntawm 3D luam tawm ntu, siv ob lub servos thiab ESP32, uas ua rau nws muaj peev xwm tswj tau cov txheej txheem no los ntawm WiFi. Cia peb tom qab nyeem ntawv siv AD raws ntawm ESP32, nrog rau kev ua haujlwm sib piv siv tus tswj LED_PWM. Tsis tas li, peb thov tswj hwm kev sib txuas TCP / IP.
Hauv cov vis dis aus, koj tuaj yeem pom tias kuv muaj ESP32 nyeem qhov tseem ceeb ntawm ob lub zog loj, uas tau xa (ntawm WiFi) mus rau lwm ESP32. Nws txuas nrog ob lub cav servo. Lub koob yees duab txav mus (thiab txuas nrog PAN TILT) hauv cov lus qhia ntawm nce, nqis, lossis ib sab, nyob ntawm qhov kev tswj hwm koj ua los ntawm lub lauj kaub.
Qhov txuas rau PAN TILT 3D luam ntawv tsim tuaj yeem pom ntawm no:
Kauj Ruam 1: Cov Khoom Siv
• Ntau tus dhia rau kev sib txuas
• Ob Qhov ntawm MCU ESP32s
• Ob txoj hlua USB rau ESP32
• WebCam rau kev tswj hwm
• Ob lub lauj kaub tswj
• Tus tiv thaiv kab thaiv
• Ib qhov chaw rau servos
Kauj Ruam 2: NodeMCU ESP32S - Pinout
Kauj Ruam 3: ESP32 Cov Khoom Siv Hluav Taws Xob
PWM Peripherals ESP32 muaj ob lub tshuab muaj peev xwm tsim cov cim PWM. Cov no suav nrog Pulse Width Modulator (MCPWM) lub cav tsim los rau kev tswj hwm lub zog thiab lub cev muaj zog, thiab LED_PWM, tsim los rau LED tswj kev siv. Tab sis lawv kuj tseem tuaj yeem siv rau hauv txoj kev dav.
Peb yuav siv LED_PWM, uas tuaj yeem tsim 16 txoj kev ywj pheej PWM raws nrog lub sijhawm teeb tsa thiab ua haujlwm mus los. Nws muaj txog 16 qhov kev daws teeb meem.
Kauj Ruam 4: Servo Motor Control PWM
Kev tswj hwm lub cav servo yog ua los ntawm kev kho cov mem tes dav kev hloov pauv ntawm ib lub xwmfab nrog qhov tshwj xeeb.
Rau kev siv servo (nrog rau feem ntau), zaus yog 50Hz. Tsis tas li, qhov dav ntawm 1 txog 2ms mem tes ntev txiav txim siab txoj haujlwm angular ntawm servo.
Peb yuav xa cov channel 0 ntawm LED_PWM mus rau GPIO13, thiab channel 1 mus rau GPIO12, siv cov ntaub ntawv no los ua tus tswj.
Kauj ruam 5: Analog Capture
Analog to digital conversion peripheral
ESP32 muaj cov hloov pauv sib piv-rau-digital uas tuaj yeem siv tau txog li 18 txoj hauv kev, tab sis tsuas yog hauv analog-enabled GPIOs.
Qhov ntsuas hluav taws xob yuav tsum tsis pub dhau 0 txog 3V ntau.
Kev hloov pauv tau ua tsis tswj hwm qhov yuam kev tas li rau txhua qhov ntsuas hluav taws xob, thiab txhua yam no nyob ntawm qhov teeb tsa ntau yam. Rau thaj tsam ntawm 150mV ntawm 2, 450V, yuav tsum tau kuaj tus cwj pwm rau cov ntawv thov tseem ceeb dua.
Rau kev ntes, peb yuav siv lub hwj chim ntawm 10k ua qhov faib hluav taws xob. Kev ntes yuav ua tiav hauv channel ADC0 thiab ADC3, nkag tau los ntawm GPIO36 thiab GPIO39.
Kauj Ruam 6: Circuit - Server thiab Client
Kauj Ruam 7: Tus lej Code ntawm Access Point thiab Server
Cov nqe lus
Kuv suav nrog lub tsev qiv ntawv WiFi, thiab kuv txhais qee qhov txawv.
#include // suav nrog hauv phau ntawv sau npe 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 channel 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 kwj dej 0 será redirecionado const int pin_Atuacao_B = 12; // Pino para onde o kwj dej 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 chaw nres nkoj = 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 A WiFiServer server (chaw nres nkoj); // tshaj tawm objeto servidor IPAddress myIP; // tshaj tawm thiab hloov pauv IP
Teeb ()
Ntawm no, peb txhais cov pins tso tawm. Peb teeb tsa cov channel rau qhov xav tau zaus thiab teeb tsa PWM tus nqi.
teeb tsa tsis muaj dab tsi () {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 (channel_A, freq, resolucao); // Ajustando o kwj dej 0 rau zaus zaus 50 Hz e daws teeb meem de 12bits ledcSetup (channel_B, freq, resolucao); // Ajustando o kwj dej 1 rau zaus zaus 50 Hz e daws teeb meem de 12bits ledcAttachPin (pin_Atuacao_A, channel_A); // redirecionando o channel 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, channel_B); // redirecionando o channel 1 para o pino 12 ledcWrite (channel_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (channel_B, ciclo_B); // definindo o valor do PWM para 0
Peb pib ua ntu zus, nkag mus nrog SSID ESP32ap, thiab tus password. Tom qab ntawd peb tau txais tus IP ntawm tus neeg rau zaub mov thiab pib server.
Serial.begin (115200); // iniciando a 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 ua tus pabcuam (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 (chaw nres nkoj)); // mensagem server.begin (); // kev pabcuam lossis pabcuam}
Lub voj ()
Hauv Loop, thawj qhov peb yuav ua yog ua kom cov neeg siv tau sai, txuas thiab khi rau cov neeg siv khoom sib txawv. Txheeb xyuas yog tias tus neeg siv khoom txuas nrog. Yog tias yog, peb pib qhov sib txawv uas yuav tau txais cov ntaub ntawv. Ntev npaum li qhov kev sib txuas tau tsim, thiab yog tias tau txais cov ntaub ntawv, peb nyeem cov cim rau qhov sib txawv c. Thaum kawg, peb sib txuas c hauv cov ntaub ntawv sib txawv.
lub voj void () {WiFiClient cliente = server.available (); // se um cliente conectar, koom nrog cov neeg siv sib txawv yog ((cliente.connected ()) {// se há um cliente conectado String dados = ""; // inicia a variável que receberá os dados Serial.println ("Cliente conectado."); // mensagem thaum (cliente.connected ()) {// enquanto rau conexão estiver tsim cov khoom lag luam yog tias (cliente.available ()) {// e se houver dados tus txais char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Yog tias tau txais tus cim kab ntawv tshiab, peb nrhiav qhov ntsuas ntawm tus cim ',' hauv txoj hlua hauv cov ntaub ntawv. Peb tau txais cov ntawv me me kom txog thaum raug ua ntej tus lej, thiab tom qab ntawd peb hloov lawv mus rau cov lej. Peb teeb tsa PWM ntawm cov channel A thiab B. Peb tshem tawm qhov sib txawv.
yog (c == '\ n') {// se um caracter de nova linha rau recebido int virgula = dados.indexOf (','); // procure pelo icendice 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 (); // obtenha a substring após a vírgula e converta para inteiro ledcWrite (channel_A, ciclo_A); // Ajusta o PWM ua kwj dej A ledcWrite (channel_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa ib variável}}}}
Yog tias tus neeg siv txiav tawm, peb lees paub qhov kawg ntawm qhov txuas. Peb tos ib pliag thiab luam tawm "Tsis muaj tus neeg siv txuas nrog". Peb mam tos lwm thib ob ua ntej rov pib dua.
// caso o cliente se desconecte, confirma o fim da conexão ncua (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem ncua (1000); // aguarda um segundo antes de reiniciar}
Kauj Ruam 8: Cov Neeg Siv Khoom Code
Cov nqe lus
Peb tau suav nrog lub tsev qiv ntawv WiFi dua, lub sijhawm no ntawm tus neeg siv khoom. Tsis tas li, peb txhais cov kev hloov pauv.
#include const char* ssid = "ESP32ap"; // SSID rau ponto de acesso ESP32 const char* password = "12345678"; // Senha para acessar o ponto de acesso const uint16_t chaw nres nkoj = 2; // Porta de escuta do servidor const char * host = "192.168.4.1"; // endereço IP ua 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; // tshaj tawm rau objeto tus neeg siv khoom
Teeb ()
Peb txhais cov GPIOs raws li kev tawm tswv yim, pib ua ntu zus, thiab txuas mus rau qhov chaw nkag.
teeb tsa tsis muaj dab tsi () {pinMode (pin_Leitura_A, INPUT); // txhais o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // txhais o GPIO como entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, password); // conecta ao ponto de acesso}
Lub voj ()
Hauv Loop no, peb yuav txuas rau tus neeg rau zaub mov, lub ntsiab lus lwm yam 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, password); ncua (2000); } Serial.println (Txoj hlua (millis ()) + " - Conectado …"); // mensagem // se não conectado ao servidor, tenta se conectar thaum (! + chaw nres nkoj + "…"); // mensagem ncua (1000); }
Hauv cov kauj ruam no, thaum txuas nrog tus neeg rau zaub mov, peb ua qhov txawv txav los khaws qhov nyeem ntawm ADC0 thiab ADC3. Tsis tas li, peb tau ua tiav kev nyeem ntawm 500 qhov piv txwv thiab qhov nruab nrab ntawm kev nyeem. Peb teeb tsa kev nyeem ntawv los tsim lub sijhawm raug rau kev tswj hwm ntawm servos, thiab sib txuas thiab xa nws mus rau server.
// enquanto estiver conectado ao servidor thaum (cliente.connected ()) {int leitura_A = 0; // variável para armazenar leitura do ADC0 int leitura_B = 0; // variável para armazenar leitura do ADC3 int amostras = 500; // número de amostras int contador = 0; // contador de amostras thaum (contador <amostras) {// acumua várias leituras leitura_A = leitura_A + analogRead (pin_Leitura_A); leitura_B = leitura_B + analogRead (pin_Leitura_B); tus neeg sib tw ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = daim ntawv qhia (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controle do servo ciclo_B = daim ntawv qhia (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)); }
Thaum kawg, yog tias tsis txuas nrog, peb ua kom ntseeg tau tias qhov kev sib txuas tau raug txiav tawm los ntawm kev nthuav tawm cov lus sib npaug.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (Txoj hlua (millis ()) + " - cov neeg siv khoom xav tau …"); // mensagem}
Kauj ruam 9: Cov ntaub ntawv
Rub tawm cov ntawv:
INO
Pom zoo:
$ 5 Lub Koob Yees Duab Lub Koob Yees Duab rau Lub Rooj Sib Tham Video: 4 Cov Kauj Ruam (nrog Duab)
$ 5 Laptop Document Camera for Conferencing Video: Luam tawm 20200811 los ntawm John E. Nelson [email protected] tsis ntev los no tau tshaj tawm qhia qhia kev siv lub khoos phis tawj khoos phis tawj khoos phis tawj ua lub koob yees duab rau kev sib tham video. www.instructables.com/id/A-Sub-10-MetaPrax-Documen
Lub Koob Yees Duab CCTV Nrog NodeMCU + Lub Laus Laptop Lub Koob Yees Duab (Nrog thiab Tsis Siv Blynk): 5 Kauj Ruam
CCTV Lub Koob Yees Duab Nrog NodeMCU + Lub Laus Laptop Lub Koob Yees Duab (Nrog thiab Tsis Siv Blynk): Nyob zoo cov phooj ywg! Hauv cov lus qhia no, Kuv yuav qhia koj li cas kuv siv lub khoos phis tawj qub lub koob yees duab thiab nodeMCU los ua qee yam zoo ib yam li CCTV
Lub taub hau Nrhiav Nrog Wii Lub Koob Yees Duab Lub Koob Yees Duab (Tsov Rog Thunder): 6 Cov Kauj Ruam (nrog Duab)
Txheeb Xyuas Lub Taub Hau Nrog Wii Lub Koob Yees Duab Lub Koob Yees Duab (Tsov Rog Thunder): Nyob zoo txhua tus! Kuv xav qhia rau koj nrog kuv thawj qhov haujlwm tiav Arduino tiav. Kuv tau sim ua ib hom kev ua hauv tsev ntxiv rau kev muaj tiag. Cia kuv piav qhia nws rau koj: Nws yog qhov txheej txheem uas siv lub koob yees duab txhawm rau taug qab koj lub taub hau txav los hloov nws raws li
Lub Koob Yees Duab-Lub Koob Yees Duab Combiner Ua Nrog Lego: 12 Cov Kauj Ruam (nrog Duab)
Camera-Microscope Combiner Made With Lego: Nyob zoo txhua tus, Hnub no kuv yuav qhia yuav ua li cas thiaj ua lub koob yees duab rau lub tshuab tsom iav (ua nrog Lego qhov chaw) uas peb tuaj yeem ntes cov ntsiab lus ntawm tsom iav yooj yim dua. Cia peb pib
Hmo Hmo Pom Lub Zeem Muag Digital Lub Koob Yees Duab/lub koob yees duab: 17 Cov Kauj Ruam (nrog Duab)
Infrared Hmo Hmo Pom Lub Koob Yees Duab/Lub Koob Yees Duab: Cov lus qhia no piav qhia yuav hloov pauv li cas Kev Pom Kev Pom Kev Pom Hmo Hmo Hmo Hmo Hmo Hmo Hmo Hmo Hmo Tsis Pom Kev (uas yog tshaj tawm tsis raug los siv "" lub ntsej muag pom kev hmo ntuj tiag tiag thev naus laus zis ") mus rau qhov tseeb pom pom hmo ntuj pom lub koob yees duab. Qhov no zoo ib yam li IR webca