Мазмуну:

PANTILT камерасы ESP32 менен: 9 кадам
PANTILT камерасы ESP32 менен: 9 кадам

Video: PANTILT камерасы ESP32 менен: 9 кадам

Video: PANTILT камерасы ESP32 менен: 9 кадам
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Ноябрь
Anonim
Image
Image
PANTILT камерасы ESP32 менен
PANTILT камерасы ESP32 менен

Бүгүн мен PAN TILTти сунуштайм, ал камеранын өйдө, ылдый жана капталга карай кыймылын камсыз кылган түзмөк. Мен өзүм бул түзмөктү 3D басылган бөлүктөрү аркылуу чыгардым, эки сервону жана ESP32ди колдонуп, бул механизмди WiFi аркылуу башкарууга мүмкүндүк берет. Келгиле анда ESP32нин AD каналдарын колдонуп, ошондой эле LED_PWM контроллерин колдонуп аналогдук операцияны алып көрөлү. Ошондой эле, биз TCP / IP туташуусун көзөмөлдөйбүз.

Видеодон, менде ESP32 бар экенин жана башка ESP32ге (WiFi аркылуу) жөнөтүлүүчү эки потенциометрдин маанилерин окуп жатканын көрө аласыз. Ал эки servo моторго туташкан. Камера идиштер аркылуу жасаган көзөмөлүңүзгө жараша өйдө, ылдый же капталы менен жылат (жана PAN TILT тиркелет).

PAN TILT 3D басма дизайнына шилтемени бул жерден тапса болот:

1 -кадам: Колдонулган ресурстар

Колдонулган ресурстар
Колдонулган ресурстар

• Байланыш үчүн бир нече секиргичтер

• Эки түйүн MCU ESP32s

• ESP32 үчүн эки USB кабели

• көзөмөлдөө үчүн WebCam

• Эки көзөмөлдөөчү идиш

• Протобоард

• Серво үчүн булак

2 -кадам: NodeMCU ESP32S - Pinout

NodeMCU ESP32S - Pinout
NodeMCU ESP32S - Pinout

3 -кадам: ESP32 перифериялык түзүлүштөрү

ESP32 перифериялык түзүлүштөрү
ESP32 перифериялык түзүлүштөрү

PWM перифериялык түзүлүштөрү ESP32де PWM сигналдарын чыгарууга жөндөмдүү эки перифериялык түзүлүш бар. Буларга кубаттуулукту жана моторду башкарууга арналган Pulse Width Modulator (MCPWM) кыймылдаткычы жана LED интенсивдүүлүгүн көзөмөлдөө үчүн иштелип чыккан LED_PWM кирет. Бирок алар жалпы жол менен да колдонулушу мүмкүн.

Биз LED_PWM колдонобуз, ал конфигурациялануучу мезгилдер жана жумуш циклдери бар 16 көз карандысыз PWM каналын түзө алат. Анын 16 битке чейин чечилиши бар.

4 -кадам: Servo Motor Control PWM

Серво моторун башкаруу PWM
Серво моторун башкаруу PWM

Серво моторун башкаруу белгилүү бир жыштыктагы импульстун модуляциясын тууралоо аркылуу ишке ашырылат.

Колдонулган серво үчүн (ошондой эле көпчүлүк үчүн), жыштык 50 Гцте. Ошондой эле, 1ден 2смге чейинки импульстун узундугу сервонун бурчтук абалын аныктайт.

Биз көзөмөлдөө үчүн бул маалыматты колдонуп, LED_PWMдин 0 каналын GPIO13ке, ал эми 1 -каналды GPIO12ге багыттайбыз.

5 -кадам: Аналогдук тартуу

Analog Capture
Analog Capture

Аналогдук санариптик конверсия перифериялык

ESP32де 18 каналга чейин колдонулушу мүмкүн болгон аналогдук-санариптик өзгөрткүчтөр бар, бирок аналогдук иштетилген GPIOдо гана.

Колдонулуучу чыңалуу 0ден 3Vга чейин болбошу керек.

Аткарылган конверсия бардык тандалып алынган чыңалуулар үчүн туруктуу катаны сактабайт жана мунун баары конфигурацияланган диапазонго жараша болот. 2, 450В 150мВ диапазону үчүн, сынчыл тиркемелер үчүн жүрүм -турумду текшерүү талап кылынат.

Тартуу үчүн биз чыңалуу бөлүүчү катары 10k потенциометрди колдонобуз. Тартуу GPIO36 жана GPIO39 жеткиликтүү болгон ADC0 жана ADC3 каналында жүргүзүлөт.

6 -кадам: Район - Сервер жана Кардар

Район - Сервер жана Кардар
Район - Сервер жана Кардар

7 -кадам: Кирүү чекитинин жана серверинин баштапкы коду

Билдирүүлөр

Мен WiFi китепканасын кошуп, кээ бир өзгөрмөлөрдү аныктайм.

#include // inclusão da biblioteca WiFi const int freq = 50; // PWM const int kanal_A = 0; // премьер каналы LED_PWM const int channel_B = 1; // көзөмөлдөөчү канал LED_PWM const int çözünürlüğü = 12; // Resolução usado no controlador LED_PWM const int pin_Atuacao_A = 13; // Канал 0 каналдын даректерин өзгөртүү үчүн pin_Atuacao_B = 12; // Канал 1 каналдын кайра иштетилишине шарт түзөт* ssid = "ESP32ap"; // туруктуу SSID же WiFi аркылуу ESP32 const char* password = "12345678"; // сенсацияларды конфигурациялоо үчүн порт = 2; // ciclo_A = 0 менен байланышкан шарттарда; // каналдын өзгөрүүсү // WiFiServer серверинин (портунун) каналын алуу; // декларация кылуу IPAddress myIP; // декларациясы да өзгөрөт

Жайгашуу ()

Бул жерде биз чыгуучу казыктарды аныктайбыз. Биз каналдарды керектүү жыштыкка коюп, PWM маанисин койдук.

жараксыз орнотуу () {pinMode (pin_Atuacao_A, OUTPUT); // pinMode pinMode (pin_Atuacao_B, OUTPUT); // аныктоо же аныктоо B como saída ledcSetup (channel_A, freq, resolutionucao); // 0 каналга 50 Гц жыштыктагы 12 бит бит ledcSetup (channel_B, freq, resolutionucao); // Каналдын 1 -жыштыгы 50 Гц жана 12 бит битcAttachPin (pin_Atuacao_A, channel_A); // кайра багыттоо 0 канал үчүн 13 ledcAttachPin (pin_Atuacao_B, channel_B); // каналдын багытын өзгөртүү 1 канал үчүн 12 ledcWrite (channel_A, ciclo_A); // PWM para 0 ledcWrite (каналы_Б, ciclo_B) үчүн эрдикти аныктоо; // PWM para 0 үчүн эрдикти аныктоо

Биз SSID ESP32ap жана сырсөз менен сериялык, кирүү чекитин баштадык. Андан кийин биз сервердин IPин алып, серверди баштайбыз.

Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + String (ssid)); // mensagem WiFi.softAP (ssid, сырсөз); // SSID ESP32ap жана SSL 12345678 Serial.println ("IP дареги") менен байланышуу; // mensagem myIP = WiFi.softAPIP (); // IP сервистеринин жардамы менен (конфигурацияны өзгөртүү үчүн) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (порт)); // mensagem server.begin (); // индиандо же сервидор}

Loop ()

Loopто, биз жасай турган биринчи нерсе - кардарды түзүү, кардардын өзгөрмөсүнө туташуу жана байланыштыруу. Кардар туташкандыгын текшериңиз. Андай болсо, биз маалыматтарды ала турган өзгөрмөнү баштайбыз. Байланыш түзүлүп, эгер маалыматтар кабыл алынса, c өзгөрмөсүнүн символдорун окуйбуз. Акыр -аягы, биз c өзгөрмөсүн маалымат өзгөрмөсүнө бириктиребиз.

void loop () {WiFiClient cliente = server.available (); // con clientar, associe a variável cliente if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // Serial.println ("Cliente conectado.") вариантын алуу; // mensagem while (cliente.connected ()) {// enquanto a conexão estiver setelecida if (cliente.available ()) {// e cou houver dados a charber c = cliente.read (); // leia os caracteres a variável c dados = dados + c; // concatene c na variável dados

Эгерде жаңы саптын белгиси алынса, биз маалыматтын сабынан ',' белгисинин индексин издейбиз. Биз подтриндерди үтүргө чейин эле алабыз, анан аларды бүтүн санга айландырабыз. Биз А жана В каналдарынын PWMин орнотобуз. Биз өзгөрмөнү тазалайбыз.

if (c == '\ n') {// se new carha de recaido int virgula = dados.indexOf (','); // сатып алууну жүргүзүңүз ',' ciclo_A = (dados.substring (0, virgula)). toInt (); // subtening a substring até antes da vírgula e converta para inteiro ciclo_B = dados.substring (virgula + 1, dados.length ()). toInt (); ciclo_A); // А PWM канал A ledcWrite (channel_B, ciclo_B); // А PWM каналы B dados = ""; // Чек аранын түрү}}}}

Эгерде кардар ажыратылса, биз байланыштын бүткөнүн ырастайбыз. Биз бир аз күтөбүз жана "Кардар туташкан жок" деп басып чыгарабыз. Биз кайра баштоо үчүн дагы бир секунд күтөбүз.

// caso o cliente se desconecte, confirma o fim da conexão delay (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // mensagem кечигүүсү (1000); // акыры кайра калыбына келтирүү}

8 -кадам: Кардардын булак коду

Билдирүүлөр

Биз WiFi китепканасын кайра киргиздик, бул жолу кардарга. Ошондой эле, биз өзгөрмөлөрдү аныктайбыз.

#include const char* ssid = "ESP32ap"; // SSID бул жерде ESP32 const char* password = "12345678"; // Сенсордук ацесар же uess16_t порт = 2; // Port char de host * char = host = "192.168.4.1"; // IP -серверлери бар pin_Leitura_A = 36; // ADC0 түзмөгүнүн GPIO де pin_Leitura_B = 39; // GPC де ADC3 менен иштейт ciclo_A = 0; // PWMди жасоо үчүн чоң мааниге ээ болуу ciclo_B = 0; // PWM B WiFiClient кардарынын купуялыгын өзгөртүү; // жарыялоочу кардар

Жайгашуу ()

Биз GPIOдорду киргизүү катары аныктайбыз, сериалды баштайбыз жана кирүү чекитине туташабыз.

жараксыз орнотуу () {pinMode (pin_Leitura_A, INPUT); // аны аныктоо GPIO como entrada pinMode (pin_Leitura_B, INPUT); // аны аныктоо GPIO como entrada Serial.begin (115200); // inicia a comunicação WiFi WiFi.begin (ssid, password); // conecta ao ponto de acesso}

Loop ()

Бул циклде биз серверге туташабыз, башка ESP дегенди билдирет.

void loop () {// se não conectado ao ponto de acesso, a conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando no WiFi" + ssid +) "…"); // mensagem WiFi.begin (ssid, сырсөз); кечигүү (2000); } Serial.println (String (millis ()) + " - Conectado…"); // mensagem // se não conectado ao servidor, a con conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":" + порт + "…"); // mensagem кечигүүсү (1000); }

Бул кадамда, серверге туташканда, биз ADC0 жана ADC3 окууларын сактоо үчүн өзгөрмөлөрдү аткарабыз. Ошондой эле, биз 500 үлгүнүн окуусун аткардык жана орточо көрсөткүчтөрдү окудук. Биз servoлорду башкаруунун туура узактыгын түзүү үчүн окууну картага түшүрүп, бириктирип серверге жөнөтөбүз.

// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // ADC0 интеграциясы үчүн ар кандай шарттар түзүлгөн; // ADC3 ичиндеги ар кандай шарттарда = 500; // nosher 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); // карта жана сервис ciclo_B = карта контролдоо үчүн карта (leitura_B, 0, 4095, 140, 490); // карточка жана сервистерди көзөмөлдөө үчүн контролдоо // сервистерди бириктирүү клиент.println (String (ciclo_A) + "," + String (ciclo_B)); }

Акыр -аягы, туташпаса, эквиваленттүү билдирүүнү көрсөтүү менен байланыш үзүлгөнүн камсыздайбыз.

// seo não coonectado, garanti que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado…"); // mensagem}

9 -кадам: Файлдар

Файлдарды жүктөп алыңыз:

PDF

МЕН ЖОК

Сунушталууда: