Stap 2: Maak de elektronica
http://www.bareconductive.com/Capacitance-sensor
De hardware die nodig is voor dit project bestaat uit:
1 x Arduino
4 x 1 mega Ohm weerstanden
2 x LED (niet nodig)
1 x mannelijke 4-weg-jack
1 x vrouwelijke 4-weg jack aansluiting
1 x spreker
Een selectie van jumper kabels
Dit is een relatief eenvoudig circuit te maken. We moeten om te beginnen met verbinding maken met een 1 mega ohm weerstand tussen 4 paar uitgangen op de Arduino; deze paren zijn 2 en 4, 5 en 6, 8 en 9, 10 en 11. We nemen nu een draad van pins 4,6,9 en 11, dit zijn onze sensor-ingangen. Pin 4 zal uiteindelijk ga naar onze afstand sensing geschilderde gebied, en pin 6,9 en 11 zal gaan naar de geschilderde knoppen. In dit stadium willen we deze 4 sensor kabels verbinden met de 4-weg vrouwelijke aansluiting-aansluiting.
De Audio-uitgang komt van pin 7. Dit betekent dat we moeten draad in een luidspreker of hoofdtelefoonaansluiting tussen pin 7 en grond op de Arduino.
Ik besloot dat het leuk zou zijn om sommige LEDs hebben op het apparaat om te zien wat er gaande was. Ik bekabeld een 'inschakelen' LED tussen 3.3V en grond op de Arduino en een 'frequentie 'Indicator tussen pin 13 en grond op de Arduino.
De Arduino wordt gevoed via de Vin-aansluiting op het bord. Ik besloot om de draad in een tuimelschakelaar hier om er leuk en gemakkelijk om te zetten in- en uitschakelen.
Dat was eenvoudig, niet? Nu voor de code...
Je Arduino aansluit op uw computer en het downloaden van de volgende code. Deze code vereist de CapSense-bibliotheek, dus als je dit niet hebt, hoofd over aan de Arduino website en download het daar.
Omwille van de testen en kalibreren van het is de moeite waard gewoon krokodil knippen uw vier sensor-kabels aan op uw vier geleidende geschilderd/afgedrukt gebieden.
Dit is waar het allemaal krijgt een beetje onvoorspelbaar... Zoals iedereen is gonna be schilderij of het afdrukken van verschillende maten van blote geleidende aanrakingspunten met verschillende diktes van inkt, is een plek van kalibratie nodig. Hopelijk is het gewoon de afstandssensor die zal moeten gekalibreerd. Dat zou vrij eenvoudig te doen door te spelen over met de waarde van de total2 in de code (moet u de waarden uit de sensor in de seriële monitor). Als dat niet voor u werkt, moet u wellicht probeert u andere waarden voor de weerstand. Ik ben bang dat deze stap is een beetje trial and error.
Arduino Code:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include < CapSense.h >
CapSense cs_2_4 = CapSense(2,4); 1 megohm weerstand tussen de pinnen 4 & 2, pin 2 is afstand sensor pin, blote verf toe te voegen
CapSense cs_5_6 = CapSense(5,6); 1 megohm weerstand tussen pin 6 & 5, pin 5 is sensor pin, blote verf toe te voegen
CapSense cs_8_9 = CapSense(8,9); 1 megohm weerstand tussen pin 9 & 8, pin 8 is sensor pin, blote verf toe te voegen
CapSense cs_10_11 = CapSense(10,11); 1 megohm weerstand tussen de pennen 11 & 10, pin 10 is sensor pin, blote verf toe te voegen
Const int ledPin = 12;
Const int ledPin2 = 13;
int de duur;
VOID Setup
{
cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF); uitschakelen van de autocalibrate op kanaal 1 - net als een voorbeeld
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
{
lang starten = millis();
lange total1 = cs_2_4.capSense(30);
lange total2 = total1 - 100; kalibratie voor pad...
lange totalA = cs_5_6.capSense(30);
lange totalB = cs_8_9.capSense(30);
lange totalC = cs_10_11.capSense(30);
Serial.println(total2);
{
Als (total2 < 150) {//Start genereren van verschillende tonen voor verschillende afstanden. Dit moet callibrating door een wijziging van de waarde van total2
noTone(7);
}
Als (total2 > 150 en total2 < 200) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,131,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 250 en total2 < 300) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,147,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 350 en total2 < 400) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,165,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 400 en total2 < 450) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,175,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 450 en total2 < 500) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,196,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 500 en total2 < 550) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,220,5000);
delay(duration);
noTone(7);
delay(duration);
}
Als (total2 > 550 en total2 < 600) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,247,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
Als (total2 > 600) {}
LED inschakelen
digitalWrite (ledPin2, hoge);
Tone(7,262,5000);
delay(duration);
noTone(7);
digitalWrite (ledPin2, laag);
delay(duration);
}
}
Als (totalA > 800) {//if input is een geperste verandering duur tussen tonen
LED inschakelen
digitalWrite (ledPin2, hoge);
duur = 500;
Serial.println ("500 vertraging");
}
Als (totalB > 800) {//if ingang twee is geperst verandering duur tussen tonen
LED inschakelen
digitalWrite (ledPin2, hoge);
duur = 100;
Serial.println ("100 vertraging");
}
Als (totalC > 800) {//if ingang drie is geperst verandering duur tussen tonen
LED inschakelen
digitalWrite (ledPin2, hoge);
duur = 25;
Serial.println ("25 vertraging");
}
else {}
LED uitschakelen
digitalWrite (ledPin2, laag);
}
willekeurige vertraging te beperken gegevens naar seriële poort
}
char getcap(char pin)
{
char i = 0;
DDRB & = ~ pin; input
PORTB | = pin; pullup op
voor (ik = 0; ik < 16; i ++)
Als ((PINB & pin)) breken;
PORTB & = ~ pin; laag niveau
DDRB | = pin; kwijting
terug i;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////