Eckart College

Uit KekBot
Naar navigatie springen Naar zoeken springen

Hoofdpagina | Fanbot | Eckart College | Fontys Robots | Kekbot mechatronics kit | Hardware | Software&Programma's | Tips


Eckartcollege, 05/11/2012 - 25/01/2013

Robotbouwers




Het Team

Teamleden

- Sibren Vuurberg
- Marijn Rombouts
- Martijn Schendstok

Hoe komen wij aan deze opdracht

Voor het Technasium, ook bekend als het vak O&O (Onderzoeken en Ontwerpen), moeten wij onze eigen opdracht zoeken. Wij hebben binnen het team gekeken wat iedereen interessant vond en waren op robotica in het algemeen uitgekomen. Met deze zoekrichting hebben wij de robotica afdeling TU/e gemaild, dr.ir. J.H. Sandee heeft ons als reactie hier op naar mevrouw Marieke Peelen van Kekbot door verwezen, met haar opdracht 'De Trompbot.'

Projectplan

Het projectplan is in zijn geheel te downloaden via deze link.

De Weblog

In deze weblog zullen wij de vooruitgang van ons project bijhouden.

Vooronderzoek

Oriëntatie

Bij de oriëntatie hebben wij gekeken naar:
- De piano spelende robot
- Intel's Industrial Control in Concert
- Eight floppy drives
- The flawless flautist
- LEMUR’s Guitar Bot
- Karmatik Machine Orchestra
- Toyota muziek robots
- Team dare


19 nov 2012 12:46 (CET)

Analyse: Constructie

Moet nog komen

Analyse: C++ en TI-launchpad

TI-launchpad

Technische info
Processor:
- MSP430G2553IN20 – 16kB Flash, 512B RAM, interruptible GPIOs (capacitive sense-capable), 16-bit timers, 8ch 10-bit ADC, Comparator, Serial Communication (USCI – I2C, SPI & UART)
- MSP430G2452IN20 - 8kB Flash, 256B RAM, interruptible GPIOs (capacitive sense-capable), 16-bit timers, 8ch 10-bit ADC,
Comparator, Serial Communication (USI – I2C & SPI)
Connectors: 2x 10-pin PCB connectors (male), USB-mini
Servo: Torque: 1kg @ 4.8v, 1.2kg @ 6v
Weight: 8g
Speed: 0.14 / 60deg @4.8v, 0.12 / 60deg @ 6v
Voltage:4.8v~6v
Motor type: Coreless
Plug: JR Style


Voor het gebruik van dit bord gebruiken we de us de MSP430G2553IN20 microcontroller. Deze chip is sneller dan zijn kleine broertje die ook in het doosje aanwezig is. Deze controller bevat meer werkgeheugen (256 Bytes meer) en heeft ook een dubbele hoeveelheid opslagruimte. Beide controllers draaien op 16MHz.


GPIO (General Purpose Input/Output)


21 nov 2012 14:09 (CET)

C++

Moet nog komen

Programma van eisen

Moet nog komen

Muziek: Instrumenten

We zijn met elkaar gaan brainstormen over mogelijke instrumenten die we voor ons project kunnen gebruiken, hoe we deze zullen gaan gebruiken en hoeveel servo's ieder instrument krijgt.


Uiteindelijk zijn we op de volgende instumenten gekomen:
- Chimes - 2 servo's
- Trom - 2 servo's
- Keybord - 2 servo's


23 nov 2012 15:17 (CET)

Muziek: Lied

We hebben verschillende liederen met een mogelijke complexiteit opgezocht.
Uiteindelijk hebben we met het team voor het lied Star Wars "Imperial March" Vader Themegekozen.
Dit lied hebben we gekozen van wegen de goed haalbare complexiteit van het lied en zijn langzame ritme.


28 nov 2012 13:50 (CET)

Programma

Drumrobot

#include <Servo.h>

//aanmaken variabelen

int Pressedbutton = 0; Servo motorL; 
Servo motorR;

//aanwijzen van pinnen aan variabelen
void setup() {                
  motorL.attach(13);
  motorR.attach(10);
  pinMode(14, OUTPUT); //led
  pinMode(5, INPUT_PULLUP); //knop
  digitalWrite(14, LOW);
  //tempo = (60/80)*1000;
  
  pinMode(6, OUTPUT); // IR
  pinMode(2, OUTPUT); // R LED
  
  pinMode(7,INPUT_PULLUP);
  
    
}
//subs voor aansturing motoren 
void L() { 
 laden1L();
 delay(125);
 gat1L();
 delay(125);
}

void R()
{
 laden1R();
 delay(125);
// IR();
 gat1R();
 delay(125);
}

//subs voor nog specifiekere bewegingen
void gat1L () {
  motorL.write(90);
}

void gat1R () {
 motorR.write(75); 
}

void laden1R () {
  motorR.write(112);
}


void laden1L () {
  motorL.write(112);
}

//sub voor het ontvangen van het ritme, niet gebruikt wegens conflict tussen servo.h en ir.h
void IR() {
    //digitalWrite(2,LOW); // zet rode LED UIT
    //tone(6,36000,1);
}

//het lied
void lied() {
  R(); // maat 1
  delay(600);
  L();
  delay(650);
  R();
  delay(500);
  L();
  delay(250);
  R();
  delay(30);
  L();
  //delay(600);
  
  //R(); // maat 2
  delay(600);
  R();
  delay(250);
  L();
  delay(20);
  R();
  //delay(150);
  //R();
  delay(1200);
}

//de loop met daarin detectie voor de knop en infrarood
void loop() {
  if (digitalRead(5) == LOW || digitalRead(7) == LOW) //controle knop OF IR 
  {
    if (Pressedbutton == 1)
    {
       Pressedbutton = 0; 
       digitalWrite(14, LOW);
       
    } else {
       digitalWrite(14, HIGH);
       lied();      
       Pressedbutton = 1; 
    }
  }
  if (Pressedbutton == 1)
  {
    lied();
  }
}

Xylofoonrobot veel van de code komt overeen met de code van de drumrobot. Voor xylofoonrobot specifieke onderdelen is commentaar toegevoegd.

#include <Servo.h>

int Pressedbutton = 0;
Servo motorL;                     
Servo motorR;

void setup() {                
  motorR.attach(10);
  motorL.attach(13);
  pinMode(14, OUTPUT); 
  pinMode(5, INPUT_PULLUP);
  digitalWrite(14, LOW);
  
  pinMode(6, OUTPUT); // IR
  pinMode(2, OUTPUT); // R LED
  
  pinMode(7,INPUT_PULLUP);
  n6(); //reset(positie) van de robot
    
}

//Alle noten, komt overeen met de nummers op de 'xylofoonplankjes'.
void n1() {
 motorR.write(130);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n2() {
 motorR.write(120);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n3() {
 motorR.write(110);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n4() {
 motorR.write(100);
 motorL.write(20);
 delay(100);
 motorL.write(0);
 delay(100);
 motorL.write(20);  
}

void n5() {
 motorR.write(90);
 motorL.write(20);
 delay(100);
 motorL.write(0);
 delay(100);
 motorL.write(20);  
}

void n6() {
 motorR.write(70);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);
}

void n7() {
 motorR.write(60);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n8() {
 motorR.write(45);
 motorL.write(20);
 delay(200);
 motorL.write(5);
 delay(100);
 motorL.write(20);  
}

void n9() {
 motorR.write(25);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n10() {
 motorR.write(10);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n11() {
 motorR.write(10);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n12() {
 motorR.write(5);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void n13() {
 motorR.write(0);
 motorL.write(20);
 delay(100);
 motorL.write(10);
 delay(100);
 motorL.write(20);  
}

void IR() {
    //digitalWrite(2,LOW); // zet rode LED UIT
    //tone(6,36000,1);
}

void lied() {
  n6();
  delay(600);
  n6();
  delay(600);
  n6();
  delay(600);
  n5();
  delay(400);
  n7();
  delay(100);
  n6();
  delay(400);
  n5();
  delay(100);
  n7();
  delay(100);
  n6();
  delay(600);
  n9();
  delay(600);
  n9(); 
  delay(600);
  n9();
  delay(400);
  n10();
  delay(100);
  n8();
  delay(100);
  n6();
  delay(600);
  n5();
  delay(400);
  n7();
  delay(100);
  n6();
  delay(600); 
}

void loop() {
  if (digitalRead(5) == LOW || digitalRead(7) == LOW)
  {
    if (Pressedbutton == 1)
    {
       Pressedbutton = 0; 
       digitalWrite(14, LOW);
       
    } else {
       digitalWrite(14, HIGH);
       lied();      
       Pressedbutton = 1; 
    }
  }
  if (Pressedbutton == 1)
  {
    lied();
  }
}



Basic programmaatje voor de 'afstandsbediening'

void setup()
{
  // LED op pin 14
  pinMode(14,OUTPUT);
  // IR led op pin 6
  pinMode(6,OUTPUT);
  // IR sensor
  pinMode(7,INPUT_PULLUP);
  // Knopje
  pinMode(5,INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(5) == LOW) {
    tone(6,36000,1);  
    delay(100);
  }
}