Drumbot: verschil tussen versies
Geen bewerkingssamenvatting |
|||
(9 tussenliggende versies door een andere gebruiker niet weergegeven) | |||
Regel 2: | Regel 2: | ||
Door: Joris Metzemaekers & Daan Steenbakkers & Roland van der Burg | Door: Joris Metzemaekers & Daan Steenbakkers & Roland van der Burg | ||
Dit is een robot gemaakt voor het kekrobot project. | Dit is een robot gemaakt voor het kekrobot project. | ||
De Drumbot is een machine, die door middel van een Arduino Uno en een drumstel, kan drummen. Hiervoor gebruiken wij relais. | De Drumbot is een machine, die door middel van een [[http://www.arduino.cc/en/Main/arduinoBoardUno Arduino Uno]] en een drumstel, kan drummen. Hiervoor gebruiken wij 4 [[http://nl.wikipedia.org/wiki/Halfgeleiderrelais Halfgeleiderrelais]] en 4 solenoids. Hiervoor hebben wij ook een labvoeding nodig om de solenoids van de benodigde stroom te voorzien. Door middel van de code worden de relais aangestuurd zodat de solenoids dichtklappen. Aan de solenoids hebben wij stokjes vast gemaakt. Deze slaan op hun beurt tegen de drums van het drumstel. | ||
[[http://s10.postimage.org/parw7oyph/2012_11_14_637.jpg?noCache=1352886004 plaatje Drumrobot]] | |||
== Status: == | == Status: == | ||
De drumbot kan rythme en | De drumbot kan rythme, noten en in groep spelen. | ||
== Problemen: == | == Problemen: == | ||
Regel 15: | Regel 16: | ||
-Stap response motor was stil genoeg maar had niet de kracht. | -Stap response motor was stil genoeg maar had niet de kracht. | ||
== Media: == | |||
[[Bestand:Drumbot.jpg|400px]] | |||
[http://www.youtube.com/watch?v=bGES7FymebQ&feature=youtu.be| Youtube link naar het filmpje van de drumbot] | |||
== Code: == | == Code: == | ||
Regel 99: | Regel 106: | ||
} | } | ||
</nowiki> | </nowiki> | ||
<nowiki> | |||
/* Combinaties (waarbij uitgegaan is van een persoon) | |||
0: Reset | |||
1: Bass | |||
2: Snare | |||
3: Tom | |||
4: Cymbal | |||
5: Bass & Snare | |||
6: Bass & Tom | |||
7: Bass & Cymbal | |||
8: Snare & Cymbal | |||
9: Tom & Cymbal | |||
10: Tom & Snare | |||
11: Bass & Tom & Snare | |||
12: Bass & Tom & Cymbal | |||
13: Bass & Snare & Cymbal | |||
14: Tom & Snare & Cymbal | |||
15: Bass & Tom & Snare & Cymbal | |||
16: Delay | |||
*/ | |||
int Rhythms[16] = {5,16,2,16,7,16,2,16,5,16,2,16,5,3,2,16}; | |||
int Delay = 125; | |||
int bass = 9; | |||
int tom = 10; | |||
int snare = 8; | |||
int cymbal = 11; | |||
int count = 0; | |||
int delay_drums = 125; | |||
void setup() | |||
{ | |||
pinMode(4, INPUT); | |||
pinMode(5, INPUT); | |||
pinMode(bass, OUTPUT); | |||
pinMode(tom, OUTPUT); | |||
pinMode(snare, OUTPUT); | |||
pinMode(cymbal, OUTPUT); | |||
Serial.begin(9600); // Initialize serial port to send and receive at 9600 baud | |||
Serial.flush(); | |||
digitalWrite(4,LOW); | |||
digitalWrite(5,LOW); | |||
} | |||
void getTime() | |||
{ | |||
unsigned long time = millis(); | |||
while (digitalRead(5) == LOW) | |||
Serial.println("waiting"); | |||
Serial.println("done"); | |||
Delay = millis() - time; | |||
Delay = Delay /2; | |||
} | |||
void wait() | |||
{ | |||
if(digitalRead(4) == HIGH && digitalRead(5) == LOW) | |||
{ | |||
getTime(); | |||
} | |||
else | |||
{ | |||
unsigned long time = millis(); | |||
while (time + Delay > millis()) | |||
{ | |||
if(digitalRead(4) == HIGH && digitalRead(5) == LOW) | |||
{ | |||
getTime(); | |||
} | |||
} | |||
} | |||
} | |||
char checkForStart() | |||
{ | |||
int value=-1; | |||
value = Serial.read(); | |||
return (char) value; | |||
} | |||
char readNextCharacterFromSerial() | |||
{ | |||
int value = -1; | |||
do | |||
{ | |||
value = Serial.read(); | |||
} | |||
while(value == -1); | |||
return (char) value; | |||
} | |||
void readCommand() | |||
{ | |||
int index = 0; | |||
String command = ""; | |||
if(checkForStart() == '[') | |||
{ | |||
char receivedChar = readNextCharacterFromSerial(); | |||
while(receivedChar != ']') | |||
{ | |||
while(receivedChar != ',') | |||
{ | |||
command = command + receivedChar; | |||
receivedChar = readNextCharacterFromSerial(); | |||
} | |||
Rhythms[index] = command.toInt(); | |||
index++; | |||
command = ""; | |||
receivedChar = readNextCharacterFromSerial(); | |||
} | |||
} | |||
//for(int i = 0; i < 16; i++) | |||
//{ | |||
// Serial.println(Rhythms[i]); | |||
//} | |||
} | |||
void loop() | |||
{ | |||
for(int i = 0; i <= 15; i ++) | |||
{ | |||
wait(); | |||
Serial.println(Delay); | |||
sound(Rhythms[i],Delay); | |||
if( Serial.available()) | |||
{ | |||
readCommand(); | |||
Serial.flush(); | |||
} | |||
} | |||
} | |||
</nowiki> |
Huidige versie van 8 feb 2013 om 08:18
Info:
Door: Joris Metzemaekers & Daan Steenbakkers & Roland van der Burg Dit is een robot gemaakt voor het kekrobot project. De Drumbot is een machine, die door middel van een [Arduino Uno] en een drumstel, kan drummen. Hiervoor gebruiken wij 4 [Halfgeleiderrelais] en 4 solenoids. Hiervoor hebben wij ook een labvoeding nodig om de solenoids van de benodigde stroom te voorzien. Door middel van de code worden de relais aangestuurd zodat de solenoids dichtklappen. Aan de solenoids hebben wij stokjes vast gemaakt. Deze slaan op hun beurt tegen de drums van het drumstel. [plaatje Drumrobot]
Status:
De drumbot kan rythme, noten en in groep spelen.
Problemen:
-De Launchpad is te beperkt voor seriële communicatie
-Servo motoren maakte onvoldoende geluid.
-Stap response motor was stil genoeg maar had niet de kracht.
Media:
Youtube link naar het filmpje van de drumbot
Code:
#include "Wire.h" int bass = 9; int tom = 10; int snare = 8; int cymbal = 11; int count = 0; int delay_drums = 0; void setup() { Wire.begin(3); pinMode(bass, OUTPUT); pinMode(tom, OUTPUT); pinMode(snare, OUTPUT); pinMode(cymbal, OUTPUT); } void loop() { delay_drums = Wire.read(); if (delay_drums != 0) // todo commando stop afvangen en stop(); aanroepen { switch (count) { case 0: Rhythm1(delay_drums); count++; break; case 1: Rhythm2(delay_drums); count++; break; case 2: Rhythm3(delay_drums); count++; break; case 3: count++; break; case 4: count = 0; break; default: break; } } }
void BassDrum(void) { digitalWrite(bass, HIGH); } void TomDrum(void) { digitalWrite(tom, HIGH); } void SnareDrum(void) { digitalWrite(snare, HIGH); } void CymbalDrum(void) { digitalWrite(cymbal, HIGH); } void Reset(void) { digitalWrite(bass, LOW); digitalWrite(tom, LOW); digitalWrite(snare, LOW); digitalWrite(cymbal, LOW); }
/* Combinaties (waarbij uitgegaan is van een persoon) 0: Reset 1: Bass 2: Snare 3: Tom 4: Cymbal 5: Bass & Snare 6: Bass & Tom 7: Bass & Cymbal 8: Snare & Cymbal 9: Tom & Cymbal 10: Tom & Snare 11: Bass & Tom & Snare 12: Bass & Tom & Cymbal 13: Bass & Snare & Cymbal 14: Tom & Snare & Cymbal 15: Bass & Tom & Snare & Cymbal 16: Delay */ int Rhythms[16] = {5,16,2,16,7,16,2,16,5,16,2,16,5,3,2,16}; int Delay = 125; int bass = 9; int tom = 10; int snare = 8; int cymbal = 11; int count = 0; int delay_drums = 125; void setup() { pinMode(4, INPUT); pinMode(5, INPUT); pinMode(bass, OUTPUT); pinMode(tom, OUTPUT); pinMode(snare, OUTPUT); pinMode(cymbal, OUTPUT); Serial.begin(9600); // Initialize serial port to send and receive at 9600 baud Serial.flush(); digitalWrite(4,LOW); digitalWrite(5,LOW); } void getTime() { unsigned long time = millis(); while (digitalRead(5) == LOW) Serial.println("waiting"); Serial.println("done"); Delay = millis() - time; Delay = Delay /2; } void wait() { if(digitalRead(4) == HIGH && digitalRead(5) == LOW) { getTime(); } else { unsigned long time = millis(); while (time + Delay > millis()) { if(digitalRead(4) == HIGH && digitalRead(5) == LOW) { getTime(); } } } } char checkForStart() { int value=-1; value = Serial.read(); return (char) value; } char readNextCharacterFromSerial() { int value = -1; do { value = Serial.read(); } while(value == -1); return (char) value; } void readCommand() { int index = 0; String command = ""; if(checkForStart() == '[') { char receivedChar = readNextCharacterFromSerial(); while(receivedChar != ']') { while(receivedChar != ',') { command = command + receivedChar; receivedChar = readNextCharacterFromSerial(); } Rhythms[index] = command.toInt(); index++; command = ""; receivedChar = readNextCharacterFromSerial(); } } //for(int i = 0; i < 16; i++) //{ // Serial.println(Rhythms[i]); //} } void loop() { for(int i = 0; i <= 15; i ++) { wait(); Serial.println(Delay); sound(Rhythms[i],Delay); if( Serial.available()) { readCommand(); Serial.flush(); } } }