Ljud-producerande automat
Arduino-drivna projekt
Video:
(Obs: vi har redigerat ljudet över själva videon. Anledningen att vara var att under inspelningen och kontrollera våra klipp inte kunde vi höra verkliga ljud medan de var där. När vi gjort videon, kunde du höra de faktiska ljud som aktiverades genom att använda automaten medan vi trodde de inte var registreras av kameran. Så, det är därför du höra ljud två gånger! Verkade som kameran * gjorde * spela in ljud trots allt! :) )
Material som krävs;
-SRF10 eller SRF08 Devantech ultraljud Ranger Finder
-Arduino hoppare ledningar (länge nog, annars du kommer att behöva löda kablar ihop)
-Tape
-En automat!
-Vissa talare (eller bara använda din bärbara dator att spela upp ljud)
Verktyg som krävs;
-Arduino (+ behandling)
-Grundläggande Arduino & bearbetning kunskap
-Chanserna är du behöva löda om dina ledningar inte är tillräckligt lång för
-Låter!
Processen;
1. först och främst hitta en lämplig plats. Kom ihåg att du behöver dölja din bärbara dator, din Arduino och så småningom högtalarna utom synhåll.
2. du kommer behöva plats/stick ultraljud sensorn så att det kommer att utlösa en förändring av data som människor använder automaten. Nu kontrollera om ledningarna är tillräckligt länge från sensorn till platsen du ska dölja din laptop, Arduino, etc. Om inte, löda kablarna tills de är tillräckligt lång.
3. hitta ljud ska spelas upp när människor utlösa koden genom sensorn. MP3-formatet är det enklaste att använda. Hittade de ljud du vill ha? Starta en ny behandling skiss, spara skissen och klistra in din ljud i motsvarande mapp. Visa bearbetning koden i avsnittet "rå koden". Ersätta .mp3 filnamnen med din mp3-filnamn. Så småningom, ta bort eller lägga till ljud som du behaga.
4. kopiera och klistra in koden Arduino och ansluta allt till varandra. Se om du ta emot data i din bearbetning från Arduino. Se till att allt fungerar! Något fungerar inte? Prova och hitta misstaget steg för steg. Får din bearbetning alla värden? Vilken typ av värden? Gör Arduino skriva ut dina värden innan du skriver dem, osv.
(Chanserna är koden måste finjusteras lite att få saker att fungera för dig!)
5. okej! Dags att finslipa. Börja med att placera dina verktyg (sensor, arduino, laptop, högtalare) där de ska. Innan du tejpa i sladdar, etc. Kontrollera (genom provning), vilka data som du får när folk använder automaten. Tweak din kod så att det svarar till ändringen av data. Detta är vanligtvis den svåra biten!
6. tejpa upp trådarna, Dölj allt, kör kod och njut!
7. programmet fastnat? Försök starta bearbetning eller återställa din Arduino.
Rå kod;
ARDUINO-KOD--
I2C SRF10 eller SRF08 Devantech ultraljud Ranger Finder Visar användning av Wire biblioteket läsa data från den Skapad 29 April 2006 Denna exempelkod är offentlig. #include void setup() int läsa = 0; void loop() changeAddress (oldAddress, newAddress); While(1) { } } I följande kod ändras adressen av en Devantech ultraljud Range Finder (SRF10 eller SRF08) void changeAddress (int oldAddress, int NyAdress)
av Nicholas Zambetti
och James Tichenor
Devantech Utrasonic Rangers SFR08 och SFR10
{
Wire.BEGIN(); gå med i2c bussen (adress valfritt för master)
Serial.BEGIN(9600); Starta seriell kommunikation på 9600bps
}
{
int data = 0;
int oldAddress = 0x70; I2C gebruikt enkel 7 bitars adressen (de MSB) dus 0xE0 wordt 0x70
int NyAdress = 0xE2; överensstämmer med adress 2--> 0xE4
int NyAdress = 0x71; enda 7-bits används--> 0x72
booleska håll = false;
data = readData(newAddress);
IF(data!=0) {
Serial.println(data);
IF(data >100) {
Serial.write("e");
annars om (data < 90) {
Serial.write("f");
}
}
annat {
Serial.write("0");
}
Delay(100); vänta lite eftersom människor har att läsa utdata
Delay(1000);
}
användning: 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();
}
Följande kod är att läsa sensordata
int readData (int adress) {
int läsa = 0;
steg 1: instruera sensorn att läsa ekon
Wire.beginTransmission(address); överföra till enhet #112 (0x70)
den adress som anges i databladet är 224 (0xE0)
men i2c adressing använder höga 7 bitar så det är 112
Wire.write(byte(0x00)); uppsättningar registrera pekaren till kommandot register (0x00)
Wire.write(byte(0x51)); kommandot sensor för mätning i "cm" (0x51)
använda 0x50 för inches
använda 0x51 för centimeter
använda 0x52 för ping mikrosekunder
Wire.endTransmission(); stoppa överföring
steg 2: vänta för värden som hända
Delay(70); datablad tyder på minst 65 millisekunder
steg 3: instruera sensor för att returnera en viss echo läsning
Wire.beginTransmission(address); överföra till enhet #112
Wire.write(byte(0x02)); uppsättningar registrera pekaren för att upprepa #1 register (0x02)
Wire.endTransmission(); stoppa överföring
steg 4: begär läsning från sensorn
Wire.requestFrom (adress, 2); begära 2 byte från slav enhet #112
steg 5: ta emot behandlingen från sensorn
om (2 < = Wire.available()) / / om två byte mottogs
{
läsning = Wire.read(); få hög byte (skriver över förra behandlingen)
läsning = läsning << 8. Shift övre byte vara hög 8 bitar
läst | = Wire.read(); få låga byte som lägre 8 bitar
returnera behandlingen.
}
Return 0;
}
BEARBETNING KOD-
import processing.serial.*; Minim minim; Seriella myPort; int r; void setup() { println(Serial.list()); void serialEvent (Serial myPort) { int inByte = myPort.read(); println(inByte); om (inByte == 102 & & hand == false) { för (int jag = 0; jag < 9000; i ++) { om (r == 1) { in5.Play(); } void draw() { void stop() Super.stop();
import ddf.minim.*;
AudioPlayer
AudioPlayer in2;
AudioPlayer in3;
AudioPlayer in4;
AudioPlayer in5;
Booleska hand = false;
storlek (800, 600);
Minim = nya Minim(this);
i = minim.loadFile("god.mp3");
IN2 = minim.loadFile("applaus.mp3");
in3 = minim.loadFile("babygelach.mp3");
in4 = minim.loadFile("scheet.mp3");
in5 = minim.loadFile("muntje.mp3");
Sträng portName = Serial.list() [6].
myPort = ny följetong (här, portName, 9600);
Background(0);
r = 0;
}
int r = int (random(1, 4));
println(r);
hand = sant;
println(hand);
// }
in.Play();
}
annars om (r == 2) {
IN2.Play();
}
annars om (r == 3) {
in3.Play();
}
annars om (r == 4) {
in4.Play();
}
annat {
}
}
om (inByte == 101) {
hand = false;
println(hand);
}
}
{
in.Close();
Minim.stop();
}