Buongiorno,
vorrei realizzare un progetto con Arduino. Per farlo ho bisogno di un motore brushless e un servo motore i quali verranno comandati tramite app (ho usato http://www.roboremo.com) con degli slider, uno per motore che inviano una serie di numeri che é da 0 a 12 per il brushless e da 0 a 8 per il servo preceduti da una lettera h per il brushless e c per il servo. Ho usato un range cosi piccolo di valori perche ho notato che diminuivano i disturbi rispetto a quando usavo tutti valori da 0 a 180.
Ho già creato il programma e collegato opportunamente entrambi i motori e il bluetooth, il tutto sembra funzionare sul monitor seriale che mostra tutti i valori giusti. Quando pero si collegano i motori sono presenti dei disturbi che mandano il motore brushless alla velocità massima per un instante. Si notano anche con l'oscilloscopio, collegato alle due uscite senza i motori, i segnali in uscita si disturbano a vicenda quando si cerca di variare uno l'altro cambia i suoi valori con dei picchi quando non dovrebbe.
Il programma é il seguente:
#include <SoftwareSerial.h>
#include <Servo.h>
//dichiaro i due motori
Servo servo; //servo motore
Servo esch; //motore brushless
//set pin bluetooth
int rxPin = 2; // rx va sul pin 2
int txPin = 3;
SoftwareSerial bluetooth(rxPin, txPin);
String message; //variabile in cui viene salvato il dato che viene inviato dal bluetooth
// nel nostro caso potra essere hXX o sXX (le XX stanno per il numero deciso dallo slider)
String lettera; //in questa variabile salveremo solo la lettera di tutto il messaggio
String strpwm; //in quest'altra salveremo il numero come una stringa che verra poi trasformato
//in intero (int) e salvato nella variabile pwm
int pwm=0;
int val=0; //valore finale usato per il controllo dei motori
void setup()
{
Serial.begin(115200); //set baud rate
bluetooth.begin(9600); //set baud rate
esch.attach(9); //set pin motori
servo.attach(6);
}
void loop()
{
while(bluetooth.available()) // Programma per il bluetooth gia usato in precedenza
{ //ha sempre funzionato
message+=char(bluetooth.read());
delay(1); //piccolo delay per dare il tempo di salvare il messaggio
}
if(!bluetooth.available())
{
if(message!="")
{
lettera=message.substring(0,1); //estraggo dal messaggio solo il primo pezzo la lettera e
//la assegno alla variabile lettera
strpwm=message.substring(1); //assegno a stream tutto il resto del messaggio
int pwm=strpwm.toInt(); //converto la stringa strpwm in un intero pwm
if (lettera=="c") //controllo la variabile lettera per capire in che caso sono
{
Serial.println("curv");
val=map(pwm,0,8,0,180); //funzione che "mappa" il valore che tra 0 e 8 tra 0 e 180
servo.write(val); //invio il valore alla funzione che crea il segnale per il servo
Serial.println(val);
delay(30);
}
if (lettera=="h") //stessa cosa di prima
{
Serial.println("alte");
val=map(pwm,0,12,0,180);
esch.write(val);
Serial.println(val);
delay(30);
}
message=""; //ripulisco tutti i valori
pwm=0;
strpwm="";
}
}
}
Componenti utilizzati:
-Bluetooth(HC-06 FC-114)
-Arduino uno
-Motore brushless King Kong 2204
-Esc per il brushless King Kong BLHeli 12A opto 3-4S
-Batteria per il brushless Turnigy 2200mAh 4S (14.8V) 40-50C
-Servo motore sm-s2309s
-Batteria 9V per Arduino Bluetooth e Servo motore
Spero di essere stato il più chiaro possibile, cerco una soluzione, aiutatemi perfavore e fate domande se non avete capito qualcosa!
Grazie in anticipo.