• Welcome to LusoRobótica - Robótica em Português.
 

Smalluino Advanced

Started by AcidDagger, 27 de March de 2010, 18:36

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

AcidDagger


metRo_


AcidDagger

Pelo que entendi deve ser ligar o mais das pilhas ao Vin e o menos ao GND. E a alimentação dos motores é feita no pin do arduino de 5v certo?

metRo_


AcidDagger

Ora boas, depois de já ter lido algumas coisas e fazer algumas experiências ja fiquei um pouco mais familiarizado com o arduino:

Então segue-se as fotos do meu bot  ;D



Aqui a placa que segura o arduino:



parte de tras:



Frente:





Lado:



Cima:




Bem, ainda lhe falta muita coisa.

Material que está para chegar:
-Sensor sharp + servo
-QRD1114 para o robot nao cair, ou seja para saber quando nao existe "chao"
-QTR-8RC Reflectance Sensor Array para seguir linhas
Digital Temperature Sensor Breakout - TMP102 para indicar a temperatura ambiente
Basic 16x2 Character LCD

Quando chegar o material dou novidades :b

Tenho de fazer uns videos do bicho a mexer-se :P

Cumps

DanBar

Está muito bom. Essas rodas são brutais  :o ;)
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

AcidDagger

pois sao, so tem um defeito  ::) é na zona em que a borracha esta em contacto com o plastico (amarelo). Não agarra bem ai. mas nada que um pingo de cola nao resolva.

De resto 5*, acho que foi uma boa compra.

amando96

está com bom aspecto, o que é aquilo por baixo da madeira e do arduino? battery pack?

AcidDagger

Sim, é a caixa de pilhas  :) Só que ainda não estão ligadas  :P

GnobarEl

Como está este projecto?

AcidDagger

um pouco mais avancado, e já tenho algum codigo feito... logo meto fotos  ;D

AcidDagger

Aqui está








O código vem mais logo com um video :b




AcidDagger


/*
**************************************************************
Smalluino Advanced development code
v1.0 14/05/2010
by André Delgado
**************************************************************
*/

//inputs
#define sharp 2 // sensor ir no pino 2
int average = 0;

//outputs
#define led_vermelho 12 // led vermelho no pino 13
#define led_verde 13 // led verde no pino 12
int motor_esquerdo [] = {5,6}; // motor esquerdo nos pinos 5 e 6
int motor_direito [] = {9,10}; // motor direito nos pinos 9 e 10
int Speed = 0;

void setup () {
  int i;
  for(i = 0; i < 2; i++) {
    pinMode(motor_esquerdo[i], OUTPUT); // motor esquerdo
    pinMode(motor_direito[i], OUTPUT); // motor direito
  }
  pinMode(led_verde, OUTPUT);
  pinMode(led_vermelho, OUTPUT);
  digitalWrite(led_verde, HIGH); // led de aviso de movimento
  delay(1000);
  digitalWrite(led_verde, LOW); // blink
  delay(1000);
  digitalWrite(led_verde, HIGH); // blink
  delay(1000);
  digitalWrite(led_verde, LOW); // desligar o led de aviso
  delay(20);
}

void loop () { // runs over and over
  ler_sharp();
  if(average > 200){
    digitalWrite(led_vermelho, HIGH);
    andar_tras();
    delay(200);
    virar_esquerda();
    delay(110);
  }
  else {
    digitalWrite(led_verde, HIGH);
    andar_frente();
  }   
}

void ler_sharp() {
  average = analogRead(sharp);
  delay(20);
}

void motor_stop(){ // parar os motores
  digitalWrite(motor_esquerdo[0], LOW);
  digitalWrite(motor_direito[1], LOW);

  digitalWrite(motor_direito[0], LOW);
  digitalWrite(motor_direito[1], LOW);
  delay(25);
}

void andar_frente(){

  digitalWrite(motor_esquerdo[0], LOW);
  digitalWrite(motor_esquerdo[1], HIGH);

  digitalWrite(motor_direito[0], LOW);
  digitalWrite(motor_direito[1], HIGH);

}

void andar_tras(){  // para trás
  digitalWrite(motor_esquerdo[0], HIGH);
  digitalWrite(motor_esquerdo[1], LOW);

  digitalWrite(motor_direito[0], HIGH);
  digitalWrite(motor_direito[1], LOW);

}

void virar_esquerda(){ // esquerda
  digitalWrite(motor_esquerdo[0], LOW);
  digitalWrite(motor_esquerdo[1], HIGH);

  digitalWrite(motor_direito[0], HIGH);
  digitalWrite(motor_direito[1], LOW);
}

void virar_direita(){ //direita
  digitalWrite(motor_esquerdo[0], HIGH);
  digitalWrite(motor_esquerdo[1], LOW);

  digitalWrite(motor_direito[0], LOW);
  digitalWrite(motor_direito[1], HIGH);
}




Estou a usar este codigo... mas os motores nao estão a fazer o que eu lhes mando :S

Alguem poderia corrigir o codigo? :P

Cumps

OxyGen

#43
Quanto tempo achas que o arduino demora a executar uma instrução? Por exemplo aqui: void andar_frente(){

  digitalWrite(motor_esquerdo[0], LOW);
  digitalWrite(motor_esquerdo[1], HIGH);

  digitalWrite(motor_direito[0], LOW);
  digitalWrite(motor_direito[1], HIGH);

}


Tu aqui não vais ver rigorosamente nada... isto executa tão rápido que nem os motores sabem o que aconteceu... terás de por um delay() aqui... É como nos leds. se tu fizeres digitalWrite(ledPin,HIGH); sem ser dentro de um ciclo infinito não vês absolutamente nada. o sinal é tão rápido (16MHz de freq) que não vês nada... terás de por um delay ou qualquer coisa do género... Nesta função e nas outras...

Para começar recomendo a testares uma coisa de cada vez... coloca-o só a andar para a frente durante 5 segs por exemplo... Só quando conseguires ter isso na perfeição é que vais para as outras funções...

Testas cada uma delas individualmente e só no fim é que intercalas todas as funções...

Percebeste o que quis dizer?
OxyGen #

msr

Ora viva AcidDagger,

Já experimentaste o Arduino ligado às pilhas? Se sim, quantas pilhas estás a usar (e de que tensão cada)?

Bom trabalho!