CONTROLAR MOTOR ESCOVADO E SEM ESCOVA, COM ARDUINO
Página 1 de 1
CONTROLAR MOTOR ESCOVADO E SEM ESCOVA, COM ARDUINO
No arduino voce pode inserir o controle via Wifi, Bluetooth ou IR para controlar o motor! (Ideia não tratada aqui).
A biblioteca servo.h do arduino é usada para executar o ESC. Os princípios operacionais do ESC e dos servos são os mesmos. Ambos são controlados por um sinal PWM.
O valor fornecido pelo potenciômetro da entrada analógica está entre 0 e 1023. Se usarmos esses valores diretamente, obteremos resultados inconsistentes. Portanto, com o comando "map", convertemos esse valor em um valor mínimo de 0 a um máximo de 180, o que o ESC entende. É o mesmo para servomotores.
Os ESCs bidirecionais operam com um intervalo de valores diferente do unidirecional. O ponto em que o motor não liga é o ponto do meio. Portanto, o valor 180/2 = 90 é teoricamente o ponto central. A operação é fornecida em uma direção entre 90 e 180 e na outra direção entre 90 e 0. Embora o ponto central seja 90 em teoria, ele pode ser praticamente um pouco para cima ou para baixo. Por exemplo, para a combinação ESC e Motor mostrada na figura acima, o ponto médio está entre 72 e 82 e o motor não funcionará entre esses valores. Esse ponto pode ser facilmente detectado girando a potência para a esquerda e direita, pois podemos ver o valor atual no Monitor Serial.
Há um "loop for" no código. Este ciclo também é possível sem operação. No entanto, com este ciclo, o valor da entrada analógica é somado 50 vezes e calculado a média e é obtida uma operação mais estável. Em particular, o motor pode fazer pequenos movimentos por conta própria devido a pequenos vazamentos de dados, principalmente quando se espera no ponto médio, ou seja, onde o motor não deve dar partida. Como o valor médio obtido com o "loop for" é enviado ao mecanismo, podemos evitar esses pequenos saltos. A razão pela qual o ciclo é realizado 50 vezes é que eu determinei o valor mais razoável como resultado dos meus testes. Se mais, observei atrasos e interrupções no comando do motor.
*(Texto traduzido pelo google).
Abaixo o video com motor escovado e sem escova.
CODIGO 1
- Código:
#include <Servo.h> //Arduino Servo Library
Servo ESC; // ESC için bir obje tanımlanıyor.
float value; // Analog pin A1 den veri okuma için değişken tanımlaması.
void setup()
{
Serial.begin(9600);
ESC.attach(3); // Pin 3 den PWM sinyal çıkışı.
}
void loop() {
for(int i = 0; i < 50; i++)
{
value=value+analogRead(A1); // Potansiyometreden gelen değeri daha kararlı veriye çevirmek için 50 kez toplanıp ortalamasının alınması.
delay(1);
}
value=value/50; // Ortalama değer
value=map(value, 0, 1023, 0, 180); // Analog girişten okunan değerin ESC nin anlayacağı değerlere çevrilmesi.
ESC.write(value); // Potansiyometreden gelen değere göre ESC / servo konumunu ayarlar.
Serial.print("Değer= ");
Serial.println(value);
}
CODIGO 2
- Código:
#include <Servo.h> // Arduino Servo Library (Servo motor kütüphanesi ESC için de kullanılır)
#include <Wire.h> // Include Wire library (I2C device için gerekli)
#include <Adafruit_GFX.h> // Include Adafruit graphics library
#include <Adafruit_SH1106.h> // SH1106 library (SH1106 Çipli Oled ekran için kütüphane)
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);
#if (SH1106_LCDHEIGHT != 64)
#error(“Height incorrect, please fix Adafruit_SH1106.h!”);
#endif
int y;
String Durum;
Servo ESC; // ESC için bir obje tanımlanıyor. (Object identification for esc)
int long value; // Analog pin A1 den veri okuma için değişken tanımlaması. (Variable for A1 pin data)
void setup()
{
display.begin(SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.display();
ESC.attach(3); // Pin 3 den PWM sinyal çıkışı. (Sending PWM signals from pin 3)
}
void loop() {
for(int i = 0; i < 50; i++)
{
value=value+analogRead(A1); // Potansiyometreden gelen değeri daha kararlı veriye çevirmek için 50 kez toplanıp ortalamasının alınması (To obtain a more stable result from the potentiometer data, collect 50 times and get the average)
delay(1);
}
value=value/50; // Ortalama değer
value=map(value, 0, 1023, 0, 180); // Analog girişten okunan değerin ESC nin anlayacağı değerlere çevrilmesi. (Converting the value read from the analog input to the values that the ESC will understand)
ESC.write(value); // Potansiyometreden gelen değere göre ESC / servo konumunu ayarlar. (Sets the ESC / servo position according to the value from the potentiometer.)
if(value<92) Durum = "< REVERSE";
if(value>102) Durum = "FORWARD >";
if(value>92 && value<104) Durum = " CENTER";
if (value<100) y=55; else y=49;
//display.setTextSize(1);
display.setCursor(14,9);
display.print(Durum);
display.setCursor(y,39);
display.print(value);
display.display();
display.clearDisplay();
}
Fonte:
https://www.kendinyap.xyz/
jhugor@modelaria.tk
Tópicos semelhantes
» CONTROLAR MOTOR ESCOVADO E SEM ESCOVA, COM ARDUINO
» motor ligacao
» CONTROLE REMOTO COM ARDUINO
» OTIMOS LINKS DE SITES ARDUINO
» motor ligacao
» CONTROLE REMOTO COM ARDUINO
» OTIMOS LINKS DE SITES ARDUINO
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos