• 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.

amando96

Esperimenta tirar o sensor, e fazer só um código com delays, tipo, frente, trás, direita esquerda, se não funcionar algo está mal ligado...

AcidDagger

#46
ta tudo bem ligado  ;) experimentei o codigo do smalluino 1.5 e ta tudo ok

acho que é mesmo o que o oxygen disse. porque eu experimentei com dois leds a simular os motores e com os leds eles ligam/desligam quando o sensor detecta obstaculo.

Cumps

EDIT: Já agora alguem me dá um exemplo de um codigo: o robot andar sempre para a frente mas quando o sensor detectar algo o robot fique a andar sempre para tras.

So para experimentar e desenvolver a partir dai :P

OxyGen

Podes fazer através de uma interrupção... mas atenção que aí não podes usar a função delay()

Exemplo do código: Vou usar uma interrupção supondo que o sensor envia um sinal a High para o arduino.

Consulta Isto: http://www.arduino.cc/en/Reference/AttachInterrupt


void andarParaFrente()
{
while(1){
attachInterrupt(0,andarParaTras,RISING); // Supondo que o sinal do sensor está sempre a LOW. O que esta interrupção faz é se detectar um sinal a subir (RISING) vindo do sensor, ele executa a função andarParaTras. o número "0" indica a linha de interrupções no pino 2.
// Aqui colocas as funções para o carro andar para a frente. Tem se ser dentro do ciclo infinito.
}
}

void andarParaTras()
{
While(1)
//Funções de andar para tras em ciclo infinito
}
OxyGen #

andnobre

boas alguem tem o programa do smalluino1.5

rafhit

Quote
int motor1Pin1 = 5;    // Ponte H
int motor1Pin2 = 6;    // Ponte H
int motor2Pin1 = 10;   // Ponte H
int motor2Pin2 = 11;   // Ponte H

void setup() {

  // Definir os pinos outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
}


void loop() {
  //Vamos testar o gajo :)

    digitalWrite(motor1Pin1, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motor1Pin2, LOW);   // Fazem com que o motor da direita ande em frente
   
    digitalWrite(motor2Pin1, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motor2Pin2, HIGH);  // Fazem com que o motor da esquerda ande em frente
    delay (1500);                    // Tempo que vai ficar a fazer esta função
   
    //Agora é inventar....fazer como quiserem...
    //O ideal seria utilizar a funçao AnalogWrite para controlar a velocidade por PWM
    //Mas o digitalWrite torna as coisas mais simples
    //O inconveniente, é que anda sempre á velocidade máxima
    //O resto do código vai fazer o Smalluino Mexer :D
    //Dúvidas: www.lusorobotica.com
 
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
   
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (1500);
   

    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
   
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay (1500);


    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
   
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    delay (1500);
 
 }



AcidDagger

ja fiz o codigo para uma primeira versao, amanha posto  ;D

AcidDagger

estava a experimentar codigos mais complexos e vi que os motores nao estavam a seguir as funçoes que eu lhes determinava.

Acho que a ponte H ta meio marada...  ::)



const int motor1 = 5;
const int motor2 = 6;
const int motor3 = 10;
const int motor4 = 11;

void setup () {
  pinMode(motor1, OUTPUT);
  pinMode(motor2, OUTPUT);
  pinMode(motor3, OUTPUT);
  pinMode(motor4, OUTPUT);
}

void loop () {
  digitalWrite(motor1, HIGH);
  digitalWrite(motor3, HIGH);
  digitalWrite(motor2, LOW);
  digitalWrite(motor4, LOW);
  delay(5000);
  digitalWrite(motor1, LOW);
  digitalWrite(motor3, LOW);
  digitalWrite(motor2, LOW);
  digitalWrite(motor4, LOW);
  delay(5000);
}
 


quando meto este codigo a correr os motores nao fazem o loop, ou seja chega ao fim e nao volta ao incio, ou entao ficam a andar para a frente infinitamente...

È da ponte H?  ???

amando96

Não podes levar os dois punos da ponte H high, se não me engano isso vai fazer curto á bateria, mas talvez a ponte tenha alguma coisa para não deixar isso acontecer

é assim:

pino 1 high
pino 2 low
^^será num sentido
pino 1 low
pino 2 high

^^será no sentido oposto

pino 1 low
pino 2 low

^^ será parado.

AcidDagger

como eu tenho os pinos acho que o codigo ta bem

preytender

Ola,

Antes de tudo parabens pelo teu projecto, vou estar atento para ver o video dele a andar  8). Tambem estou a espera de algum material para fazer o meu primeiro projecto (2 servos full rotation). Estou a pensar utilizar 2 servos como motores.

Ver o teu projecto levantou-me uma duvida, quais são os pros e contras entre utilizar 2 servos ou entao 2 motores DC ???  Qual é a melhor escolha ???  ???

Obrigado e continuação de bom trabalho.

AcidDagger

Motores DC

Pros:
Baratos

Contras:
Precisam de Ponte H
Precisam de gear-box


Servos;

Pros:
Ligação facil
Nao precisam de gearbox

Contras:

Caros e tens de fazer um mod para ele rodar 360º

amando96

É são lentos, motores é para todos os gostos, lentos rápidos, etc.

preytender

#57
Obrigado pelos esclarecimentos, a minha ideia era utilizar o servos porque pareciam mais faceis de utilizar para alguem com os meus conhecimentos mas a ideia seria mais tarde evoluir para os motores DC. Ainda nao tinha comprado os servos porque estavam esgotados na loja lusorobotica, pelo contrario todos os componentes para a solução motores DC estão disponiveis e pelo mesmo preco ate posso comprar as rodas  ;D

Estou a pensar então fazer a seguinte encomenda:
-Dual Motor GearBox
-H-Bridge Motor Driver 1A
-Tamiya 70096 Off-Road Tires (2 tires)
-LM7805 5V Regulator (Pelo esquema parece que preciso disto)  :-\

Acho que isto deve ser tudo o que preciso  ??? vou estudar melhor o esquema colocado neste topico (Obrigado AcidDagger) mas não sei se me vou desenrascar sozinho  :-[


AcidDagger

Nós tamos aqui para ajudar!  :)

COmo ponte H e visto que tas a começar podias usar uma http://loja.lusorobotica.com/componentes/15-h-bridge-motor-driver-1a.html

Que é muito mais barata  :)

Sugiro tambem que veijas isto http://lusorobotica.com/index.php?topic=575.0  ;D

andnobre

#59
ola
Estou a usar um pouco do teu codigo para o meu robo mas tenho uma duvida, o robo quase que nem se mexe quando digo para virar ou para a direita ou para a esquerda parece que nem força tem.
sera que o tempo de delay e pouco estou a testar com 5000ms ou mais...


ps: estou usar o codigo do rafhit