Project adMIRE

From RoboWiki
Jump to: navigation, search

Overview

adMIRE

Authors: Adrian-Valentin MARINESCU/Mirela MOGA
Countries: Romania
Date: 11.07.2010
Activity: R.U.R. - Summer School 2010

Abstract

Welcome to adMIRE!

It can run and sing at the same time. When a black path crosses his way, he stops, then turns around and continues his journey. If he reaches the edge of a clif, don't worry, he won't fall, he will find the proper way to go :).

Hardware Design: Our robot consists of a basic ACROBot to which we have attached a light sensor and a piezoelectric speaker.

Software Design: There is a main loop on which the robot analizes its current state and decides whether to stop, turn around or to move forward. We also have auxiliar functions for creating the sounds.

Source code

#include <Servo.h> 
#define SerialSpeed 9600   
#define SampFrequency 10  
#define AnalogPIN 5   
#define SENSOR_1     1


Servo LeftServo;   
Servo RightServo;  


#define FAST  50   
#define SLOW   5


int speakerPin = 4;
int length = 15; 
char notes[] = "ccggaagffeeddc "; 
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
    if(analogRead(SENSOR_1)>=750) return; 
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };


  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
  Serial.begin(SerialSpeed);
  LeftServo.attach(9);
  RightServo.attach(10);  
  LeftServo.write(90 + FAST);  
  RightServo.write(90 - FAST);  
}

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); 
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
   
   
 //Serial.println( analogRead(AnalogPIN)); 
 if(analogRead(SENSOR_1)<750)  
 { LeftServo.write(90 + FAST);    
 RightServo.write(90 - FAST);            
 }
  else
  {
  LeftServo.write(90);           
  RightServo.write(90);
  delay(1500);
  noTone(speakerPin);
  LeftServo.write(90 - FAST);
  RightServo.write(90 + FAST);
  delay(1000);
  LeftServo.write(90 + FAST);   
  RightServo.write(90 + FAST);
  delay(1000);
  }
 }
}

Project Files

Description Download
Project documentation Media:MyDocumentation.pdf
Project source code Media:admire.c
Project movie AdMire.avi (17 MB)


Go back to the List of the projects