LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: R.S. em 21 de Fevereiro de 2010, 14:33
-
Boa tarde, programei o meu arduino com o seguinte codigo
:// ————————————————————————— Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};
// ————————————————————————— Setup
void setup() {
// Setup motors
int i;
for(i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
}
}
// ————————————————————————— Loop
void loop() {
drive_forward();
delay(1000);
motor_stop();
drive_backward();
delay(1000);
motor_stop();
turn_left();
delay(1000);
motor_stop();
turn_right();
delay(1000);
motor_stop();
motor_stop();
delay(1000);
motor_stop();
}
// ————————————————————————— Drive
void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}
void drive_forward(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void drive_backward(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
void turn_left(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void turn_right(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
quando o arduino esta ligado ao pc funciona correctamente mas quando tiro do pc e ligo uma bateria ao arduino ele deixa de dar, só aparece uma luz amarela a piscar.
Alguém me pode ajudar?
abraços R.S.
-
A bateria tá fraca.
Ou a bateria tem uma tensão demasiado baixa para alimentar o arduino.
Ou a bateria não dá corrente suficiente para as necessidades dos motores.
Ou o arduino tá a fazer reset quando os motores arrancam, e então tens que fazer um circuito de alimentação deste género (no teu caso, a placa de controle e sensores é o Arduino):
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg156.imageshack.us%2Fimg156%2F4373%2Fdistribuiodeenergia.png&hash=ec17af21632ed3b9a3801704189df67519a4c72f)
Que bateria é e como a ligaste ao Arduino?
-
é de 3v
-
3V? Esquece, isso não serve para o Arduino. Se é para alimentar por aquela ficha preta grandona tem que ser no minimo dos minimos de 6V, idealmente de 6.5V - 7V.
-
Podes colocar também 5V mas é no Vin.
-
coloquei 9 v e funciona, mas não é muito?
-
Se for na ficha preta grandona não é muito, podes colocar aí 12V na boa, e até mais.
-
ok obrigado, da para alimentar o arduino sem ser por essa ficha e pela porta usb?
-
Dá, pelo pino Vin como disse o _metRo, contudo, a tensão colocada aí têm que ser 5V *certinhos*, ou seja têm que vir de um regulador. Quando alimentas o arduino pela ficha preta essa tensão já passa por um regulador da placa que gera os 5V certinhos.
-
Se bem que se lhe metes muito mais que 9 ou 12v tens de ter atenção á temperatura do regulador(coisinho preto com 3 pernas que tem escrito 7805) porque ele vai aquecer um bocado pois tem de "queimar" a tensão que está a mais para ficar só com os 5v
-
Mas esses reguladores não costumam dar até 35v?
-
Sim, mas com Vin de 35v, Vout de 5v e Iout de 500ma, o regulador "só" tem de dissipar 500ma * (35-5)=15W, coisa que um encapsulamento TO-220 não aguenta, só com um dissipador e não pode ser dos mais pequeninos que são do tamanho do proprio regulador.