Arduino-aangedreven project
Video:
(Opmerking: We bewerkten de geluiden over de werkelijke video. De reden is dat tijdens de opname was en onze clips controleren kon niet wij de werkelijke geluiden horen terwijl ze er waren. Wanneer we de video opgebouwd, kon je horen de werkelijke geluiden die waren geactiveerd met behulp van de automaat, terwijl we dachten dat ze waren niet opgenomen door de camera. Dus, dat is waarom je hoort de geluiden tweemaal! Leek dat de camera * heeft * immers de geluiden opnemen! :) )
Materialen vereist;
-SRF10 of SRF08 Devantech ultrasone Ranger Finder
-Arduino jumper draden (lang genoeg, anders u zult moeten om te solderen draden samen)
-Tape
-Een automaat!
-Sommige sprekers (of gewoon gebruik maken van uw laptop geluid af te spelen)
Gereedschap;
-De Arduino (+ Processing)
-Basic Arduino en Processing kennis
-De kansen zijn dat u nodig hebt om te solderen als uw draden niet lang genoeg
-Klinkt!
Proces;
1. ten eerste, vinden een geschikte locatie. Vergeet niet dat u nodig hebt om uw laptop, uw Arduino en uiteindelijk uw sprekers uit het zicht te verbergen.
2. u moet naar plaats/stick de ultrasone sensor op een zodanige wijze dat het leiden een verandering van gegevens tot zal zoals mensen gebruik maken van de automaat. Nu controleren of de kabels lang genoeg van uw sensor naar de plaats u zijn zult het verbergen van uw laptop, Arduino, enz. Als dat niet het geval is, soldeer de draden tot ze lang genoeg.
3. vind de geluiden die u afspelen wilt wanneer mensen de code via de sensor activeren. MP3-formaat is het makkelijkst te gebruiken. De gewenste geluiden gevonden? Start een nieuwe Processing Schets, sla de schets en plak je geluiden in de bijbehorende map. Zie de verwerking code in het gedeelte 'ruwe code'. De namen van de .mp3-bestanden vervangen door de namen van uw mp3-bestanden. Uiteindelijk, verwijderen of toevoegen van geluiden als u alstublieft.
4. Kopieer en plak de code van de Arduino en alles met elkaar te verbinden. Zie als u gegevens in uw verwerking van Arduino ontvangt. Zorg ervoor dat alles werkt! Iets niet werkt? Probeer en vind de fout stap voor stap. Krijgt uw Processing waarden? Wat voor soort waarden? Controleer de Arduino afdrukken van uw waarden vóór schrijven ze, enz.
(Kans op zijn code heeft worden een beetje getweakt om dingen voor u werken!)
5. goed! Tijd om finetune. Begin met het plaatsen van uw tools (sensor, arduino, laptop, luidsprekers) waar ze moeten zijn. Voordat u tape de draden, enz. Controleren (door te testen), welke gegevens die u ontvangt wanneer mensen de automaat gebruiken. Uw code op zodanige wijze dat het beantwoordt aan de wijziging van de gegevens aanpassen. Dit is meestal het moeilijke gedeelte!
6. tape van de draden, alles, verborgen de code uitvoeren en geniet van!
7. programma vast? Uitproberen herstarten Processing of resetten van uw Arduino.
Ruwe code;
ARDUINO CODE--
I2C-SRF10 of SRF08 Devantech ultrasone Ranger Finder Toont de toepassing van de draad bibliotheek lezen van gegevens uit de Gemaakt van 29 April 2006 Deze voorbeeldcode is in het publieke domein. #include VOID Setup int lezing = 0; void loop changeAddress (oldAddress, NieuwAdres); while(1) {} } } De volgende code wijzigt het adres van een Devantech ultrasone Range Finder (SRF10 of SRF08) VOID changeAddress (int oldAddress, int NieuwAdres)
door Nicholas Zambetti
en James Tichenor
Devantech Utrasonic Rangers SFR08 en SFR10
{
Wire.begin(); Join i2c bus (adres facultatief voor master)
Serial.begin(9600); Start seriële communicatie 9600 bps
}
{
int gegevens = 0;
int oldAddress = 0x70; I2C gebruikt enkel 7 bits adressen (de MSB) dus 0xE0 wordt 0x70
int NieuwAdres = 0xE2; strookt met adres 2--> 0xE4
int NieuwAdres = 0x71; alleen 7-bits worden gebruikt -> 0x72
Booleaanse hold = false;
gegevens = readData(newAddress);
if(data!=0) {}
Serial.println(Data);
if(Data >100) {}
Serial.write("e");
anders als (gegevens < 90) {}
Serial.write("f");
}
}
else {}
Serial.write("0");
}
delay(100); een beetje wachten, omdat mensen hebben om te lezen van de uitvoer
delay(1000);
}
gebruik: changeAddress(0x70, 0xE6);
{
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA0));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xAA));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA5));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(newAddress);
Wire.endTransmission();
}
De volgende code wordt de sensorgegevens lezen
int readData (int adres) {}
int lezing = 0;
stap 1: instrueren sensor te lezen van echo's
Wire.beginTransmission(address); verzenden naar apparaat #112 (0x70)
het adres dat is opgegeven in het gegevensblad is 224 (0xE0)
maar i2c omgaan de hoge 7 bits gebruikt dus het is 112
Wire.write(byte(0x00)); sets registreren pointer naar het register van de opdracht (0x00)
Wire.write(byte(0x51)); opdracht sensor voor het meten in "centimeters" (0x51)
0x50 gebruiken voor inches
gebruik 0x51 voor centimeter
gebruik 0x52 voor ping microseconden
Wire.endTransmission(); stoppen met het verzenden van
stap 2: wachten op lezingen te gebeuren
delay(70); gegevensblad suggereert ten minste 65 milliseconden
stap 3: instrueren sensor om terug te keren een bijzondere echo-lezing
Wire.beginTransmission(address); verzenden naar apparaat #112
Wire.write(byte(0x02)); sets registreren aanwijzer voor de echo van de #1 register (0x02)
Wire.endTransmission(); stoppen met het verzenden van
stap 4: lezing aanvragen met sensor
Wire.requestFrom (adres, 2); 2 bytes voor aanvragen vanaf slave apparaat #112
stap 5: lezing ontvangen sensor
Als (2 < = Wire.available()) / / als twee bytes ontvangen
{
lezen = Wire.read(); Ontvangen van hoge byte (overschrijft de vorige lezing)
lezen = lezing << 8; de hoge byte van de SHIFT te zijn van de hogere 8 bits
lezen | = Wire.read(); lage byte ontvangen als lagere 8 bits
retourneren van lezing;
}
keren 0;
}
DE CODE VAN DE VERWERKING-
importeren van processing.serial.*; Minim minim; Seriële myPort; int r; VOID Setup {} println(Serial.List()); VOID serialEvent (seriële myPort) {} int inByte = myPort.read(); println(inByte); Als (inByte == 102 & & hand == false) {} for (int i = 0; ik < 9000; i ++) {} Als (r == 1) {} in5.Play(); VOID draw() {} VOID stop() Super.stop();
importeren van ddf.minim.*;
AudioPlayer
AudioPlayer in2;
AudioPlayer 3;
AudioPlayer in4;
AudioPlayer in5;
Hand van Boole = vals;
grootte (800, 600);
Minim = nieuwe Minim(this);
in = minim.loadFile("god.mp3");
in2 = minim.loadFile("applaus.mp3");
3 = minim.loadFile("babygelach.mp3");
in4 = minim.loadFile("scheet.mp3");
in5 = minim.loadFile("muntje.mp3");
String portName = Serial.list() [6];
myPort = nieuwe Serial (deze, portName, 9600);
Background(0);
r = 0;
}
int r = int (random(1, 4));
println(r);
hand = true;
println(hand);
// }
in.Play();
}
anders als (r == 2) {}
IN2.Play();
}
anders als (r == 3) {}
in3.Play();
}
anders als (r == 4) {}
in4.Play();
}
else {}
}
}
Als (inByte == 101) {}
hand = false;
println(hand);
}
}
}
{
in.Close();
Minim.stop();
}