Përmbajtje:
- Hapi 1: Burimet e përdorura
- Hapi 2: NodeMCU ESP32S - Pinout
- Hapi 3: Periferikësh ESP32
- Hapi 4: Servo Motor Control PWM
- Hapi 5: Regjistrimi analog
- Hapi 6: Qarku - Server dhe Klient
- Hapi 7: Kodi Burimor i Pikës së Hyrjes dhe Serverit
- Hapi 8: Kodi Burimor i Klientit
- Hapi 9: Skedarët
Video: Kamera PANTILT Me ESP32: 9 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:21
Sot, unë do të prezantoj PAN TILT, e cila është një pajisje që mundëson lëvizjen e një kamere për drejtimet lart, poshtë dhe anash. Unë vetë e prodhova këtë pajisje përmes pjesëve të printuara 3D, duke përdorur dy servos dhe ESP32, gjë që bën të mundur kontrollin e këtij mekanizmi përmes WiFi. Le të marrim pastaj lexime duke përdorur kanalet AD të ESP32, si dhe një operacion analog duke përdorur kontrolluesin LED_PWM. Gjithashtu, ne aplikojmë kontrollin mbi një lidhje TCP / IP.
Në video, mund të shihni që kam një ESP32 që lexon vlerat e dy potenciometrave, të cilët dërgohen (nëpërmjet WiFi) në një ESP32 tjetër. Shtë i lidhur me dy servo motorë. Kamera lëviz (dhe është e bashkangjitur në PAN TILT) në drejtimet lart, poshtë ose anash, në varësi të kontrollit që bëni përmes tenxhereve.
Lidhja me modelin e printimit PAN TILT 3D mund të gjendet këtu:
Hapi 1: Burimet e përdorura
• Kërcyes të shumtë për lidhje
• Dy Nyje MCU ESP32
• Dy kabllo USB për ESP32
• Një WebCam për kontroll
• Dy tenxhere kontrolli
• Një protoboard
• Një burim për servos
Hapi 2: NodeMCU ESP32S - Pinout
Hapi 3: Periferikësh ESP32
Periferikësh PWM ESP32 ka dy pajisje periferike të afta për të gjeneruar sinjale PWM. Këto përfshijnë motorin Pulse Width Modulator (MCPWM) i projektuar për fuqinë dhe kontrollin e motorit, dhe LED_PWM, i zhvilluar për kontrollin e intensitetit LED. Por ato gjithashtu mund të përdoren në mënyrë të përgjithshme.
Ne do të përdorim LED_PWM, e cila mund të gjenerojë 16 kanale të pavarura PWM me periudha dhe cikle pune të konfigurueshme. Ka rezolucion deri në 16 bit.
Hapi 4: Servo Motor Control PWM
Kontrolli i servo motorit kryhet duke rregulluar modulimin e gjerësisë së pulsit të një katrori me frekuencë specifike.
Për servo të përdorur (si dhe për shumicën), frekuenca është në 50Hz. Gjithashtu, një gjerësi prej 1 deri në 2ms gjatësi të pulsit përcakton pozicionin këndor të servo.
Ne do të drejtojmë kanalin 0 të LED_PWM në GPIO13 dhe kanalin 1 në GPIO12, duke përdorur këtë informacion për të kryer kontrollin.
Hapi 5: Regjistrimi analog
Periferik i konvertimit analog në dixhital
ESP32 ka konvertues analogë-dixhitalë që mund të aplikohen në deri në 18 kanale, por vetëm në GPIO të aktivizuar nga analogët.
Tensioni i aplikuar nuk duhet të kalojë intervalin 0 deri në 3V.
Konvertimi i kryer nuk mban një gabim konstant për të gjitha tensionet e marra, dhe e gjitha varet nga diapazoni i konfiguruar. Për një gamë prej 150mV në 2, 450V, kërkohet një kontroll sjelljeje për aplikime më kritike.
Për kapjen, ne do të përdorim një potenciometër prej 10k si ndarës të tensionit. Kapja do të bëhet në kanalin ADC0 dhe ADC3, të arritshme nga GPIO36 dhe GPIO39.
Hapi 6: Qarku - Server dhe Klient
Hapi 7: Kodi Burimor i Pikës së Hyrjes dhe Serverit
Deklaratat
Unë përfshij bibliotekën WiFi dhe përcaktoj disa ndryshore.
#include // inclusão da biblioteca WiFi const int freq = 50; // frekuencat e PWM const int canal_A = 0; // kanali primiro do controlador LED_PWM const int canal_B = 1; // kanali segundo do controlador LED_PWM const int resolutionucao = 12; // Zgjidhni përdorimin pa kontrollues LED_PWM const int pin_Atuacao_A = 13; // Pino para onde o canal 0 será redirecionado const int pin_Atuacao_B = 12; // Pino para kanalit 1 será redirecionado const char* ssid = "ESP32ap"; // konstante në SSID për WiFi për të kontrolluar qasjen në ESP32 const char* password = "12345678"; // senha para confirmação de conexão no ponto de acesso const int port = 2; // porta për cilësinë e shërbimit të marrësit si të lidhur në ciclo_A = 0; // variável que receberá o ciclo de atuação do canal A int ciclo_B = 0; // ndryshoni në mënyrë që të merrni një kanal A server (port) WiFiServer; // deklaro shërbimin e shërbimit të IPAdresës myIP; // deklaroj ndryshimin e IP -së
Konfigurimi ()
Këtu, ne përcaktojmë kunjat e daljes. Ne i vendosim kanalet në frekuencën e dëshiruar dhe vendosim vlerën PWM.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // përcakto 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, resolutionucao); // Ajustando o canal 0 para frekuencave të 50 Hz dhe zgjidhjes së 12bits ledcSetup (canal_B, freq, resolutionucao); // Ajustando o canal 1 para frekuencave të 50 Hz dhe zgjidhjes së 12bit ledcAttachPin (pin_Atuacao_A, canal_A); // përcjellim o kanal 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // përcjellim kanalin 1 para ores 12 12 ledcWrite (canal_A, ciclo_A); // definido o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
Ne filluam serialin, pikën e hyrjes me SSID ESP32ap dhe fjalëkalimin. Ne pastaj marrim IP -në e serverit dhe fillojmë serverin.
Serial.fillo (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, fjalëkalim); // iniciando o ponto de acesso com SSID ESP32ap dhe senha 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // obtendo o IP për servidor (nuk ka lidhje me konfigurimin e zonës mbi orarin e faqes) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (port)); // mensagem server.begin (); // iniciando o servidor}
Lak ()
Në Loop, gjëja e parë që do të bëjmë është të instinktojmë klientin, duke u lidhur dhe lidhur me ndryshoren e klientit. Kontrolloni nëse klienti është i lidhur. Nëse është kështu, ne fillojmë ndryshoren që do të marrë të dhënat. Për sa kohë që lidhja është vendosur, dhe nëse merren të dhëna, ne lexojmë karakteret për ndryshoren c. Së fundi, ne bashkojmë c në ndryshoren e të dhënave.
void loop () {WiFiClient cliente = server.available (); // se um kliente conectar, asocioni një klientë të ndryshëm nëse (cliente.connected ()) {// se há um kliente conectado String dados = ""; // inicia a variável que receberá os dados Serial.println ("Cliente conectado."); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver estabelecida if (cliente.available ()) {// e se houver dados a receib char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Nëse merret një karakter i ri, ne kërkojmë indeksin e karakterit ',' në vargun në të dhëna. Ne i marrim nënvargjet deri para presjes, dhe pastaj i konvertojmë në numër të plotë. Ne vendosim PWM të kanaleve A dhe B. Ne pastrojmë ndryshoren.
nëse (c == '\ n') {// se um caracter de nova linha për recebido int virgula = dados.indexOf (','); // prokuro 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 (); // obtenha a substring após a vírgula e converta para inteiro ledcWrite (canal_A, ciclo_A); // Ajusta o PWM do kanal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do kanal B dados = ""; // Limpa a variável}}}}
Nëse klienti shkëputet, ne konfirmojmë përfundimin e lidhjes. Ne presim për një moment dhe shtypim "Asnjë klient i lidhur". Ne pastaj presim një sekondë tjetër para se të rifillojmë.
// rasti i klientit për desconecte, konfirmimi i fim dhe vonesës (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // vonesa e menagjemit (1000); // aguarda um segundo antes de reiniciar}
Hapi 8: Kodi Burimor i Klientit
Deklaratat
Ne kemi përfshirë përsëri bibliotekën WiFi, këtë herë tek klienti. Gjithashtu, ne përcaktojmë variablat.
#include const char* ssid = "ESP32ap"; // SSID për të kontrolluar qasjen në ESP32 const char* password = "12345678"; // Senha para acessar ose 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 leitura do ADC3 int ciclo_A = 0; // variavel 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; // deklarojão objeto cliente
Konfigurimi ()
Ne i përcaktojmë GPIO -të si hyrje, fillojmë serialin dhe lidhemi me pikën e hyrjes.
void setup () {pinMode (pin_Leitura_A, INPUT); // përcakto o GPIO como entrada pinMode (pin_Leitura_B, INPUT); // përcaktoni o GPIO como entrada Serial.begin (115200); // inicia a comunicação serial WiFi.begin (ssid, fjalëkalim); // conecta ao ponto de acesso}
Lak ()
Në këtë lak, ne do të lidhemi me serverin, që do të thotë ESP tjetër.
lak i pavlefshëm () {// se nuk mund të lidhet me një qasje, vendosni lidhjen ndërsa (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, fjalëkalim); vonesa (2000); } Serial.println (String (millis ()) + " - Conectado …"); // mensagem // se nuk ka lidhje me shërbimin, ju lutem lidhni ndërsa (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":" + port + "…"); // vonesa e menagjemit (1000); }
Në këtë hap, ndërsa jemi të lidhur me serverin, ne ekzekutojmë variablat për të ruajtur leximin e ADC0 dhe ADC3. Gjithashtu, ne kemi kryer leximin e 500 mostrave dhe kemi bërë mesataren e leximeve. Ne e hartuam leximin për të krijuar kohëzgjatjen e duhur për kontrollin e servos, dhe e lidhim dhe e dërgojmë atë në server.
// enquanto estiver conectado ao servidor while (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 while (contador <amostras) {// acumua várias leituras leitura_A = leitura_A + analogRead (pin_Leitura_A); leitura_B = leitura_B + analogRead (pin_Leitura_B); kontador ++; } leitura_A = leitura_A / amostras; // média das leituras leitura_B = leitura_B /amostras; ciclo_A = hartë (leitura_A, 0, 4095, 140, 490); // mapeia a leitura para criar a duração correta para controle do servo ciclo_B = hartë (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)); }
Së fundi, nëse nuk është e lidhur, sigurohemi që lidhja është ndërprerë duke shfaqur mesazhin ekuivalent.
// se nuk ka lidhje, ju garanton një përfundim të klientit.stop (); Serial.println (String (millis ()) + " - klienti desconectado …"); // mensagem}
Hapi 9: Skedarët
Shkarkoni skedarët:
INO
Recommended:
Kamera e kalimit të kohës duke përdorur bordin ESP32-CAM: 6 hapa
Kamera e kalimit të kohës duke përdorur bordin ESP32-CAM: Ky projekt bazohet në projektin e mëparshëm të aparatit dixhital të imazhit dhe ne ndërtojmë një aparat fotografik me kalim kohe duke përdorur bordin ESP32-CAM. Të gjitha imazhet ruhen në kartën microSD me radhë dhe bordi shkon për të fjetur pasi merr një imazh për të ndihmuar në ruajtjen e
Kamera IP me Zbulim Fytyre Duke Përdorur Bordin ESP32-CAM: 5 Hapa
Kamera IP me Zbulimin e Fytyrës Përdorimi i Bordit ESP32-CAM: Ky postim është i ndryshëm në krahasim me të tjerët dhe ne hedhim një vështrim në tabelën shumë interesante ESP32-CAM që është çuditërisht e lirë (më pak se 9 dollarë) dhe e lehtë për t'u përdorur. Ne krijojmë një kamera të thjeshtë IP që mund të përdoret për të transmetuar një burim video drejtpërdrejt duke përdorur 2
Fillimi me ESP32 - Instalimi i bordeve ESP32 në Arduino IDE - ESP32 Blink Code: 3 hapa
Fillimi me ESP32 | Instalimi i bordeve ESP32 në Arduino IDE | ESP32 Blink Code: Në këtë udhëzues do të shohim se si të fillojmë të punojmë me esp32 dhe si të instalojmë bordet esp32 në Arduino IDE dhe do të programojmë esp 32 që të ekzekutojë kodin e blinkimit duke përdorur arduino ide
Kamera UNICORN - Raspberry Pi Zero W NoIR 8MP Kamera e ndërtuar: 7 hapa (me fotografi)
KAMERA UNICORN - Raspberry Pi Zero W NoIR 8MP Camera Build: Pi Zero W NoIR 8MP Camera BuildThis Instructable u krijua për të ndihmuar këdo që dëshiron një Kamera Infra të Kuqe ose një Kamera Portative Vërtetë të Ftohtë ose një Kamera Portabile Raspberry Pi ose Thjesht dëshiron të argëtohet, heheh Me Kjo është më e përballueshme dhe më e konfigurueshme
Kamera dixhitale/kamera dixhitale me vizion natën me rreze infra të kuqe: 17 hapa (me fotografi)
Kamera dixhitale/kamera dixhitale e vizionit të natës me rreze infra të kuqe: Ky udhëzues shpjegon se si të konvertohet kamera e zbulimit të natës Discovery Kids (e cila reklamohet në mënyrë të rreme për të përdorur " teknologji të vërtetë të vizionit të natës me infra të kuqe ") në një kamera reale të shikimit të natës me infra të kuqe. Kjo është e ngjashme me IR webca