Robot beta02 – Teste dos sensores e actuadores

Desta vez e com a confiança adquirida no projecto anterior avancei logo para a programação do robot beta02. Mas como em qualquer projecto quando atalhamos alguns dos processos é natural que as coisas não funcionem à primeira.

Visto que já estava a ter problemas com o novo programa e também comecei a desconfiar do circuito e da electrónica, decidi refazer todo o circuito e também criar um programa só para testar os vários sensores e actuadores.

Esta parte devia ter sido a primeira por onde devia ter começado para despistar facilmente problemas tanto do hardware como do software. Não que não soubesse já que devia assim mas como facilitei tive de voltar ao início.

Deixo aqui o código que criei para os testes e aproveito para anunciar a estreia da bilblioteca Arduino feita por mim para usar o L293 no controlo do robot beta02. Para além de facilitar o controlo dos motores, fica melhor testada numa aplicação “real”.

Lista de testes

  • Roda direita para a frente à maxíma velocidade e para trás a 4/6 da velocidade máxima
  • Roda esquerda para a frente à maxíma velocidade e para trás a 4/6 da velocidade máxima
  • Servo vira para a direita, depois à esquerda e por fim centro
  • Sensor direito e esquerdo do parachoques que acende LED no pin 13 (não é feito no video)
  • Leitura do valor do sensor de distância IR e envio para a porta série (não é visível no video)

Video

Código

/*
 * P011_robot_basic_tests.pde - test of the robot components
 *   
 * 20120118 Luis Sismeiro
 */

#include <L29x.h>
#include <Servo.h>

#define FASTSPEED 255
#define SLOWSPEED 192
#define IRSAMPLES 10

const byte motorRightEn = 6; // L293 pin 15 PWM
const byte motorRight1 = 7; // L293 pin 10
const byte motorRight2 = 5; // L293 pin 15
const byte motorLeftEn = 3; // L293 pin 1 PWM
const byte motorLeft1 = 2; // L293 pin 2
const byte motorLeft2 = 4; // L293 pin 7
const byte irServoPin = 10;
const byte irSensorPin = A5;
const byte bumperRightPin = 8;
const byte bumperLeftPin = 9;
const byte ledPin = 13;

L29x motorRight(motorRightEn, motorRight1, motorRight2);
L29x motorLeft(motorLeftEn, motorLeft1, motorLeft2);

Servo irServo; 

void setup()
{
  irServo.attach(irServoPin);
  pinMode(bumperRightPin, INPUT);
  digitalWrite(bumperRightPin, HIGH); // activate pullup resistor
  pinMode(bumperLeftPin, INPUT);
  digitalWrite(bumperLeftPin, HIGH); // activate pullup resistor
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);

  motorRightTest();
  motorLeftTest();
  servoTest();
}

void loop()
{
  bumperTest();
  irSensorTest();
}

void motorRightTest()
{
  motorRight.rotPos(FASTSPEED); /* right motor front fast */
  delay(2000);
  motorRight.rotNeg(SLOWSPEED); /* right motor back less fast */
  delay(2000);
  motorRight.stop();
}

void motorLeftTest()
{
  motorLeft.rotPos(FASTSPEED); /* left motor front fast */
  delay(2000);
  motorLeft.rotNeg(SLOWSPEED); /* left motor back less fast */
  delay(2000);
  motorLeft.stop();
}

void servoTest()
{
  irServo.write(10); /* servo right */
  delay(2000);
  irServo.write(160); /* servo left */
  delay(2000);
  irServo.write(75); /* servo center */
}  

void irSensorTest()
{
  Serial.println(irValueRead());
  delay(1000);
}

void bumperTest()
{   
  if (!digitalRead(bumperRightPin))
    digitalWrite(ledPin, HIGH);
  else if (!digitalRead(bumperLeftPin))
    digitalWrite(ledPin, HIGH);
  else
    digitalWrite(ledPin, LOW);  
}

int irValueRead()
{
  int irSum = 0;
  for (int i = 0; i < IRSAMPLES; i++)
    irSum += analogRead(irSensorPin);
  return irSum / IRSAMPLES;
}

Etiquetas: , ,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s


%d bloggers like this: