Съдържание:
- Стъпка 1: Използвани ресурси
- Стъпка 2: NodeMCU ESP32S - Pinout
- Стъпка 3: ESP32 периферни устройства
- Стъпка 4: ШИМ за управление на сервомотора
- Стъпка 5: Аналогово улавяне
- Стъпка 6: Схема - Сървър и клиент
- Стъпка 7: Изходен код на точката за достъп и сървъра
- Стъпка 8: Изходен код на клиента
- Стъпка 9: Файлове
Видео: PANTILT камера с ESP32: 9 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Днес ще представя PAN TILT, което е устройство, което позволява движението на камера за посоките нагоре, надолу и отстрани. Аз самият произведох това устройство чрез 3D отпечатани части, използвайки две серво и ESP32, което дава възможност за управление на този механизъм чрез WiFi. Нека след това вземем показания, използвайки AD каналите на ESP32, както и аналогова операция с помощта на контролера LED_PWM. Също така прилагаме контрола върху TCP / IP връзка.
Във видеото можете да видите, че имам ESP32, който отчита стойностите на двата потенциометра, които се изпращат (чрез WiFi) към друг ESP32. Той е свързан към двата серво мотора. Камерата се движи (и е прикрепена към PAN TILT) в посоката нагоре, надолу или настрани, в зависимост от контрола, който извършвате през саксиите.
Връзката към дизайна на 3D печат PAN TILT може да бъде намерена тук:
Стъпка 1: Използвани ресурси
• Множество джъмпери за връзка
• Два възела MCU ESP32
• Два USB кабела за ESP32
• Уеб камера за контрол
• Два контролни саксии
• Прото платка
• Източник за сервомоторите
Стъпка 2: NodeMCU ESP32S - Pinout
Стъпка 3: ESP32 периферни устройства
ШИМ периферни устройства ESP32 има две периферни устройства, способни да генерират ШИМ сигнали. Те включват двигателя с модулатор на широчината на импулса (MCPWM), предназначен за управление на мощността и двигателя, и LED_PWM, разработен за контрол на интензитета на LED. Но те могат да се използват и по общ начин.
Ще използваме LED_PWM, който може да генерира 16 независими PWM канала с конфигурируеми периоди и работни цикли. Той има до 16 бита резолюция.
Стъпка 4: ШИМ за управление на сервомотора
Управлението на серво мотора се извършва чрез регулиране на широчинно -импулсната модулация на квадрат със специфична честота.
За използваното серво (както и за повечето) честотата е 50Hz. Също така, дължината на импулса от 1 до 2 ms определя ъгловата позиция на серво.
Ще насочим канал 0 от LED_PWM към GPIO13 и канал 1 към GPIO12, като използваме тази информация за извършване на контрола.
Стъпка 5: Аналогово улавяне
Периферно аналогово -цифрово преобразуване
ESP32 има аналогово-цифрови преобразуватели, които могат да се прилагат в до 18 канала, но само в аналогови GPIO.
Приложеното напрежение не трябва да надвишава диапазона от 0 до 3V.
Извършеното преобразуване не поддържа постоянна грешка за всички избрани напрежения и всичко зависи от конфигурирания диапазон. За диапазон от 150mV при 2, 450V е необходима проверка на поведението за по -критични приложения.
За улавяне ще използваме потенциометър от 10k като делител на напрежение. Заснемането ще се извършва в канал ADC0 и ADC3, достъпен чрез GPIO36 и GPIO39.
Стъпка 6: Схема - Сървър и клиент
Стъпка 7: Изходен код на точката за достъп и сървъра
Изявления
Включвам WiFi библиотеката и дефинирам някои променливи.
#include // включване на библиотека WiFi const int freq = 50; // честота до PWM const int canal_A = 0; // Primeiro канал прави контролер LED_PWM const int canal_B = 1; // канал за управление до LED_PWM const int resolucao = 12; // Resolução usado без контролер 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 channel 1 será redirecionado const char* ssid = "ESP32ap"; // постоянен com o SSID за WiFi до пощенска връзка с ESP32 const char* password = "12345678"; // senha para confirmmação de conexão no ponto de acesso const int port = 2; // porta na qual o servidor receberá като conexões int ciclo_A = 0; // variável que receberá o ciclo de atuação do channel A int ciclo_B = 0; // промяна на изискванията за получаване на канал A WiFiServer сървър (порт); // деклариране на обект на сървър IP адрес Адрес myIP; // декларация за промяна на IP
Настройвам ()
Тук дефинираме изходните щифтове. Настройваме каналите на желаната честота и настройваме стойността на PWM.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // определение за pino de atuação A como saída pinMode (pin_Atuacao_B, OUTPUT); // определение за pino de atuação B como saída ledcSetup (canal_A, freq, resolucao); // Настройка на канал 0 за честота от 50 Hz и резолюция от 12 бита ledcSetup (channel_B, честота, резолюция); // Ajustando на канал 1 за честота от 50 Hz и резолюция от 12 бита ledcAttachPin (pin_Atuacao_A, channel_A); // пренасочване на канал 0 за пино 13 ledcAttachPin (pin_Atuacao_B, channel_B); // пренасочване на канал 1 пара или пино 12 ledcWrite (channel_A, ciclo_A); // определение за доблест до PWM параграф 0 ledcWrite (canal_B, ciclo_B); // определение за доблест до PWM параграф 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 e senha 12345678 Serial.println ("Obtendo IP"); // mensagem myIP = WiFi.softAPIP (); // получаване на IP до сървър (като не можете да конфигурирате deverá ser o padrão de fábrica) Serial.println ("IP:" + WiFi.localIP ()); // mensagem Serial.println ("Iniciando servidor em:" + String (порт)); // mensagem server.begin (); // iniciando o servidor}
Цикъл ()
В Loop първото нещо, което ще направим, е да създадем екземпляр на клиента, като се свържем и свържем с клиентската променлива. Проверете дали клиентът е свързан. Ако е така, стартираме променливата, която ще получи данните. Докато връзката е установена и ако се получат данни, четем знаците за променливата c. И накрая, ние свързваме c в променливата на данните.
void loop () {WiFiClient cliente = server.available (); // се свързвам с клиентите, свързваме с различна клиентка if (cliente.connected ()) {// се виждам с клиентите 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 Receber char c = cliente.read (); // leia os caracteres para a variável c dados = dados + c; // concatene c na variável dados
Ако се получи знак за нов ред, ние търсим индекса на знака „,“в низа в данните. Получаваме поднизовете до точно преди запетаята и след това ги преобразуваме в цяло число. Задаваме PWM на канали A и B. Изчистваме променливата.
if (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 до канал A ledcWrite (canal_B, ciclo_B); // Ajusta o PWM do channel B dados = ""; // Limpa a variável}}}}
Ако клиентът се прекъсне, ние потвърждаваме края на връзката. Изчакваме за момент и отпечатваме „Няма свързан клиент“. След това изчакваме още секунда, преди да рестартираме.
// caso o cliente se desconecte, потвърждава o fim da conexão забавяне (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado."); // забавяне на менсасем (1000); // aguarda um segundo antes de reiniciar}
Стъпка 8: Изходен код на клиента
Изявления
Отново включихме WiFi библиотеката, този път на клиента. Също така дефинираме променливите.
#include const char* ssid = "ESP32ap"; // SSID за достъп до 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; // варира que receberá o valor do ciclo do PWM A int ciclo_B = 0; // Variável que receberá o dolor do ciclo do PWM B WiFiClient client; // деклариране на клиенти
Настройвам ()
Определяме GPIO като вход, стартираме сериала и се свързваме с точката за достъп.
void setup () {pinMode (pin_Leitura_A, INPUT); // дефинираме GPIO como entrada pinMode (pin_Leitura_B, INPUT); // дефиниране на GPIO като въвеждане на Serial.begin (115200); // inicia a comunicação сериен WiFi.begin (ssid, парола); // conecta ao ponto de acesso}
Цикъл ()
В този цикъл ще се свържем със сървъра, което означава другия ESP.
void loop () {// не се свързва с ao ponto de acesso, тента се свързва докато (WiFi.status ()! = WL_CONNECTED) {Serial.println (String (millis ()) + " - Conectando без WiFi" + ssid + "…"); // mensagem WiFi.begin (ssid, парола); забавяне (2000); } Serial.println (String (millis ()) + " - Conectado …"); // mensagem // se não conectado ao servidor, tenta se conectar while (! cliente.connect (host, port)) {Serial.println (String (millis ()) + " - Conectando no Servidor" + host + ":" + порт + "…"); // забавяне на менсасем (1000); }
В тази стъпка, докато сме свързани със сървъра, ние изпълняваме променливите, за да съхраним показанията на ADC0 и ADC3. Също така извършихме отчитането на 500 проби и осреднихме показанията. Ние картографирахме четенето, за да създадем правилната продължителност за управление на сервомоторите, и го свързваме и изпращаме до сървъра.
// enquanto estiver conectado ao servidor while (cliente.connected ()) {int leitura_A = 0; // променлив параметър за арматура и ADC0 int leitura_B = 0; // променлив параметър за арматура и ADIC3 int amostras = 500; // номер на амострация 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 = 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)); }
И накрая, ако не е свързан, ние гарантираме, че връзката е прекратена, като показваме еквивалентното съобщение.
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Стъпка 9: Файлове
Изтеглете файловете:
АЗ НЕ
Препоръчано:
Камера за видеонаблюдение с NodeMCU + модул за камера на стар лаптоп (със и без използване на Blynk): 5 стъпки
Камера за видеонаблюдение с NodeMCU + модул за камера на стария лаптоп (със и без използване на Blynk): Здравейте момчета! В тази инструкция ще ви покажа как използвах модул за камера на стар лаптоп и nodeMCU, за да направя нещо подобно на CCTV
Най -лесната уеб камера като охранителна камера - Откриване на движение и снимки по имейл: 4 стъпки
Най -лесната уеб камера като камера за сигурност - Откриване на движение и снимки по имейл: Вече не е необходимо да изтегляте или конфигурирате софтуер, за да получавате картини, открити от движение от вашата уеб камера, до вашия имейл - просто използвайте браузъра си. Използвайте актуален браузър Firefox, Chrome, Edge или Opera в Windows, Mac или Android, за да заснемете снимката
Първи стъпки с ESP32 CAM - Поточно предаване на видео с помощта на ESP CAM през Wifi - Проект за охранителна камера ESP32: 8 стъпки
Първи стъпки с ESP32 CAM | Поточно предаване на видео с помощта на ESP CAM през Wifi | Проект за камера за сигурност ESP32: Днес ще научим как да използваме тази нова ESP32 CAM платка и как можем да я кодираме и използваме като камера за сигурност и да получим поточно видео през wifi
Направи си сам голяма камера за надземна камера под 50 $: 3 стъпки
Направи си сам голяма камера с надземна камера Под 50 $: Снимките отгоре могат да бъдат много ценни при определени видове продуктова фотография или дори художествени композиции. Но понякога сте с ограничен бюджет. Това обаче не трябва да спира вашата творческа работа. Вместо това потърсете други начини да направите тези снимки с c
Използвайте повторно модул за уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: 5 стъпки
Използвайте повторно модул на уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: Искам да подправя 14-годишния си Panasonic CF-18 с чисто нова уеб камера, но Panasonic вече не поддържа тази прекрасна машина, затова трябва да използвайте сивото вещество за нещо по -лесно от b & b (бири и бургери). Това е първата част