Papper elektronik: Göra Interactive, musikaliska konstverk med ledande bläck (2 / 5 steg)
Steg 2: Skapa elektronik
http://www.bareconductive.com/Capacitance-sensor
Den hårdvara som krävs för detta projekt består av:
1 x Arduino
4 x 1 mega Ohm motstånd
2 x LED (inte nödvändigt)
1 x manliga 4-vägs uttag
1 x kvinnliga 4-vägs jack kontakt
1 x högtalare
Ett urval av startkablar
Detta är en relativt enkel krets att skapa. Till att börja med måste vi ansluta ett 1 mega ohm motstånd mellan 4 par utgångar på Arduino; dessa par är 2 och 4, 5 och 6, 8 och 9, 10 och 11. Vi tar nu en tråd från stift 4,6,9 och 11, dessa är våra sensoringångar. Stift 4 kommer så småningom gå till våra avstånd sensing målade område och stift 6,9 och 11 kommer att gå till målade knapparna. I detta skede vill vi ansluta dessa 4 Sensorkablar till 4-vägs kvinnliga jack kontakt.
Utgång för ljud kommer från stift 7. Detta innebär att vi behöver tråd i en högtalare eller hörlursuttaget mellan stift 7 och marken på Arduino.
Jag bestämde att det skulle vara trevligt att ha några lysdioder på enheten så att du kan se vad som hände. Jag trådbundna upp en "ström på" LED mellan 3.3V och marken på Arduino och en "Frekvensindikator" mellan stift 13 och marken på Arduino.
Arduino drivs via uttaget Vin på bordet. Jag bestämde mig att tråd i en Vippbrytare i här för att göra det trevligt och lätt att slå på och av.
Det var lätt, var det? Nu för koden...
Anslut din Arduino till din dator och ladda ner följande kod. Här koden kräver CapSense biblioteket, så om du inte har det, chef över till Arduino webbplats och hämta den där.
För att testa och kalibrera det är värt bara crocodile klippning din fyra Sensorkablar din fyra ledande målade/tryckt områden.
Detta är där det hela blir lite oförutsägbar... Alla kommer att vara målning eller skriva ut olika storlekar av kala Konduktiv beröringspunkter med olika tjocklekar av bläck, krävs en plats av kalibrering. Förhoppningsvis är det bara avstånd sensorn som behöver kalibreras. Det borde vara ganska lätt att göra genom att spela med total2 värde i koden (du bör se värdena kommer från sensorn i följetong monitor). Om det inte fungerar för dig kan du behöva prova andra värden av motstånd. Jag är rädd att detta steg är en lite trial and error.
Arduino kod:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include < CapSense.h >
CapSense cs_2_4 = CapSense(2,4); 1 Megaohm motstånd mellan stift 4 & 2, stift 2 är avståndet sensor stift, lägga till kala färg
CapSense cs_5_6 = CapSense(5,6); 1 Megaohm motstånd mellan stift 6 & 5, stift 5 är sensor stift, lägga till kala färg
CapSense cs_8_9 = CapSense(8,9); 1 Megaohm motstånd mellan stift 9 & 8, stift 8 är sensor stift, lägga till kala färg
CapSense cs_10_11 = CapSense(10,11); 1 Megaohm motstånd mellan stift 11 & 10, stift 10 är sensor stift, lägga till kala färg
CONST int ledPin = 12;
CONST int ledPin2 = 13.
int varaktighet;
void setup()
{
cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF); stänga av autocalibrate på kanal 1 - bara som ett exempel
cs_5_6.set_CS_AutocaL_Millis(0xFFFFFFFF);
cs_8_9.set_CS_AutocaL_Millis(0xFFFFFFFF);
cs_10_11.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serial.BEGIN(9600);
pinMode (13, OUTPUT);
pinMode (12, OUTPUT);
}
void loop()
{
långa start = millis();
långa total1 = cs_2_4.capSense(30);
lång total2 = total1 - 100. kalibreringsmönstret för pad...
långa rapportkolumn = cs_5_6.capSense(30);
lång totalB = cs_8_9.capSense(30);
lång totalC = cs_10_11.capSense(30);
Serial.println(total2);
{
om (total2 < 150) {//Start genererar olika toner för olika avstånd. Detta kommer att behöva callibrating genom att ändra värdet på total2
noTone(7);
}
om (total2 > 150 och total2 < 200) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,131,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 250 och total2 < 300) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,147,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 350 och total2 < 400) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,165,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 400 och total2 < 450) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,175,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 450 och total2 < 500) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,196,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 500 och total2 < 550) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,220,5000);
Delay(duration);
noTone(7);
Delay(duration);
}
om (total2 > 550 och total2 < 600) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,247,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
om (total2 > 600) {
Aktivera LED
digitalWrite (ledPin2, hög);
Tone(7,262,5000);
Delay(duration);
noTone(7);
digitalWrite (ledPin2, låg);
Delay(duration);
}
}
om (rapportkolumn > 800) {//if ingång en är pressad ändra varaktigheten mellan toner
Aktivera LED
digitalWrite (ledPin2, hög);
längd = 500.
Serial.println ("500 fördröjning");
}
om (totalB > 800) {//if ingång två är pressad ändra varaktigheten mellan toner
Aktivera LED
digitalWrite (ledPin2, hög);
längd = 100;
Serial.println ("100 fördröjning");
}
om (totalC > 800) {//if ingång tre är pressad ändra varaktigheten mellan toner
Aktivera LED
digitalWrite (ledPin2, hög);
längd = 25;
Serial.println ("25 dröjsmål");
}
annat {
Inaktivera LED
digitalWrite (ledPin2, låg);
}
godtyckliga dröjsmål att begränsa data till seriell port
}
char getcap(char pin)
{
char jag = 0;
DDRB & = ~ stift; ingång
PORTB | = pin; pullup på
för (jag = 0; jag < 16; i ++)
bryter ((PINB & pin));
PORTB & = ~ stift; låg nivå
DDRB | = pin; ansvarsfrihet
tillbaka i;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////