Stap 7: Arduino en licht gevoelige weerstanden
Een licht gevoelige weerstanden (LSR) is een type variabele weerstand die aan het licht beantwoordt. De LSRs die ik heb voor deze klasse hebben een scala aan 16-33kOhms van weerstand, zodat in totale duisternis een weerstand van 33kOhms hebben en licht zij een weerstand van 16kOhms hebben. Het circuit dat de LSR maatregelen vereist een andere regelmatige weerstand, de weerstand fungeert als een maatstaf om te bepalen hoe de LSR verandert. Wanneer u bent het meten van variabele weerstand van een component (flex sensor, druksensoren en vele anderen) die u wilt koppelen met een normale weerstand met een weerstand die is ongeveer gelijk aan de max weerstand van uw variabele weerstand component. Sinds ik ben met behulp van een 16-33kOhm-LSR, gebruik ik een weerstand van 33kOhm in mijn circuit.
Het circuit ziet er zo uit:
5V -> 33kOhm weerstand -> licht gevoelige weerstanden -> grond (zie afbeelding hierboven)
en de Arduino analoge pin (im ' using A0) verbindt met de kruising tussen de LSR en de weerstand. Het LSR heeft geen polariteit, dus oriëntatie van de component in het circuit maakt niet uit.
Voer de volgende code om een gevoel van het bereik van de LSR:
int analogPin = A0;//junction between LSR and resistor attached to pin A0 void setup(){ Serial.begin(9600); } void loop(){ int lsr = analogRead(analogPin); Serial.println(lsr); }
Ik vond dat mijn weerstand lezingen over 0 in het volle licht tot ongeveer 900 in duisternis varieerde. Nu kaart dit merk op te merken waar ik gooide in de 0-900 bereik
byte noteON = 144;//note on command int analogPin = A0; void setup() { Serial.begin(9600); } void loop() { int analogVal = analogRead(analogPin);//read data //we have to scale the lsr data to fit between 0 and 127 (this is the range of MIDI notes) byte note = map(analogVal, 0, 900, 0, 127);//use the 0-900 range I measured MIDImessage(noteON, note, 100);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); }
Deze setup maakt notities met hogere worp in duisternis en lage toonhoogte in licht. Als ik wilde omkeren van het schip van de relatie tussen licht en toonhoogte zou ik gewoon mijn bereik in de kaart functie omkeren:
byte Opmerking = kaart (analogVal, 900, 127, 0, 0);
Merk op hoe ik heb mijn bereik van 0-900 omgekeerd aan 900-0, dit maakt het meer licht hogere gooide notities maken en weinig licht laag gooide notities maken.
Deze sketch is verspreid over een heleboel notities nu, als ik wilde om een beperking van het toepassingsgebied van notities kan ik spelen met het circuit, ik kan de volgende regel gebruiken:
byte Opmerking = kaart (analogVal, 0, 40, 900, 90);
Nu zal het volledige scala van weerstand lichtgevoeligheid resulteren in een reeks van nota's tussen 40 en 90.