Πίνακας περιεχομένων:
- Βήμα 1: Χρησιμοποιημένοι πόροι
- Βήμα 2: NodeMCU ESP32S - Pinout
- Βήμα 3: Περιφερειακά ESP32
- Βήμα 4: Servo Motor Control PWM
- Βήμα 5: Αναλογική λήψη
- Βήμα 6: Κύκλωμα - Διακομιστής και Πελάτης
- Βήμα 7: Πηγαίος κώδικας του σημείου πρόσβασης και του διακομιστή
- Βήμα 8: Πηγαίος κώδικας πελάτη
- Βήμα 9: Αρχεία
Βίντεο: Κάμερα PANTILT Με ESP32: 9 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Σήμερα, θα παρουσιάσω το PAN TILT, το οποίο είναι μια συσκευή που επιτρέπει την κίνηση μιας κάμερας για τις κατευθύνσεις πάνω, κάτω και στα πλάγια. Εγώ ο ίδιος παρήγαγα αυτήν τη συσκευή μέσω τρισδιάστατων τμημάτων, χρησιμοποιώντας δύο servos και το ESP32, το οποίο καθιστά δυνατό τον έλεγχο αυτού του μηχανισμού μέσω WiFi. Ας κάνουμε στη συνέχεια αναγνώσεις χρησιμοποιώντας τα κανάλια AD του ESP32, καθώς και μια αναλογική λειτουργία χρησιμοποιώντας το χειριστήριο LED_PWM. Επίσης, εφαρμόζουμε τον έλεγχο σε σύνδεση TCP / IP.
Στο βίντεο, μπορείτε να δείτε ότι έχω ένα ESP32 που διαβάζει τις τιμές των δύο ποτενσιόμετρων, τα οποία αποστέλλονται (μέσω WiFi) σε ένα άλλο ESP32. Συνδέεται με τους δύο σερβοκινητήρες. Η κάμερα κινείται (και είναι προσαρτημένη στο PAN TILT) προς τις κατευθύνσεις προς τα πάνω, προς τα κάτω ή προς τα πλάγια, ανάλογα με το χειριστήριο που κάνετε μέσα από τις γλάστρες.
Ο σύνδεσμος για το σχέδιο 3D εκτύπωσης PAN TILT μπορείτε να βρείτε εδώ:
Βήμα 1: Χρησιμοποιημένοι πόροι
• Πολλαπλοί άλτες για σύνδεση
• Δύο κόμβοι MCU ESP32
• Δύο καλώδια USB για το ESP32
• WebCam για έλεγχο
• Δύο δοχεία ελέγχου
• Ένα πρωτοπόρο
• Πηγή για τα servos
Βήμα 2: NodeMCU ESP32S - Pinout
Βήμα 3: Περιφερειακά ESP32
Περιφερειακά PWM Το ESP32 διαθέτει δύο περιφερειακά που μπορούν να παράγουν σήματα PWM. Αυτές περιλαμβάνουν τον κινητήρα Pulse Width Modulator (MCPWM) που έχει σχεδιαστεί για έλεγχο ισχύος και κινητήρα και το LED_PWM, που έχει αναπτυχθεί για έλεγχο έντασης LED. Μπορούν όμως να χρησιμοποιηθούν και με γενικό τρόπο.
Θα χρησιμοποιήσουμε το LED_PWM, το οποίο μπορεί να δημιουργήσει 16 ανεξάρτητα κανάλια PWM με διαμορφώσιμες περιόδους και κύκλους εργασίας. Έχει ανάλυση έως 16 bit.
Βήμα 4: Servo Motor Control PWM
Ο έλεγχος του σερβοκινητήρα πραγματοποιείται με τη ρύθμιση της διαμόρφωσης πλάτους παλμού ενός τετραγώνου με συγκεκριμένη συχνότητα.
Για το σερβο που χρησιμοποιείται (όπως και για τα περισσότερα), η συχνότητα είναι στα 50Hz. Επίσης, ένα πλάτος από 1 έως 2ms μήκος παλμού καθορίζει τη γωνιακή θέση του σερβο.
Θα δρομολογήσουμε το κανάλι 0 του LED_PWM στο GPIO13 και το κανάλι 1 στο GPIO12, χρησιμοποιώντας αυτές τις πληροφορίες για να εκτελέσουμε τον έλεγχο.
Βήμα 5: Αναλογική λήψη
Περιφερειακή αναλογική προς ψηφιακή μετατροπή
Το ESP32 διαθέτει αναλογικούς σε ψηφιακούς μετατροπείς που μπορούν να εφαρμοστούν σε έως και 18 κανάλια, αλλά μόνο σε GPIO με αναλογική ενεργοποίηση.
Η εφαρμοζόμενη τάση δεν πρέπει να υπερβαίνει το εύρος 0 έως 3V.
Η μετατροπή που πραγματοποιείται δεν διατηρεί σταθερό σφάλμα για όλες τις τάσεις που δοκιμάστηκαν και όλα αυτά εξαρτώνται από το ρυθμισμένο εύρος. Για εύρος 150mV στα 2, 450V, απαιτείται έλεγχος συμπεριφοράς για πιο κρίσιμες εφαρμογές.
Για τη λήψη, θα χρησιμοποιήσουμε ένα ποτενσιόμετρο 10k ως διαχωριστή τάσης. Η λήψη θα γίνει στα κανάλια ADC0 και ADC3, προσβάσιμα από GPIO36 και GPIO39.
Βήμα 6: Κύκλωμα - Διακομιστής και Πελάτης
Βήμα 7: Πηγαίος κώδικας του σημείου πρόσβασης και του διακομιστή
Δηλώσεις
Περιλαμβάνω τη βιβλιοθήκη WiFi και ορίζω ορισμένες μεταβλητές.
#include // inclusão da 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; // Resolução usado no controlador 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"; // σταθερό com o SSID για WiFi για πρόσβαση σε ESP32 const char* password = "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; // Διαφορετικές παραλαβές για το κανάλι A διακομιστή WiFi (διακομιστής); // δηλώστε την υπηρεσία IPAddress myIP; // statementração da variável de IP
Ρύθμιση ()
Εδώ, ορίζουμε τις ακίδες εξόδου. Ρυθμίζουμε τα κανάλια στην επιθυμητή συχνότητα και ορίζουμε την τιμή PWM.
void setup () {pinMode (pin_Atuacao_A, OUTPUT); // ορισμός για το 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 126bits ledcSetup (canal_B, freq, resolutionucao); // Ajustando o canal 1 para frequência de 50 Hz e resolution with 12bits ledcAttachPin (pin_Atuacao_A, canal_A); // ανακατεύθυνση του καναλιού 0 παρά o pino 13 ledcAttachPin (pin_Atuacao_B, canal_B); // ανακατεύθυνση του καναλιού 1 παρά 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 και τον κωδικό πρόσβασης. Στη συνέχεια παίρνουμε την 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 (); // 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:" + String (port)); // mensagem server.begin (); // iniciando o servidor}
Βρόχος ()
Στο Loop, το πρώτο πράγμα που πρόκειται να κάνουμε είναι να προωθήσουμε τον πελάτη, να συνδεθούμε και να συνδεθούμε με τη μεταβλητή πελάτη. Ελέγξτε εάν ο πελάτης είναι συνδεδεμένος. Αν ναι, ξεκινάμε τη μεταβλητή που θα λάβει τα δεδομένα. Όσο η σύνδεση είναι εγκατεστημένη και αν ληφθούν δεδομένα, διαβάζουμε τους χαρακτήρες για τη μεταβλητή c. Τέλος, συνδέουμε το c στη μεταβλητή δεδομένων.
void loop () {WiFiClient cliente = server.available (); // se um cliente conectar, associe 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 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
Εάν ληφθεί ένας χαρακτήρας νέας γραμμής, αναζητούμε το ευρετήριο του χαρακτήρα ',' στη συμβολοσειρά στα δεδομένα. Παίρνουμε τα υποσύμβολα μέχρι ακριβώς πριν από το κόμμα και στη συνέχεια τα μετατρέπουμε σε ακέραιο. Ρυθμίζουμε το PWM των καναλιών Α και Β. Καθαρίζουμε τη μεταβλητή.
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 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, αυτή τη φορά στον πελάτη. Επίσης, ορίζουμε τις μεταβλητές.
#include const char* ssid = "ESP32ap"; // SSID do ponto de acesso 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; // variável que receberá o valor do ciclo do PWM A int ciclo_B = 0; // Δοκιμάστε την παραλαβή ή την αξία του πελάτη PWM B WiFiClient. // statementração do objeto cliente
Ρύθμιση ()
Ορίζουμε τα GPIO ως είσοδο, ξεκινάμε τη σειρά και συνδέουμε το σημείο πρόσβασης.
void setup () {pinMode (pin_Leitura_A, INPUT); // ορίστε το GPIO como entrada pinMode (pin_Leitura_B, INPUT); // ορίστε το GPIO como entrada Serial.begin (115200); // inicia a comunicação serial 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, κωδικός πρόσβασης); καθυστέρηση (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 + ":" + θύρα + "…"); // 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)); }
Τέλος, εάν δεν είναι συνδεδεμένο, διασφαλίζουμε ότι η σύνδεση έχει τερματιστεί εμφανίζοντας το αντίστοιχο μήνυμα.
// για να το κάνετε αυτό, εγγυηθείτε ότι θα βρείτε μια τελική εξυπηρέτηση cliente.stop (); Serial.println (String (millis ()) + " - cliente desconectado …"); // mensagem}
Βήμα 9: Αρχεία
Κατεβάστε τα αρχεία:
ΕΓΩ ΔΕΝ
Συνιστάται:
LED LIGHT DIY για κάμερα Web (C920): 10 βήματα (με εικόνες)
LED LIGHT DIY για κάμερα Web (C920): Ο φωτισμός είναι απαραίτητος για μια κάμερα ιστού. Αυτός ο μικρός δακτύλιος LED βοηθά την κάμερα του προσώπου σας να σας πάει πολύ καλά. Μπορείτε να τραβήξετε ένα βίντεο χωρίς κανένα φως εκτός από αυτό το LED. Χρησιμοποίησα έναν τρισδιάστατο εκτυπωτή και μονάδα LED WS2812b (συμβατό με Neopixel)
Κάμερα IP με ανίχνευση προσώπου χρησιμοποιώντας την πλακέτα ESP32-CAM: 5 βήματα
Κάμερα IP με ανίχνευση προσώπου χρησιμοποιώντας τον πίνακα ESP32-CAM: Αυτή η ανάρτηση είναι διαφορετική σε σύγκριση με τις άλλες και ρίχνουμε μια ματιά στην πολύ ενδιαφέρουσα πλακέτα ESP32-CAM που είναι εκπληκτικά φθηνή (λιγότερο από $ 9) και εύκολη στη χρήση. Δημιουργούμε μια απλή κάμερα IP που μπορεί να χρησιμοποιηθεί για τη ροή ζωντανής ροής βίντεο χρησιμοποιώντας το 2
Η ευκολότερη κάμερα web ως κάμερα ασφαλείας - Ανίχνευση κίνησης και εικόνες με email: 4 βήματα
Η ευκολότερη κάμερα ως κάμερα ασφαλείας - Ανίχνευση κίνησης και εικόνες μέσω ηλεκτρονικού ταχυδρομείου: Δεν χρειάζεται πλέον να κατεβάζετε ή να διαμορφώνετε λογισμικό για να λαμβάνετε εικόνες που εντοπίζονται από την κάμερα στο email σας - απλά χρησιμοποιήστε το πρόγραμμα περιήγησής σας. Χρησιμοποιήστε ένα ενημερωμένο πρόγραμμα περιήγησης Firefox, Chrome, Edge ή Opera σε Windows, Mac ή Android για να τραβήξετε την εικόνα
Upcycled κάμερα εφεδρική κάμερα: 7 βήματα (με εικόνες)
Upcycled Camcorder Backup Camera: Είμαι βέβαιος ότι οι περισσότεροι από εσάς που διαβάζετε αυτό έχετε ένα συρτάρι ή ένα ντουλάπι κάπου γεμάτο από κάποτε αγαπημένη τεχνολογία που μόλις έχει γίνει πολύ παλιά και ξεπερασμένη. Σίγουρα έχω το μερίδιό μου στην παλιά τεχνολογία και είναι λυπηρό να βλέπω τέτοιες δυνατότητες να χάνονται. Λοιπόν, σε αυτόν τον οδηγό, είμαι
Μετατρέποντας την κάμερά σας σε "στρατιωτική νυχτερινή όραση", προσθέτοντας εφέ νυχτερινής όρασης ή δημιουργώντας λειτουργία νυχτερινής όρασης σε οποιαδήποτε κάμερα !!!: 3 βήματα
Μετατροπή της φωτογραφικής σας μηχανής σε "στρατιωτικό Nightvision", Προσθήκη εφέ Nightvision ή Δημιουργία Λειτουργίας NightVision "Σε οποιαδήποτε κάμερα !!! *Εάν χρειάζεστε βοήθεια, στείλτε email: [email protected] Μιλάω αγγλικά, γαλλικά, ιαπωνικά, ισπανικά και γνωρίζω άλλες γλώσσες αν είστε