Probas de funcionamento IDE

Unha vez montado o mClon debes comprobar que todo funciona correctamente. No IDE de Arduino copia, pega e proba os seguintes programas e se non funcionan correctamente debes revisar o cableado.

Zumbador

Carga na placa o seguinte programa. Nada máis cargar debería soar unha melodía e repetirse cada 2 segundos.

// Declaración de variables:
const int zumbador=8;    // Definimos o zumbador no pin 8
 
// Configuración:
void setup(){
  pinMode(zumbador,OUTPUT);   // Configuramos o pin 8 como saída  
}

// Función
void melodia(){
  tone(zumbador,1000,200);      // 1000 Hz durante 0.2s
  delay(400);                    // Agarda 0.4s
  tone(zumbador,1500,300);      // 1500 Hz durante 0.3s
  delay(400);  
  tone(zumbador,2000,500);      // 2000 Hz durante 0.5s
  delay(400); 
  noTone(zumbador); 
}
 
// Bucle:
void loop(){
  melodia();                  // soa a melodía
  delay(2000);
}

Non soa? Comproba a conexión do zumbador. O positivo ten que estar conectado no pin dixital 8 e o negativo en GND.

Pulsador

Agora imos facer soar o zumbador cando prememos o pulsador

// Declaración de variables:
const int zumbador=8;    // Definimos o zumbador no pin 8
 
// Configuración:
void setup(){
  pinMode(zumbador,OUTPUT);   // Configuramos o pin 8 como saída  
}

// Función
void melodia(){
  tone(zumbador,1000,200);      // 1000 Hz durante 0.2s
  delay(400);                    // Agarda 0.4s
  tone(zumbador,1500,300);      // 1500 Hz durante 0.3s
  delay(400);  
  tone(zumbador,2000,500);      // 2000 Hz durante 0.5s
  delay(400); 
  noTone(zumbador); 
}
 
// Bucle:
void loop(){
  while(analogRead(A7)>100);  // agardamos mentres non se prema o botón
  while(analogRead(A7)<100);  // agardamos a que se solte
  melodia();                  // soa a melodía
}

Se o zumbador soa cada vez que prememos o pulsador está todo correcto.

Se non soa é porque o pulsador non cerra o circuíto. Comproba que os cables están conectados como se ve na figura e, se está correcto, comproba a soldadura do cable branco na placa: debe haber continuidade entre ese cable e o pin superior esquerdo do pulsador.

 

Motores

Imos comprobar que os motores obedecen ás ordes. Primeiro imos ordenar que os motores anden cara adiante.

// Declaración de variables:

const int PWMA = 6;    // Pins motor esquerdo
const int AIN1 =7;

const int PWMB = 5;     // Pins motor dereito
const int BIN1 =4;

// Configuración:

void setup(){
  pinMode( PWMA, OUTPUT);        // Configuramos os pins
  pinMode( AIN1, OUTPUT);
  pinMode( PWMB, OUTPUT);
  pinMode( BIN1, OUTPUT);

  while(analogRead(A7)>100);  // agardamos mentres non se pulse o botón

}

/***** Funcións: *****/
// sentido: adiante: 1, atrás: -1
// velocidade: 0 -> 255

// motor esquerdo m1

void m1(int sentido, int velocidade) {
  
  if (sentido > 0){
    digitalWrite(AIN1, 0);     
  }
  else{
    digitalWrite(AIN1, 1);   
  }
  
  analogWrite(PWMA, velocidade);
}

// Motor dereito m2
  
void m2(int sentido, int velocidade) {
  
  if (sentido > 0){
    digitalWrite(BIN1, 1);     
  }
  else{
    digitalWrite(BIN1, 0);   
  }   
  
  analogWrite(PWMB, velocidade);
}

/***** Bucle *****/

void loop() {
  //O robot avanza
  m1(1, 100);   
  m2(1, 100); 
}

Se son xira ningún motor comproba que tes conectado o pin VM do driver. Igual te saltaches a páxina de alimentación. Segundo sexa o tipo de alimentación que uses deberás conectalo de diferente forma. Por exemplo, se estás usando un powerbank o pin VM do driver deberá estar conectado no pin 5V da placa.

Conexión powerbank

Cómpre tamén comprobar os motores por separado. Primeiro ordenar que un dos motores se mova cara adiante, despois cara atrás, e repetir o mesmo co outro motor. m1 é o motor esquerdo e m2 é o dereito. Sentido: adiante: 1, atrás: -1. Velocidade: 0 -> 255

void loop() {

  // O motor dereito xira cara atrás
  m2(-1, 100);
  
}

Se cando ordenas que se mova o motor esquerdo o que se move é o dereito, comproba que o motor esquerdo está conectado nos pins A01 e A02 e o motor dereito nos pins B01 e B02.

Se algún dos motores ou ambos xiran en sentido contrario ás instrucións deberás revisar a conexión dos cables, pois seguramente estea invertida a polaridade.

Se algún dos motores non xira nunca e o outro si, comproba que conectaches ese motor nos pins correctos, ou comproba as conexións entre o driver e o inversor.

Unha vez comprobado isto podes probar outras instrucións: xirar á dereita, xirar a esquerda, xirar a diferentes velocidades, etc.

Sensor ultrasónico

Para comprobar que funciona correctamente utilizamos a consola para visualizar as distancias. Move a man diante do ultrasónico para ver a máxima distancia á que pode detectar un obxecto.

// Declaración de variables:
 
int trig = A3;         // trig conectado ao pin A3
int echo = A3;         // echo conectado ao pin A3
long tempo;           // variable para expresar o tempo
long distancia;       // variable para expresar a distancia.
 
 
// Configuración:
 
void setup(){
  Serial.begin(9600);

}

// Función

void mideDistancia(){
  digitalWrite(trig,LOW); 
  delayMicroseconds(5);
  pinMode(trig, OUTPUT);
  digitalWrite(trig, HIGH);     // envío do pulso ultrasónico
  delayMicroseconds(10);
  pinMode(echo, INPUT);
  tempo=pulseIn(echo, HIGH);    // tempo transcorrido entre o envío do pulso e a recepción
  distancia= int(0.017*tempo);  // fórmula para calcular la distancia
}
 
// Programa:
 
void loop(){
  
  mideDistancia();    // invocamos a función de medir distancia
 
  Serial.print("Distancia: ");  // imprimimos os valores na consola
  Serial.print(distancia);
  Serial.println(" cm");
  delay(200);
}

Abre a consola e move a man diante do sensor ultrasónico a diferentes distancias. A lectura do ultrasónico amosarase na consola.

Se non marca a distancia comproba primeiro que hai comunicación entre o mClon e o ordenador. Se está ben comproba que o ultrasónico o tes ben conectado: Vcc, GND e os pins trig e echo unidos no pin analóxico A3 da placa. Se iso está correcto e segue sen funcionar, comproba a soldadura ou a unión de cables entre os pins Trig e Echo do ultrasónico.

Sensores de liña

Imos comprobar que os sensores de liña funcionan correctamente.

Cando tes o mClon alimentado os LEDs dos sensores deberían acender e apagar segundo estean sobre branco e negro respectivamente. Se ves que algún dos LEDs non acende nunca comproba a conexión Vcc e GND dese sensor.

O pin de datos (out) dun sensor está pegado ao chasis e o outro cara á parte exterior. É fácil confundirse. (Ollo, segundo o fabricante os pins poden estar á inversa de como aparece na foto)

Agora imos comprobar que temos os sensores conectados nos pins correctos. Cargamos este programa e abrimos a consola.

// Declaración de variables:
const int Pin_IR_esq=9;
const int Pin_IR_der=10;
String esq;
String der;

// Configuración:

void setup(){  
  Serial.begin(9600);   //Inicia comunicación serial
}

void loop() {

  if (digitalRead(Pin_IR_esq)==0){
    esq="negro";
  }
  else{
    esq="branco";
  }
  if (digitalRead(Pin_IR_der)==0){
    der="negro";
  }
  else{
    der="branco";
  }

 Serial.print(esq);
 Serial.print( " - " );
 Serial.println(der);
 delay(200);
  
}

Debes mover o sensor sobre unha liña negra sobre fondo branco e comprobar que se cumpre o que aparece na consola. Por exemplo, se o sensor esquerdo está sobre branco e o dereito sobre negro na consola deberá aparecer “branco-negro”. Se funcionase ao revés (aparece “negro-branco”) seguramente teñas intercambiados os pins D9 e D10.

A programar!

Tes todo funcionando correctamente? Xa podes empezar a programar o que queiras!