Archive for the ‘Electrónica’ Category

Projecto beta02 – Primeiros testes

26 de Janeiro de 2012

O robot tem novo programa com todos os sensores e atuadores a trabalhar em conjunto. Já cumpre em grande parte o objectivo de evitar obstáculos como pode ser visto no video. Ainda é necessário afinar a velocidade quando está a recuar ou a desviar-se de um obstáculo, assim como acertar quanto o tempo em deverá fazer essas manobras.

É preciso agora encontrar um balanço entre a velocidade e o tempo por forma a que as manobras sejam o mais eficazes sem virar demais ou de menos como se vê no video. Isto leverá à alteração dos parâmetros e sucessivos testes até melhorar o comportamento de acordo com o esperado.

Video

Programa

/*
 * P012_ir_servo_decision_motors_2.pde - Wall avoider
 *   
 * 20120121 Luis Sismeiro
 */

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

#define SERVOMAXRIGHT 10
#define SERVOMAXLEFT 155
#define SERVOCENTER 75
#define IRSAMPLES 10
#define IRTHRESHOLD 170
#define FASTSPEED 255
#define SLOWSPEED 255
#define ROTATEDELAY 500

(more…)

Anúncios

Robot beta02 – Teste dos sensores e actuadores

18 de Janeiro de 2012

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

(more…)

L29x – Informação e exemplo de uso da biblioteca

16 de Janeiro de 2012

No outro dia apresentei a minha primeira biblioteca Arduino para ajudar no uso de pontes H para controlo de motores. Neste momento estou a usar a biblioteca no controlo dos motores do robot beta02.

Desde a primeira versão já houve alterações e correcções que deram origem à versão 2. Deixo aqui o README e o exemplo da biblioteca que estou a distribuir. Sugestões e correcções são bem-vindas.

README

L29x Arduino Library
--------------------
This is a library to simplify the use of H bridges in you sketches. You
need to configure the Arduino pins that are connected to the H bridge
according to their functions.

For example we connect an L293 driving two motors to the Arduino Uno.
This are the pins used:

    L293 ------------- Arduino
    --------------------------
    1,2EN ------------ 2
    1A --------------- 3 (PWM)
    2A --------------- 4
    3,4EN ------------ 6 (PWM)
    3A --------------- 7
    4A --------------- 8

We start declaring the two motors:

    L29x motorOne(3, 2, 4);
    L29x motorTwo(6, 7, 8);

(more…)

Lições em C, Arduino C

14 de Janeiro de 2012

Uma das razões pelas quais me interessei pelo Arduino, além do meu interesse pela electrónica, foi pela possibilidade de programar em C, neste caso Arduino C que inclui algumas diferenças e em alguns casos mistura com C++.

Até agora tenho aproveitado para fazer uma reciclagem no C e também em algumas técnicas e truques de programação. Para além de criar ficheiros com código para ser referênciado, como a biblioteca L293x, também tenho usado algumas técnicas para debug de problemas, como por exemplo:

#define DEBUG
#ifdef DEBUG
  #define DEBUG_PRINT(x) Serial.print(x)
  #define DEBUG_PRINTLN(x) Serial.println(x)
#else
  #define DEBUG_PRINT(x)
  #define DEBUG_PRINTLN(x)
#endif

Com este código no início do programa (não esquecer de inicializar a porta série) podemos facilmente mandar escrever valores de variáveis sem ter que escrever ou comentar/descomentar todo o código. Podemos apenas comentar a linha #define DEDUG e todo o código auxiliar desaparece do binário compilado.

[código Arduino]
DEBUG_PRINT("Valor: ");
DEBUG_PRINTLN(valor);
[código Arduino]

Outra técnica de debug que por vezes uso em conjunto a porta série, é a conjugação com a função millis(). O objectivo é reduzir a quantidade de dados enviado para a porta-série, fazendo apenas uma amostragem de x em x tempo, o suficiente para perceber o conteúdo da variável e o funcionamento do programa.

Ao contrário de quando se usa a função delay(), esta técnica não pára a execução do programa, permitindo assim manter o normal funcionamento sem a interrupção. Para tal coloca-se o seguinte código quando pretendemos enviar para a porta série um valor:

long millisAntes = 0; // colocar como variável global

/* colocar junto à variável */
if (millis() - millisAntes > 1000) {
  Serial.println(valor);
  millisAntes = millis();
}