Arduino handskar (ett försök) (2 / 5 steg)

Steg 2: Schematiskt / koden



Detta är schematiska och koden jag använde från den andra instructable. Den enda skillnaden jag gjorde var att jag ville använda två handskar i stället för en handske och stick. Så om du ville MIME-något annat instrument du kunde, till exempel om jag ville spela det som en harpa eller något. Att beslutet var rent visual-baserade.

------------------------------------------------------
En array som innehåller vågformen
av en gitarr ljud
char vågform [] =
{125, 148, 171, 194, 209, 230, 252, 255,
253 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134, 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110};

Vi använder denna vågform för att ändra den
volymen av produktionen
char waveformVolume [] =
{125, 148, 171, 194, 209, 230, 252, 255,
253 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134, 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110};
En matris används som en buffert för att undvika
felaktiga punktliga avstånd
mätningar
unsigned int distance_buffer [] = {16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000};

CONST int distance_length = 3;
int distance_index = 0;

Overflow värdena för 2 oktaver
int frekvenser [] = {39, 42, 44, 47,
50, 52, 56, 59, 63, 66, 70, 74, 79,
84, 89, 94, 100, 105, 112, 118, 126,
133, 141, 149};

Första pitch
int pitch = 160;

Ursprunglig volym och acceleration
parametern
int lastAcc = 0;
flyta volym = 0;

ljuduppspelning på stift 3
byte speakerpin = 3;

index variabel för position i
vågform
flyktiga byte waveindex = 0
flyktiga byte currentvalue = 0;

PIN-kod används för ultra sonic sensor
CONST int pingPin = 7.

Stift för potentiometrar
CONST int sustainPin = 1;
CONST int sensitivityPin = 2;

Stift för varje finger vänstern
hand
CONST int finger1 = 9;
CONST int finger2 = 10;
CONST int finger3 = 11;
CONST int finger4 = 12;

int fingerValue = 0;

lång varaktighet, tum, cm;

void setup() {

pinMode(3,OUTPUT); Talare på stift 3

pinMode(finger1,INPUT);
pinMode(finger2,INPUT);
pinMode(finger3,INPUT);
pinMode(finger4,INPUT);

/**************************
PWM ljud konfiguration
****************************/
Ange Timer2 till fast PWM-läge
(dubbel PWM frekvens)
bitSet (TCCR2A, WGM21);
bitSet (TCCR2B, CS20);
bitClear (TCCR2B, CS21);
bitClear (TCCR2B, CS22);

Aktivera avbryter nu som registrerar
har ställts in
SEI();

/*************************
Timer 1-avbrott konfiguration
*************************/
Inaktivera avbrott medan
register är konfigurerade
CLI();

/ * Normal port drift, stiften kopplas från
från timer funktion (bryta pwm) * /
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);
bitClear (TCCR1A, COM1A1);

/ * Läge 4, CTC med topp inställt av register
OCR1A. Ger oss möjlighet att ange variabel tidpunkten för
avbryta genom att skriva nya värden till
OCR1A. */
bitClear (TCCR1A, WGM10);
bitClear (TCCR1A, WGM11);
bitSet (TCCR1B, WGM12);
bitClear (TCCR1B, WGM13);

/ * klocka prescaler inställd på /8. */
bitClear (TCCR1B, CS10);
bitSet (TCCR1B, CS11);
bitClear (TCCR1B, CS12);

/ * Inaktivera kraft utdata jämför för
Kanalerna A och B. * /
bitClear (TCCR1C, FOC1A);
bitClear (TCCR1C, FOC1B);

/ * Initierar utdata jämför
Registrera dig A på 160 ställa den
första pitch * /
OCR1A = 160;

Inaktivera input capture avbrott
bitClear (TIMSK1, ICIE1);
avaktivera utgång
Jämföra B Match avbrott
bitClear (TIMSK1, OCIE1B);
Aktivera utgång
Jämföra en Match avbryta
bitSet (TIMSK1, OCIE1A);
Inaktivera Overflow avbryta
bitClear (TIMSK1, TOIE1);

Aktivera avbryter nu som
register har ställts in
SEI();
}

Timer overflow handler
ISR(TIMER1_COMPA_vect) {

/ * timer1 ISR. Varje gång det
kallas det anger speakerpin till de
nästa värde i vågform []. Frekvens
modulering är gjort genom att ändra den
timingen mellan på varandra följande samtal av
denna funktion, t.ex. för en 1KHz ton,
Ange tidsinställningar så att det körs
genom vågform [] 1000 gånger
en sekund. */

återställa waveindex om det har nått
i slutet av matrisen

om (waveindex > 102) {
waveindex = 0;
}

Ställa in produktionsvärde
om (volym > 0,03) {
analogWrite (speakerpin,
waveformVolume[waveindex]);
}
waveindex ++;

Uppdatera planen
OCR1A = stigningen.
}

void loop()
{
Desactivate interputs, skicka en ping
meddelande och vänta på svaret.
CLI();
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
längd = pulseIn (pingPin, hög, 2000);
SEI();
konvertera tiden till ett avstånd
i centimeter
och lagra i buffert
distance_buffer [distance_index ++
% distance_length] = varaktighet / 20;

Hitta i bufferten den kortaste
avståndet mätt
cm = 16000;
för (int jag = 0; jag < distance_length; i ++) {
cm = min (cm, distance_buffer[i]);
}

Kontrollera vilka fingrar trycker
fingerValue = 5;
IF(!digitalRead(finger4)) {
fingerValue = 4;
}
IF(!digitalRead(finger3)) {
fingerValue = 3;
}
IF(!digitalRead(finger2)) {
fingerValue = 2;
}
IF(!digitalRead(finger1)) {
fingerValue = 1;
}

Uppdatera sustain och
känslighet värden
float upprätthålla =
Map(analogRead(sustainPin), 0,
1024, 101, 130) / 100,0;
int känslighet =
Map(analogRead(sensitivityPin),
0, 1024, 100, 200);

Uppdatera volym
volym = volym / upprätthålla;
om (volym < 0) {
volym = 0;
}

Kontrollera accelerometern
int acc = analogRead(0);
int accDiff = lastAcc - acc;

Uppdatera volym värdet
om (accDiff > 5 * (200 - känslighet)) {
volym += (float)
pow (accDiff,
känslighet / 100,0) / 50000;
}
lastAcc = acc;

Kontrollera att volymen inte är högre än 1
om (volym > 95) {
volym =. 95;
}

Uppdatera volym i vågformen
för (int jag = 0; jag < = 102; i ++) {
waveformVolume [i] =
((vågform [i] - 127) * volym) + 127;
}

Inställning av tonhöjd utifrån avståndet
mellan två händer och den
fingrar tryckte
om (cm < 102 & & cm > 0) {
om (cm > 30) {
pitch = frekvenser [7 +
(((cm-30) / 24) * 4 + fingerValue - 1)];
} annat {
pitch = karta (cm, 0, 30, 39, 79);
}
} annat {
pitch = frekvenser [7 +
(((102-30)/24) * 4 + fingerValue - 1)];
}

Dröjsmål att undvika studsande signaler
Delay(50);
}

------------------------------------------------------

Se Steg
Relaterade Ämnen

BaW-Bot del 1: Bygga en Arduino på ett bräde

Detta är den första delen av våra BaW-Bot (klockor och visselpipor Bot) bygga-5 separata instructables som undersöka olika Arduino-relaterade tekniker, kombinera för att skapa en Bot med alla klockor-och-visselpipor.Del 1: Bygga en Arduino på ett brä...

Hur man styr arduino med ett mail

Det finns många lösningar för att styra en Arduino ombord: web lösningar, desktopen applicering lösningar, lösningar. Men hur mail? Ja, du kan hitta något på nätet men de behöver ethernet sköldar och ofta är Arduino som skickar e-post. Jag kontroll A...

Extra ingångar för Arduino med ett tangentbord

Arduino är kanske häftigaste på jorden. Det finns många typer, Uno, Mega, Pro, Pro Mini, etc. etc.Men en sak som ofta kan vara ett problem är att du bara har ett begränsat antal in- och utgångar. Det finns många lösningar för det, allt från multiplex...

Kör två Nixie rör med en Arduino via ett skiftregister och två SN74141s.

Nixie rör är verkligen göra sval sett och blir ganska populär för sina "retro" utseende. Även om det finns ett antal tutorials ute på med nixie rör och några fina färdigförpackade enheter (se dessa trevliga sådana från ogi lumen och ArduiNIX) in...

Gränsyta för din arduino med ett C# programmet

Någonsin velat göra egna program (*.exe) att arbeta med din arduino (eller andra seriell kommunikation enhet)?Detta instructable kräver:-Visual Studio 2008 eller senare * (jag använder 2010 RC, vissa alternativ kan variera mellan versioner)ELLER-Visu...

Styra en Arduino med ett armbandsur (TI eZ430 Chronos)

klockanTexas Instruments eZ430 Chronos är en cool gadget. Det har dubbelriktad radiokommunikation och en hel massa sensorer: temperatur, tryck, acceleration.I själva verket är det ett development kit för MSP 430 (en lågenergi-mikrokontroller), som TI...

Hur man gör en Arduino ombord ett bröd. :D

delar:1. en ATMEGA 382p2.16 MHz kristalloscillator3. - två 22 pf kondensatorer (keramiska disk)4. KA7805 spänningsregulator.5. 10uf kondensatorn och en 10uf keramiska kondensator6. alla färg-lysdioder.7. en diod för säkerhet8. en switch.9. en fat jac...

Power Arduino från ett 9v batteri.

Har du någonsin velat driva du Arduino med ett 9v smet men visste inte hur? Väl är här en enkel instructable om hur man!Steg 1: material Behöver du:1. Arduino (något slag som har en power cord jack)2. en nätadapter med 2,1 mm uttag3. sax4. tejp (hels...

Arduino Powered Home

Jag har gjort några uppdateringar till detta instructable sedan Aug 2014 ***Jag bestämde mig att dela denna information så att det kan hjälpa andra som har kämpat för att göra liknande saker med deras Arduino. Jag har nyligen fått med Arduino. Jag kö...

Arduino sy lätt bärbar sköld

Wearable computing, e-textilier, mjuk kretsar eller vad du vill kalla det, är ett växande område av teknik på plagg eller accessoarer som väskor, skor och ryggsäckar. Det är en rolig och kreativ utmaning som går längre än att bara lägga till LED-lamp...

Arduino 7-Seg Display Clock

Detta är en Auduino klocka gjorde med Sunfounder kit. Detta är en riktigt cool projekt och lätt att göra!Steg 1: material Endast 9 material krävs för montering av arduino powered klockanSkärbrädaSladdarUSB-kabelTråd-kontakterCardstock boxSju segment...

5 & 8 siffrigt Arduino Counter

i detta projekt, kan du använda en skärbräda för montering den 8-siffriga sju segment LED display modulen och din Arduino Nano så att du kan ladda upp 5 & 8 siffrig counter kod. Det vill säga två olika program i ett enda projekt utan lödning någon tr...

Arduino kontrollerade fåniga sträng shooter

detta är en rolig enhet som är mycket enkel att göra.Jag satte mig i en pumpa till Halloween. Jag har också lagt till en IR rörelsesensor, ljud, och Twitter.Du kan följa antalet offer på Twitter genom att följa: hackolanternSteg 1: Material checklist...

Bultande hjärta godis skål med Arduino

Jag ville göra en godis skål för Bus eller godis som såg ut som en spooky hjärta slog under godis. Jag hoppas att de yngre barnen tycker det är skrämmande och inte alltför skrämmande. Jag är säker att tonåringar med ingen kostym och örngott inte blir...

Goodbye Moshi eller hur du kör din laserskrivare på Arduino

Uppdatering 19/04/2016:MarlinKimbra är här!Detta är en av de bästa firmwares baserat på Marlin jag sett på länge, ingen funktion saknas.Men för vårt syfte här är det bara om att vara uppdaterade och få bättre resultat.Kontrollera det sista steget i d...

4 x 4 x 4 ledde kub Arduino

Efter att ha sett alla olika instructables för Led kuber var jag fortfarande kvar med en massa obesvarade frågor. Så efter att ha läst allt jag kunde hitta detta är vad jag fick. Jag beslöt att göra den instructable efter byggnad den... så dåligt för...

Arduino raket vägledning

Raket vägledning kan uppnås 2 sätt, dragkraft vectoring och fin mete. Det sättet jag vägledande min raket är med hjälp av dragkraft vectoring. I grund och botten en Arduino med ett gyroskop och en accelerometer berätta servomotorer vilken väg att vin...

Arduino stränginstrument

Visst kan du använda LDR'S, potentiometrar och knappar för att generera ljud, men vad om strängar?När jag började tänka på en Arduino stränginstrument, insåg jag vad jag ville skapa var en mjuk potentiometer. Jag hittade min inspiration från Hannah P...

ATtiny seriell monitor använder arduino genomgång

Allllllllllright dudes och dudets. Här är whats upp, vi kommer att göra attiny och arduino bästa av vänner.Om du någonsin har arbetat med kapacitiv växlar vet du hur mycket det gör du vill krossa ditt ansikte i en vägg... Nu föreställa sig du har ing...