Star Wars Adafruit Flora Theremin LED BH (6 / 7 steg)
Steg 6: Tekniska detaljer...
Tja, har jag fortfarande en undertråd av ledande tråd att använda. Det var bara snabbare tråd detta upp med traditionella metoder.
Flora körs med 3.3V logik.
Min HC-SR04 ultrasonic sensor körs på 5 volt och resultatet blir detsamma.
Så det är där Dangit Jim, jag '' m en konstnär, kinda, inte elingenjör...
Vad detta betyder är att du kan steka din Flora om du använder 5 volt logik enheter. Titta runt någon föreslog en enkel motstånd Spänningsavdelare krets (annars logic omvandlare chip/krets) för att ge dig något tillräckligt bra för regeringens arbete.
Så rotade genom min ebay resistor sortiment, jag kom nära något som fungerade.
För sensor utdata passerar ECHO linjen genom en 12K ohms motstånd till data stift. Även utfodring den samma data stiftet är en 22K ohm pullup motstånd från marken. Jag tror att det verkliga värden skulle vara 15K och 27K ohm.
TRIG avtryckaren på ultrasonic sensor verkade fungera bra på oförändrad signal från floran.
Jag gjorde samma sak med LDR eller fotocell eftersom jag skulle till makten som upp med rå spänning från batteriet.
Den grundläggande theremin skissen ändrades för att ljud baserat på läsningen av utrasonic sensorn och sedan ljud off igen baserat på input från fotocellen.
Du kunde gränssnitt theremin med något val av sensorer - stretch, tryck, kapacitiv touch, närhet sensorer, allt annat.
Igen, baserat på erfarenhet, jag kunde koppla upp två lysdioder med 130 ohm motstånd för varje utgång data stift till flash lampor.
Naturligtvis, jag kunde ha kastat i en laserdiod eller två i kretsen för kul men du ska ta ett öga ut.
Ta bort den seriella bläckpatron och justera alla förseningar skulle ge en mer kontinuerlig ton.
Jag satte bara standardvärden i stället för systemet gör ultrasonic sensor kalibrering.
Experimentera med värdena för detekteringsområde av sensorer och frekvensen spänner av ljudet.
Finns det några prov skisser ute för att mappa till etablerade musikaliska toner.
Allt detta var prototypen på en skärbräda.
Du kan sedan överföra kretsen till behån genom att skapa de nödvändiga kablarna beroende på där varje komponent fästs på behån.
Deoptymalizować koden följer
===============================================================================
/ * Ping))) Sensor
Denna skiss läser en PING))) ultraljud avståndsmätare och returnerar den
avståndet till närmaste objektet i intervallet. Det gör skickar det en puls
till sensorn att inleda en behandling, då lyssnar efter en puls
för att återgå. Längden på den återkommande pulsen är proportionell mot
distansera av objektet från sensorn.
Krets:
* + V anslutning av PING))) kopplad till + 5V
* GND anslutning av PING))) kopplade till marken
* SIG anslutning av PING))) bifogas digital stift 7
http://www.Arduino.cc/en/tutorial/ping
skapad 3 Nov 2008
av David A. Mellis
modifierade 30 Aug 2011
av Tom Igoe
Denna exempelkod är offentlig.
*/
mod för HC-SR04 ultrasonic sensor
Denna konstant ändras inte. Det är den pin-kod
av sensorns utgång:
CONST int echoPin = 9; ECHO pin
CONST int pingPin = 10; TRIG pin
variabel att hålla sensorn värde
int sensorValue;
variabel för att kalibrera låga värde
int sensorLow = 12;
variabel för att kalibrera högt värde
int sensorHigh = 1;
int pdsPin = 11; Välj input PIN-koden för fotocellen
int pdsValue = 0; variabel för att lagra värdet kommer från fotocellen
void setup() {
initiera seriell kommunikation:
Serial.BEGIN(9600);
pinMode(7,OUTPUT);
pinMode(3,OUTPUT);
pinMode(2,OUTPUT);
}
void loop()
{
pdsValue = analogRead(pdsPin); Hämta spänning värdet från ingångsstift
Serial.println(pdsValue); skriva ut värdet till Serial monitor
fastställa variabler för varaktigheten av ping,
och avstånd resultatet i tum och centimeter:
lång varaktighet, tum, cm;
PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (echoPin, ingång);
längd = pulseIn (echoPin, hög);
konvertera tiden till ett avstånd
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.Print(inches);
Serial.Print ("in");
Serial.Print(cm);
Serial.Print("cm");
Serial.println();
läsa indata från A0 och förvara den i en variabel
sensorValue = inches;
mappa värdena som sensorn till ett brett utbud av tomter
int pitch = karta (sensorValue, sensorLow, sensorHigh, 2000, 3500);
int pitch2 = karta (pdsValue, 200, 1023, 2400, 3500);
spela tonen för 20 ms på stift 8
ton (6, pitch, 90);
Delay(30);
digitalWrite(7,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
vänta en stund
Delay(90);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
ton (6, pitch2, 90).
Delay(90);
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
Ljudets hastighet är 340 m/s eller 29 mikrosekunder per centimeter.
Ping reser ut och tillbaka, så för att hitta distansera av den
objekt vi tar hälften av den tillryggalagda.
återvända mikrosekunder / 29 / 2;
}