sexta-feira, 14 de novembro de 2014

Drone - Teste de ESC / Motor e Propeller

Fiz um novo teste, utilizando também o Propeller encaixado.
Motores 1000kv; ESC 30A e Propeller 1045, com um Arduino Uno + LCD Shield.




Código fonte para Arduino Uno com LCD Shield

 /*  
  Arduino ESC / Motor Brushless Test - by Valter F.C.  
  Porta PWM 3 -> S do ESC  
  Pino 5v -> 5v do BEC  
  Pino GND -> GND do BEC  
  ** OBS.: 5v e GND - opcional, pode usar conectado na USB do PC **  
   
  The circuit of LCD Shield:  
  * LCD RS pin to digital pin 8  
  * LCD Enable pin to digital pin 9  
  * LCD D4 pin to digital pin 4  
  * LCD D5 pin to digital pin 5  
  * LCD D6 pin to digital pin 6  
  * LCD D7 pin to digital pin 7  
  * LCD BL pin to digital pin 10  
  * KEY pin to analog pin 0  
  */  
   
 #include <LiquidCrystal.h>  
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //config LCD
   
 int value;  
 int pwmPort = 3;  
 int delayTime = 800; //500;
 int maxPwm = 255; //255  
 int minPwm = maxPwm/2; //0  
 int incPwm = 5; //5  
 float motorRPM = 1000.0;  
    
 void setup()
 {  
  pinMode(pwmPort, OUTPUT);  
  lcd.clear();   
  lcd.begin(16, 2);  
  lcd.setCursor(0,0);   
  lcd.print("ESC / Motor test");   
  writeInitialValue();  
  delay(7000); //time to init
 }  
   
 void loop()
 {  
  //up
  for(value=minPwm; value<=maxPwm; value=value+incPwm)  
  {  
   writeValue(); //write to ESC  
   writeValueToLCD();  
   delay(delayTime);  
  }  
    
  delay(3000);  
   
  //down
  for(value=maxPwm; value>=minPwm; value=value-incPwm)  
  {  
   writeValue(); //write to ESC  
   writeValueToLCD();  
   delay(delayTime);  
  }  
    
  delay(1000);  
 }  
   
 void writeInitialValue()
 {  
  value=maxPwm/2;  
  writeValue();  
 }  
   
 void writeValue()
 {  
  analogWrite(pwmPort, value); //write to ESC
 }  
   
 void writeValueToLCD()
 {  
  lcd.clear();  
  lcd.setCursor(0,0); // ----------------------
  lcd.print("Out: ");  
  lcd.print(100.0*value/maxPwm);  
  lcd.print(" %");  
  lcd.setCursor(0,1); // ----------------------
  lcd.print("RPM: ");  
  //lcd.print(value*motorRPM/(50+1));  
  lcd.print(value*motorRPM/maxPwm);  
  lcd.print(" kv");  
 }  
   

Este é o LCD, mostrando os pinos que utilizei.

Aqui é o máximo registrado pelo multímetro. Passou da capacidade máxima da fonte, mas foi um pulso rápido. O valor pode ter sido limitado pela própria fonte.