Amigos
Vou montar um carro fazendo o chassi com o Rasti (www.rasti.com.ar)
No kit tem caixa de transmissão, rodas, eixos (montei muitos modelos lá nos anos 80, é tipo Lego, mas mais barato e mais modular, já que são poucas peças básicas)
Tem no ML e um kit custa barato
No meu projeto, no entanto, vou acionar um motor DC, e um servo, que vai controlar o eixo dianteiro. Uma vez dominado essa parte, farei os sensores atuarem e alguma inteligência para superar obstáculos
Sei que é mais fácil usar dois motores e tração diferencial. Mas decidi montar esse esquema, e vou estudar até o fim
Enfim, montei o prototipo, controlando um motor DC com um potenciômetro, e o servo com outro potenciômetro. Em separado eles rodam bem, mas juntos o servo trava, e o motor não funciona
Já descobri que quando o servo atua, algumas saídas ficam fora do ar na função PWM. Até achei que era problema de como as rotinas eram executadas, que a rotina do servo travava o motor, e programei de diversas maneiras, mas o treco não vai...
Abaixo o código que estou usando:
/*
- Rodando motor e servo
*/
#include <Servo.h>
Servo myservo; //Create servo object to control a servo
int pinopotservo = A0; //Define porta analogica de entrada do potenciometro de controle do servo
int val; //Armazena valor lido do potenciometro do servo
int pinomotor = 6; //Pino ligado a base do transistor
int pinopotmotor = A5; //Define porta analogica de entrada do potenciometro de controle do motor
int valorpotmotor = 0; //Armazena valor lido do potenciometro do motor, entre 0 e 1023
float rotacaomotor = 0; //Valor de rotacao do motor
void setup()
{
myservo.attach(3); //Define a porta de saida para o sinal de controle do servo
pinMode(pinomotor, OUTPUT); //Define o pino do motor como saída
pinMode(pinopotmotor, INPUT); //Define o pino do potenciometro do motor como entrada
pinMode(pinopotservo, INPUT); //Define o pino do potenciometro do servo como entrada
}
int motor() {
valorpotmotor = analogRead(pinopotmotor); //Le o valor - analogico - do pino do potenciometro
rotacaomotor = map(valorpotmotor, 0, 1023, 50, 255); //Converte e atribui para a variavel "rotacao" o valor lido do potenciometro - detalhe que o valor minimo impede a parada do motor
analogWrite(pinomotor, rotacaomotor); //Envia sinal analogico para a saída do motor, com rotacao variavel
}
int servo() {
val = analogRead(pinopotservo); //Le o valor do potenciometro (valores entre 0 e 1023)
val = map(val, 0, 1023, 46, 134); //Converte o valor pra ser usado no servo (valores entre 0 e 180) aqui se define quantos graus o servo se move para cada lado
myservo.write(val); //Move o eixo do servo, de acordo com o angulo
}
void loop()
{
motor();
servo();
}
Alguem tem alguma idéia do que ocorre? O motor esta ligado via BC 548, e fonte externa, e o servo nos 5 volts do Arduino