Arduino, sensorer och MIDI- (7 / 16 steg)
Steg 7: Arduino och ljus känsliga resistorer
En ljus känsliga resistor (LSR) är en typ av varierande resistor som reagerar på ljus. LSRs fick jag för den här klassen har ett utbud av 16-33kOhms av motstånd, så de har ett motstånd av 33kOhms i totalt mörker och ljus de har ett motstånd av 16kOhms. Banan som mäter LSR kräver en annan regelbunden resistor, motståndet fungerar som ett riktmärke att avgöra hur LSR förändras. När du mäter variabla motstånd av en komponent (flex sensor, tryckgivare och många andra) som du vill koppla ihop den med en vanlig resistor som har ett motstånd som är ungefär lika med variabelt motstånd komponenten max motstånd. Eftersom jag använder en 16-33kOhm LSR, använder jag ett 33kOhm motstånd i min krets.
Banan ser ut så här:
5V -> 33kOhm motstånd -> light känslig resistor -> marken (se bilden ovan)
och Arduino analoga PIN-koden (jag använder A0) ansluter till korsningen mellan LSR och motståndet. LSR har ingen polaritet, så orientering av komponent i kretsen ingen spelar roll.
Kör följande kod för att få en känsla av spänna av LSR:
int analogPin = A0; //junction mellan LSR och resistor bifogas pin A0
void setup() {
Serial.BEGIN(9600);
}
void loop() {
int lsr = analogRead(analogPin);
Serial.println(LSR);
}
Jag fann att min resistor avläsningar varierade från om 0 i fullt dagsljus till ca 900 i mörker. Nu karta att observera, märka där jag kastade i 0-900 utbud
byte noteON = 144; //note på kommando
int analogPin = A0;
void setup() {
Serial.BEGIN(9600);
}
void loop() {
int analogVal = analogRead (analogPin), //read data
Vi har att skala lsr data att passa mellan 0 och 127 (detta är de rad av MIDI-noterna)
byte Obs = karta (analogVal, 900-0, 0, 127); //use 0-900 spänner jag mätt
MIDImessage (noteON, Obs, 100); //turn anteckning på
fördröjning (300); //hold anmärkning för 300 MS
MIDImessage (noteON, Obs, 0); //turn Obs off (Observera på med hastighet 0)
fördröjning (200); //wait 200ms tills utlöser nästa anteckning
}
skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}
Den här inställningen skapar anteckningar med högre tonhöjd i mörker och låg tonhöjd i ljus. Om jag ville vända fartyget relationen mellan ljus och pitch vill jag bara vända min sortiment i funktionen karta:
byte Obs = karta (analogVal, 900, 0, 0, 127);
Märke hur jag har ändrat min intervall från 0-900 900-0, detta gör att mer ljus skapar högre pitched sedlar och svagt ljus skapa låg pitched sedlar.
Denna skiss är som spänner över en massa anteckningar just nu, om jag ville begränsa anteckningar kan jag spela med kretsen, kan jag använda följande rad:
byte Obs = karta (analogVal, 900, 0, 40, 90);
Nu returnerar hela sortimentet av motstånd ljuskänslighet en mängd anteckningar mellan 40 och 90.