সুচিপত্র:
- ধাপ 1: ব্যবহৃত সম্পদ
- ধাপ 2: NodeMCU ESP32S - Pinout
- ধাপ 3: ESP32 পেরিফেরালস
- ধাপ 4: Servo মোটর নিয়ন্ত্রণ PWM
- ধাপ 5: এনালগ ক্যাপচার
- ধাপ 6: সার্কিট - সার্ভার এবং ক্লায়েন্ট
- ধাপ 7: অ্যাক্সেস পয়েন্ট এবং সার্ভারের সোর্স কোড
- ধাপ 8: গ্রাহক সোর্স কোড
- ধাপ 9: ফাইল
ভিডিও: ESP32 সঙ্গে PANTILT ক্যামেরা: 9 ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:01
আজ, আমি প্যান টিআইএলটি উপস্থাপন করব, যা এমন একটি ডিভাইস যা ক্যামেরার চলাচলকে উপরে, নিচে এবং পাশের দিক নির্দেশের জন্য সক্ষম করে। আমি নিজে দুটি সার্ভ এবং ESP32 ব্যবহার করে 3D মুদ্রিত অংশগুলির মাধ্যমে এই ডিভাইসটি তৈরি করেছি, যা ওয়াইফাইয়ের মাধ্যমে এই প্রক্রিয়াটি নিয়ন্ত্রণ করা সম্ভব করে তোলে। আসুন আমরা ESP32 এর AD চ্যানেল ব্যবহার করে রিডিং গ্রহণ করি, সেইসাথে LED_PWM নিয়ামক ব্যবহার করে একটি এনালগ অপারেশন। এছাড়াও, আমরা একটি টিসিপি / আইপি সংযোগের উপর নিয়ন্ত্রণ প্রয়োগ করি।
ভিডিওতে, আপনি দেখতে পাচ্ছেন যে আমার একটি ESP32 দুটি potentiometers এর মান পড়ছে, যা অন্য ESP32 তে (WiFi এর মাধ্যমে) পাঠানো হয়। এটি দুটি সার্ভো মোটরের সাথে সংযুক্ত। পাত্রের মাধ্যমে আপনি যে নিয়ন্ত্রণ করেন তার উপর নির্ভর করে ক্যামেরাটি উপরে, নিচে বা পাশের দিকে চলে (এবং প্যান টিআইএলটি -এর সাথে সংযুক্ত থাকে)।
PAN TILT 3D প্রিন্ট ডিজাইনের লিঙ্ক এখানে পাওয়া যাবে:
ধাপ 1: ব্যবহৃত সম্পদ
For সংযোগের জন্য একাধিক জাম্পার
• দুটি নোড MCU ESP32s
SP ESP32 এর জন্য দুটি USB তারের
Web নিয়ন্ত্রণের জন্য একটি ওয়েবক্যাম
Control দুটি নিয়ন্ত্রণ পাত্র
Prot একটি প্রোটোবোর্ড
Os servos জন্য একটি উৎস
ধাপ 2: NodeMCU ESP32S - Pinout
ধাপ 3: ESP32 পেরিফেরালস
PWM পেরিফেরালস ESP32 এর দুটি পেরিফেরাল আছে যা PWM সিগন্যাল তৈরি করতে সক্ষম। এর মধ্যে রয়েছে বিদ্যুৎ এবং মোটর নিয়ন্ত্রণের জন্য পরিকল্পিত পালস প্রস্থ মডুলেটর (MCPWM) ইঞ্জিন এবং LED তীব্রতা নিয়ন্ত্রণের জন্য উন্নত LED_PWM। কিন্তু সেগুলি জেনেরিক উপায়েও ব্যবহার করা যেতে পারে।
আমরা LED_PWM ব্যবহার করব, যা কনফিগারযোগ্য পিরিয়ড এবং কাজের চক্র সহ 16 টি স্বতন্ত্র PWM চ্যানেল তৈরি করতে পারে। এতে 16 বিট পর্যন্ত রেজোলিউশন রয়েছে।
ধাপ 4: Servo মোটর নিয়ন্ত্রণ PWM
নির্দিষ্ট ফ্রিকোয়েন্সি সহ একটি বর্গের পালস প্রস্থ মডুলেশন সমন্বয় করে সার্ভো মোটর নিয়ন্ত্রণ করা হয়।
ব্যবহৃত servo (সেইসাথে অধিকাংশ জন্য) জন্য, ফ্রিকোয়েন্সি 50Hz হয়। এছাড়াও, 1 থেকে 2ms পালস দৈর্ঘ্যের একটি প্রস্থ servo এর কৌণিক অবস্থান নির্ধারণ করে।
আমরা LED_PWM- এর চ্যানেল 0 কে GPIO13, এবং চ্যানেল 1 থেকে GPIO12- এ রুট করব, এই তথ্য ব্যবহার করে নিয়ন্ত্রণ করতে।
ধাপ 5: এনালগ ক্যাপচার
ডিজিটাল রূপান্তর পেরিফেরাল থেকে এনালগ
ইএসপি 32 এর এনালগ-টু-ডিজিটাল কনভার্টার রয়েছে যা 18 টি চ্যানেলে প্রয়োগ করা যেতে পারে, তবে শুধুমাত্র এনালগ-সক্ষম GPIO- তে।
প্রয়োগ করা ভোল্টেজ 0 থেকে 3V পরিসরের বেশি হওয়া উচিত নয়।
সঞ্চালিত রূপান্তর নমুনাযুক্ত সমস্ত ভোল্টেজের জন্য একটি ধ্রুবক ত্রুটি বজায় রাখে না এবং এটি সমস্ত কনফিগার করা পরিসরের উপর নির্ভর করে। 2, 450V এ 150mV এর পরিসরের জন্য, আরো জটিল অ্যাপ্লিকেশনের জন্য একটি আচরণ পরীক্ষা প্রয়োজন।
ক্যাপচারের জন্য, আমরা ভোল্টেজ ডিভাইডার হিসাবে 10k এর একটি potentiometer ব্যবহার করব। GPIO36 এবং GPIO39 দ্বারা অ্যাক্সেসযোগ্য ADC0 এবং ADC3 চ্যানেলে ক্যাপচার করা হবে।
ধাপ 6: সার্কিট - সার্ভার এবং ক্লায়েন্ট
ধাপ 7: অ্যাক্সেস পয়েন্ট এবং সার্ভারের সোর্স কোড
বিবৃতি
আমি ওয়াইফাই লাইব্রেরি অন্তর্ভুক্ত করি, এবং আমি কিছু ভেরিয়েবল সংজ্ঞায়িত করি।
#অন্তর্ভুক্ত // inclusão da biblioteca WiFi const int freq = 50; // Frequência do PWM const int canal_A = 0; // প্রাইমিরো খাল কন্ট্রোলোডার LED_PWM const int canal_B = 1; // সেগুন্ডো খাল কন্ট্রোলোডার LED_PWM const int resolucao = 12; // রিসোলিউশন ইউস্যাডো কোন কন্ট্রোলার LED_PWM const int int_tuacao_A = 13; // পিনো প্যারা ওন্ডে ও খাল 0 সেরá রেডাইরেসিয়ানোডো কনস্ট ইন্ট পিন_আটুয়াকাও_বি = 12; // পিনো প্যারা ওন্ডে ও ক্যানাল 1 সেরá রেডাইরেসিয়োনোড কনস্ট চার* এসএসআইডি = "ইএসপি 32ap"; // ধ্রুবক com o SSID do WiFi do ponto de acesso ESP32 const char* password = "12345678"; // সেনহা প্যারা কনফার্মçãো ডি কনেক্সো নো পন্টো ডি অ্যাসেসো কনস্ট ইন্ট পোর্ট = 2; // porta na qual o servidor receberá conexões int ciclo_A = 0; // variável que receberá o ciclo de atuação do খাল A int ciclo_B = 0; // variável que receberá o ciclo de atuação do canal A WiFiServer server (port); // declaração do objeto servidor IPAddress myIP; // declaração da variável de IP
সেটআপ ()
এখানে, আমরা আউটপুট পিন সংজ্ঞায়িত করি। আমরা চ্যানেলগুলিকে পছন্দসই ফ্রিকোয়েন্সি সেট করি এবং PWM মান সেট করি।
অকার্যকর সেটআপ () {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 (canal_A, freq, resolucao); // Ajustando o খাল 0 para Frequência de 50 Hz e resolução de 12bits ledcSetup (canal_B, freq, resolucao); // Ajustando o খাল 1 প্যারা ফ্রিকোয়েন্সিয়া ডি 50 Hz e resolução de 12bits ledcAttachPin (pin_Atuacao_A, canal_A); // redirecionando o খাল 0 para o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // redirecionando o খাল 1 para o pino 12 ledcWrite (canal_A, ciclo_A); // definindo o valor do PWM para 0 ledcWrite (canal_B, ciclo_B); // definindo o valor do PWM para 0
আমরা সিরিয়াল শুরু করেছি, SSID ESP32ap, এবং পাসওয়ার্ড দিয়ে অ্যাক্সেস পয়েন্ট। আমরা তখন সার্ভারের আইপি পাই এবং সার্ভার চালু করি।
Serial.begin (115200); // iniciando a Serial Serial.println ("Iniciando ponto de acesso:" + স্ট্রিং (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 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 (); // iniciando o servidor}
লুপ ()
লুপে, আমরা প্রথমে যা করতে যাচ্ছি তা হল ক্লায়েন্টকে তাত্ক্ষণিক করা, ক্লায়েন্ট ভেরিয়েবলের সাথে সংযুক্ত করা এবং বাঁধাই করা। ক্লায়েন্ট সংযুক্ত আছে কিনা তা পরীক্ষা করুন। যদি তাই হয়, আমরা সেই ভেরিয়েবল শুরু করি যা ডেটা গ্রহণ করবে। যতক্ষণ পর্যন্ত সংযোগটি প্রতিষ্ঠিত হয়, এবং যদি ডেটা পাওয়া যায়, আমরা পরিবর্তনশীল c এর অক্ষরগুলি পড়ি। অবশেষে, আমরা ডেটা ভেরিয়েবলে c সংযুক্ত করি।
অকার্যকর লুপ () {WiFiClient cliente = server.available (); // se um cliente conectar, a variável cliente if (cliente.connected ()) {// se há um cliente conectado String dados = ""; // inicia a variável que receberá os dados Serial.println ("Cliente conectado।"); // mensagem while (cliente.connected ()) {// enquanto a conexão estiver establishelecida 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
যদি একটি নতুন রেখা অক্ষর পাওয়া যায়, আমরা ডেটার স্ট্রিংয়ে ',' অক্ষরের সূচকটি সন্ধান করি। আমরা কমা আগে ডান পর্যন্ত সাবস্ট্রিং পেতে, এবং তারপর আমরা তাদের পূর্ণসংখ্যা রূপান্তর। আমরা A এবং B চ্যানেলের PWM সেট করি।
যদি (c == '\ n') {// se um caracter de nova linha for recebido int virgula = dados.indexOf (','); // পেলো íন্ডিস ডু ক্যারেক্টার ',' না স্ট্রিং এম ড্যাডোস সিকলো_এ = (ডেডোস। সাবস্ট্রিং (0, ভার্জুলা))। 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}}}}
যদি ক্লায়েন্ট সংযোগ বিচ্ছিন্ন করে, আমরা সংযোগের সমাপ্তি নিশ্চিত করি। আমরা কিছুক্ষণ অপেক্ষা করি এবং "কোন ক্লায়েন্ট সংযুক্ত নেই" মুদ্রণ করি। আমরা পুনরায় আরম্ভ করার আগে আরেক সেকেন্ড অপেক্ষা করি।
// caso o clientend se desconecte, confirma o fim da conexão বিলম্ব (50); // aguarda um momento cliente.stop (); Serial.println ("Nenhum cliente conectado।"); // mensagem বিলম্ব (1000); // aguarda um segundo antes de reiniciar}
ধাপ 8: গ্রাহক সোর্স কোড
বিবৃতি
আমরা আবার ওয়াইফাই লাইব্রেরি অন্তর্ভুক্ত করেছি, এবার ক্লায়েন্টের উপর। এছাড়াও, আমরা ভেরিয়েবল সংজ্ঞায়িত করি।
#অন্তর্ভুক্ত const char* ssid = "ESP32ap"; // SSID do ponto de acesso ESP32 const char* password = "12345678"; // সেনহা প্যারা অ্যাসেসার হে পন্টো ডি অ্যাসেসো কনস্ট 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 receberá o valor do ciclo do PWM B WiFiClient cliente; // declaração do objeto cliente
সেটআপ ()
আমরা জিপিআইওগুলিকে ইনপুট হিসাবে সংজ্ঞায়িত করি, সিরিয়াল শুরু করি এবং অ্যাক্সেস পয়েন্টের সাথে সংযুক্ত হই।
অকার্যকর সেটআপ () {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, password); // 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, password); বিলম্ব (2000); } Serial.println (স্ট্রিং (মিলিস ()) + " - কানেকটেডো …"); // 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); কনটাডোর ++; } leitura_A = leitura_A / amostras; // miadia 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)); }
অবশেষে, যদি সংযুক্ত না হয়, আমরা নিশ্চিত করি যে সমতুল্য বার্তা প্রদর্শন করে সংযোগটি বন্ধ করা হয়েছে।
// se não coonectado, garante que a conexão foi finalizada cliente.stop (); Serial.println (String (millis ()) + " - client desconectado…"); // mensagem}
ধাপ 9: ফাইল
ফাইল ডাউনলোড করুন:
পিডিএফ
আইএনও
প্রস্তাবিত:
NodeMCU + পুরাতন ল্যাপটপের ক্যামেরা মডিউল সহ সিসিটিভি ক্যামেরা (Blynk ব্যবহার না করে এবং ছাড়া): 5 টি ধাপ
NodeMCU + পুরাতন ল্যাপটপের ক্যামেরা মডিউল সহ সিসিটিভি ক্যামেরা (Blynk ব্যবহার না করেই): হাই বন্ধুরা! এই নির্দেশনায়, আমি আপনাকে দেখাতে যাচ্ছি কিভাবে আমি একটি পুরানো ল্যাপটপের ক্যামেরা মডিউল এবং নোড এমসিইউ ব্যবহার করে সিসিটিভির মতো কিছু তৈরি করতে
ঘূর্ণন অক্ষ সঙ্গে বস্তু ট্র্যাকিং ক্যামেরা স্লাইডার। 3D মুদ্রিত এবং RoboClaw ডিসি মোটর কন্ট্রোলার এবং Arduino উপর নির্মিত: 5 ধাপ (ছবি সহ)
ঘূর্ণন অক্ষ সঙ্গে বস্তু ট্র্যাকিং ক্যামেরা স্লাইডার। 3D মুদ্রিত এবং RoboClaw ডিসি মোটর কন্ট্রোলার এবং Arduino এ নির্মিত: এই প্রকল্পটি আমার প্রিয় প্রকল্পগুলির মধ্যে একটি ছিল যেহেতু আমি DIY এর সাথে ভিডিও তৈরির প্রতি আমার আগ্রহকে একত্রিত করেছি। আমি সবসময় দেখেছি এবং সিনেমার শটগুলিকে সিনেমায় অনুকরণ করতে চেয়েছি যেখানে একটি ক্যামেরা স্ক্রিন জুড়ে চলে যায় যখন এটি ট্র্যাক করার জন্য প্যানিং করে
Arduino মাইক্রো সঙ্গে সেন্সর/ আরএফ যোগাযোগ সঙ্গে রাগ: 4 ধাপ (ছবি সহ)
Arduino মাইক্রো দিয়ে সেন্সর/ আরএফ যোগাযোগের সাথে রাগ: আমি সম্প্রতি সমানভাবে বৈচিত্র্যপূর্ণ ইনস্টলেশন সমাপ্ত করেছি, যা প্রদীপের একটি সিরিজ দিয়ে তৈরি যা প্রদীপের নীচে একটি পাটিতে রাখা সেন্সরগুলিতে প্রতিক্রিয়া জানায়। এখানে আমি কীভাবে চাপ সেন্সর দিয়ে পাটি তৈরি করেছি। আমি আশা করি আপনি এটি দরকারী পাবেন।
ইউনিকর্ন ক্যামেরা - রাস্পবেরি পাই জিরো ডব্লিউআইআর 8 এমপি ক্যামেরা বিল্ড: 7 টি ধাপ (ছবি সহ)
UNICORN ক্যামেরা - রাস্পবেরি পাই জিরো W NoIR 8MP ক্যামেরা বিল্ড: Pi Zero W NoIR 8MP ক্যামেরা বিল্ড এই নির্দেশনাটি যে কেউ ইনফ্রারেড ক্যামেরা বা সত্যিই কুল পোর্টেবল ক্যামেরা বা একটি পোর্টেবল রাস্পবেরি পাই ক্যামেরা চায় বা শুধু মজা করতে চায়, হেহেহে । এটি সবচেয়ে সাশ্রয়ী মূল্যের এবং কনফিগারযোগ্য
ENV2 বা অন্যান্য ক্যামেরা ফোনের জন্য ক্যামেরা স্টেবিলাইজার: 6 টি ধাপ
ENV2 বা অন্যান্য ক্যামেরা ফোনের জন্য ক্যামেরা স্ট্যাবিলাইজার: কখনও একটি ভিডিও তৈরি করতে চান কিন্তু আপনার কেবল একটি ক্যামেরা ফোন আছে? আপনি কি কখনও ক্যামেরা ফোন দিয়ে একটি ভিডিও তৈরি করেছেন কিন্তু আপনি এটিকে ধরে রাখতে পারেন না? এর চেয়ে ভাল আপনার জন্য নির্দেশযোগ্য