Բովանդակություն:
- Քայլ 1: Օգտագործված ռեսուրսներ
- Քայլ 2: NodeMCU ESP32S - Pinout
- Քայլ 3: ESP32 ծայրամասային սարքեր
- Քայլ 4: Servo Motor Control PWM
- Քայլ 5: Անալոգային գրավում
- Քայլ 6: Շղթա - սերվեր և հաճախորդ
- Քայլ 7: Մուտքի կետի և սերվերի աղբյուրի կոդը
- Քայլ 8: Հաճախորդի կոդ
- Քայլ 9: Ֆայլեր
Video: PANTILT տեսախցիկ ESP32- ով `9 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Այսօր ես կներկայացնեմ PAN TILT- ը, որը մի սարք է, որը հնարավորություն է տալիս տեսախցիկի շարժումը վեր, վար և կողմերի ուղղություններով: Ես ինքս արտադրեցի այս սարքը 3D տպված մասերի միջոցով ՝ օգտագործելով երկու սերվո և ESP32, ինչը հնարավորություն է տալիս վերահսկել այս մեխանիզմը WiFi- ի միջոցով: Եկեք ընթերցումներ կատարենք ՝ օգտագործելով ESP32- ի AD ալիքները, ինչպես նաև անալոգային գործողություն `օգտագործելով LED_PWM կարգավորիչը: Բացի այդ, մենք կիրառում ենք TCP / IP կապի վերահսկողությունը:
Տեսանյութում դուք կարող եք տեսնել, որ ես ունեմ ESP32 ընթերցում երկու պոտենցիոմետրերի արժեքները, որոնք ուղարկվում են (WiFi- ի միջոցով) մեկ այլ ESP32- ին: Այն միացված է երկու servo շարժիչներին: Տեսախցիկը շարժվում է (և կցված է PAN TILT- ին) վերև, ներքև կամ կողքի ուղղություններով ՝ կախված կաթսաների միջոցով ձեր կողմից կատարվող հսկողությունից:
PAN TILT 3D տպման դիզայնի հղումը կարող եք գտնել այստեղ ՝
Քայլ 1: Օգտագործված ռեսուրսներ
• Միացման համար բազմաթիվ ցատկողներ
• Երկու հանգույց MCU ESP32
• Երկու USB մալուխ ESP32- ի համար
• Վեբ -տեսախցիկ ՝ վերահսկման համար
• Երկու հսկիչ կաթսա
• նախատախտակ
• Աղբյուր սերվերի համար
Քայլ 2: NodeMCU ESP32S - Pinout
Քայլ 3: ESP32 ծայրամասային սարքեր
PWM ծայրամասային սարքեր ESP32- ն ունի երկու ծայրամասային սարքավորում, որոնք ունակ են առաջացնել PWM ազդանշաններ: Դրանք ներառում են Pulse Width Modulator (MCPWM) շարժիչը, որը նախատեսված է հզորության և շարժիչի կառավարման համար, և LED_PWM, որը մշակվել է LED ինտենսիվության կառավարման համար: Բայց դրանք կարող են օգտագործվել նաև ընդհանուր ձևով:
Մենք կօգտագործենք LED_PWM- ը, որը կարող է առաջացնել 16 անկախ PWM ալիք ՝ կարգավորելի ժամանակահատվածներով և աշխատանքային ցիկլերով: Այն ունի մինչև 16 բիթ թույլատրելիություն:
Քայլ 4: Servo Motor Control PWM
Servo շարժիչի հսկողությունը կատարվում է որոշակի հաճախականությամբ քառակուսի զարկերակի լայնության մոդուլյացիայի ճշգրտմամբ:
Օգտագործված սերվոյի համար (ինչպես նաև շատերի համար) հաճախականությունը 50 Հց է: Բացի այդ, 1 -ից 2ms զարկերակի երկարության լայնությունը որոշում է սերվոյի անկյունային դիրքը:
Մենք LED_PWM- ի 0 -րդ ալիքը կուղղորդենք դեպի GPIO13, իսկ 1 -ինը ՝ GPIO12- ին ՝ օգտագործելով այս տեղեկատվությունը ՝ վերահսկողությունը կատարելու համար:
Քայլ 5: Անալոգային գրավում
Digitalայրամասային թվային փոխակերպման անալոգային
ESP32- ն ունի անալոգային-թվային կերպափոխիչներ, որոնք կարող են կիրառվել մինչև 18 ալիքներում, բայց միայն անալոգային հնարավորություն ունեցող GPIO- ներում:
Կիրառվող լարումը չպետք է գերազանցի 0 -ից 3 Վ միջակայքը:
Կատարված փոխակերպումը չի պահպանում մշտական սխալ նմուշառվող բոլոր լարման դեպքում, և այս ամենը կախված է կազմաձևված տիրույթից: 2 մ, 450 Վ լարման դեպքում 150 մՎ տիրույթի դեպքում վարքագծի ստուգում է պահանջվում առավել կարևոր ծրագրերի համար:
Գրավման համար մենք կօգտագործենք 10k պոտենցիոմետր ՝ որպես լարման բաժանարար: Գրավումը կիրականացվի ADC0 և ADC3 ալիքներով, որոնք հասանելի են GPIO36 և GPIO39 համարներով:
Քայլ 6: Շղթա - սերվեր և հաճախորդ
Քայլ 7: Մուտքի կետի և սերվերի աղբյուրի կոդը
Հայտարարություններ
Ես ներառում եմ WiFi գրադարանը և որոշ փոփոխականներ եմ սահմանում:
#ներառել // ներառյալ 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 resolutionucao = 12; // Չօգտագործել առանց հսկողության 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"; // մշտական SSID- ի միջոցով WiFi- ի միջոցով մուտք գործեք ESP32 const char* գաղտնաբառ = "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; // փոփոխություն, որը կարող է ստանալ WiFi A սերվերի սերվեր (նավահանգիստ); // հայտարարեք ծառայությունների մատուցման IPA հասցե myIP; // հայտարարում է տարբերվող IP- ն
Կարգավորում ()
Այստեղ մենք սահմանում ենք ելքային կապերը: Մենք ալիքները սահմանում ենք ցանկալի հաճախականությամբ և սահմանում PWM արժեքը:
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // definino 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 frequência de 50 Hz e 126 ledc լուծում (canal_B, freq, resolutionucao); // Աջուստանդո կամ ջրանցք 1 հաճախականությամբ 50 Հց և լուծում 12bit ledcAttachPin (pin_Atuacao_A, canal_A); // վերահղում o ջրանցք 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // վերահղում և ջրանցք 1 -ին կետում 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
Մենք սկսեցինք սերիան, մուտքի կետը SSID ESP32ap- ով և գաղտնաբառը: Այնուհետև մենք ստանում ենք սերվերի IP- ն և սկսում սերվերը:
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 և 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:" + Լար (նավահանգիստ)); // mensagem server.begin (); // ինիցիանդո կամ սերվիդոր}
Օղակ ()
Loop- ում, առաջին բանը, որ մենք անելու ենք, հաճախորդին instantiate է ՝ միացնելով և կապելով հաճախորդի փոփոխականին: Ստուգեք, արդյոք հաճախորդը միացված է: Եթե այդպես է, մենք սկսում ենք այն փոփոխականը, որը կստանա տվյալները: Քանի դեռ կապը հաստատված է, և եթե տվյալներ են ստացվում, մենք կարդում ենք c փոփոխականի նիշերը: Վերջապես, մենք միացնում ենք գ տվյալների փոփոխականում:
void loop () {WiFiClient cliente = server.available (); // se um cliente conectar, associe a varyável cliente if (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 receiber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Եթե ստացվում է նոր տողի նիշ, մենք տվյալների տողում փնտրում ենք «» բնույթի ինդեքսը: Մենք ստանում ենք ենթատողերը մինչև ստորակետից անմիջապես առաջ, այնուհետև դրանք վերածում ենք ամբողջի: Մենք սահմանում ենք A և B. ալիքների PWM- ը: Մենք մաքրում ենք փոփոխականը:
եթե (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // ձեռք բերել 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 canal A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do canal B dados = ""; // Limpa a variável}}}}
Եթե հաճախորդը անջատվում է, մենք հաստատում ենք կապի ավարտը: Մենք մի պահ սպասում ենք և տպում «Ոչ մի հաճախորդ կապված չէ»: Այնուհետև մենք սպասում ենք ևս մեկ վայրկյան ՝ նախքան վերսկսելը:
// հաճախորդների հետ կապ հաստատելու, հետաձգելու հաստատում (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- ը թույլ է տալիս օգտագործել ESP32 const char* գաղտնաբառ = "12345678"; // Senha para acessar o ponto de acesso const uint16_t նավահանգիստ = 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 Receibá o o valor do ciclo do PWM B WiFiClient հաճախորդների համար; // հայտարարում հաճախորդի հաճախորդի մասին
Կարգավորում ()
Մենք GPIO- ները սահմանում ենք որպես մուտքագրում, սկսում ենք սերիան և միանում մուտքի կետին:
void setup () {pinMode (pin_Leitura_A, INPUT); // սահմանել o 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}
Օղակ ()
Այս հանգույցում մենք կկապվենք սերվերին, այսինքն ՝ մյուս 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 (Լար (millis ()) + " - Կոնեկտադո …"); // 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 նմուշների ընթերցում և միջինացված ընթերցումներ: Մենք քարտեզագրեցինք ընթերցումը `սերվերի վերահսկման ճիշտ տևողությունը ստեղծելու համար և միացրեցինք և ուղարկեցինք սերվերին:
// 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); 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 = քարտեզ (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)); }
Ի վերջո, եթե միացված չէ, մենք երաշխավորում ենք, որ կապը դադարեցվել է ՝ համարժեք հաղորդագրությունը ցուցադրելով:
// եթե դա չի թույլատրվում, երաշխավորում ենք, որ հնարավոր է հաճախորդների վերջնական հաստատում: կանգ առնել (); Serial.println (Լար (millis ()) + " - հաճախորդների ապամոնտաժում …"); // menagem}
Քայլ 9: Ֆայլեր
Ներբեռնեք ֆայլերը.
ԻՆՈ
Խորհուրդ ենք տալիս:
USB Power Arlo տեսախցիկ ՝ 6 քայլ (նկարներով)
USB Power Arlo տեսախցիկ. Ես հոգնել եմ թանկարժեք մարտկոցներ գնել իմ անլար ARLO տեսախցիկների համար (ոչ ARLO PRO կամ ARLO PRO2): Դրանք տևում են ընդամենը 3 կամ 4 ամիս: Օգտվողների բլոգում ինչ -որ մեկն առաջարկեց միացնել տեսախցիկը տեսախցիկի վրա microUSB պորտին: Ես դա չեմ նկատել
Տեսախցիկի տեսախցիկ ՝ 5 դոլար արժողությամբ փաստաթղթերի տեսախցիկ ՝ 4 քայլ (նկարներով)
5 դոլար արժողությամբ դյուրակիր համակարգչային փաստաթղթերի տեսախցիկ տեսաֆիլմերի կոնֆերանսի համար. Հրապարակվել է 202008 թ. Johnոն Է. www.instructables.com/id/A-Sub-10-MetaPrax-Documen
Timeամանակի խզման տեսախցիկ ESP32-CAM տախտակի միջոցով `6 քայլ
Timeամանակի խզման տեսախցիկ ESP32-CAM տախտակի միջոցով. Այս նախագիծը հիմնված է թվային պատկերի տեսախցիկի նախորդ նախագծի վրա, և մենք կառուցում ենք ժամանակի անցում կատարող տեսախցիկ `օգտագործելով ESP32-CAM տախտակը: Բոլոր պատկերները հաջորդաբար պահվում են microSD քարտում, և տախտակը քնում է պատկերը վերցնելուց հետո, որպեսզի օգնի պահպանել
ESP32-CAM տախտակի միջոցով դեմքի հայտնաբերման IP տեսախցիկ `5 քայլ
ESP32-CAM տախտակի միջոցով ՝ դեմքի հայտնաբերմամբ IP տեսախցիկ. Մենք ստեղծում ենք մի պարզ IP տեսախցիկ, որը կարող է օգտագործվել կենդանի տեսաֆիլմերի հոսքի համար ՝ օգտագործելով 2
ESP32-CAM պատյան համակարգ և 3D տպիչ տեսախցիկ. 10 քայլ (նկարներով)
ESP32-CAM պատյանների համակարգ և 3D տպիչ տեսախցիկ. Ես փնտրում էի տեսախցիկս իմ 3-D տպիչի վրա փոխարինել փոքր, պարզ և ֆունկցիոնալ ինչ-որ բանով … և էժան: Google- ի մի քանի որոնումներն ինձ տարան դեպի ESP32-Cam մոդուլ: Դուք կարող եք դրանք գտնել ավելի քան 10 դոլարով, ինչպես ավելի քիչ, և նրանք իսկապես լավ են կատարում