Dubbelriktad LED Sensing Try-out
Resultatet skulle kunna användas i något slags halv duplex morsekod applicering eller ens som ett relä eller isolator. Som testat, gör LED eventuella spänning när den känner av ljus med samma eller lägre våglängd än det var avsett för. Men olika märken eller strukturer av lysdioder skiljer sig dess kapacitet. I enligt källkoden för Arduino referens.
/ * Visar med LED som en sensor och sändare.
När LED A1 eller A2 sinnen input, avger andra
ljus efter blinkande sekvensen identifieras * /
#include "pitches.h"
CONST int led1 = A0;
CONST int led2 = A1;
CONST int breakTime = 3000; i ms
CONST int högtalare = 8.
int värde1, värde2;
int threshold1 = 250;
int threshold2 = 250;
int numNotes = 4;
booleska timeout = false;
lång tid = 0;
int melodi [] = {
NOTE_A4, NOTE_E4, NOTE_G4, NOTE_A4};
int noteDurations [] = {
4, 4, 4, 4};
void setup() {
Serial.BEGIN(9600);
pinMode(led1,INPUT);
pinMode(led2,INPUT);
pinMode(speaker,OUTPUT);
}
void loop() {
värde1 = analogRead(A0);
value2 = analogRead(A1);
om (värde1 > = threshold1) {
Serial.Print ("värde 1:");
Serial.println(value1);
tid = millis();
Out(LED1,LED2,threshold1);
pinMode(led2,INPUT);
timeout = false;
}
annars om (värde2 > = threshold2) {
Serial.Print ("värde 2:");
Serial.println(value2);
tid = millis();
Out(LED2,LED1,threshold2);
pinMode(led1,INPUT);
timeout = false;
}
}
void ut (int a, int b int tröskel) {
pinMode(b,OUTPUT);
Delay(20);
medan (timeout! = sant) {
int värde = analogRead(a);
om (värde > = tröskelvärde) {
analogWrite(b,value);
tid = millis();
}
annat {
analogWrite(b,0);
}
IF(Millis() - tid > = breakTime) {
timeout = sant;
playTone();
}
}
}
void playTone() {
för (int thisNote = 0; thisNote < numNotes; thisNote ++) {
int noteDuration = 1000/noteDurations [thisNote];
tonen (8, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
noTone(8);
}
}
___________________________________________________________________
Som du kan se videon, den röda lysdioden kan inte svara (Sänd) snabba nog att den mottagna signalen.
Detta tyder på att den röda lysdioden har kapacitiv egenskaper men kan variera beroende på anläggning och ansvarsfrihet tiden av olika LED. När den vita lysdioden sänder, dess mycket tydliga signaler som med varje snabb intervall, det vita ljuset kunde överföra därmed och med minsta fördröjning.
När det gäller känslighet, skulle den röda lysdioden vinna fällt. Vitt ljus består av brett spektrum strålar och våglängden är påvisas med den röda lysdioden om inte det mycket noga. Med den röda lysdioden, kunde avståndet mellan sändare och mottagare för framgångsrik avkänning vara större. Vi måste dock sätta hänsyn att bullret från atmosfären var utan tvekan en stor nackdel som experimentet gjordes under lysrör. Detta problem löstes delvis av kalibrera mottagna värden innan du skriver tröskelvärdena i båda sensorerna. Dess mycket enkel. Piezo speaker funktioner att visa slutet av överföring och Arduino startar sensing båda ingångarna igen.
Testa koden används visas nedan:
void setup() {
Serial.BEGIN(9600);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
}
void loop() {
int värde1 = analogRead(A0);
int value2 = analogRead(A1);
Serial.Print ("värde 1 =");
Serial.Print(value1);
Serial.Print ("\tValue 2 =");
Serial.println(value2);
Delay(300);
}
Även den pitches.h filen från Arduino sida .
Krets ritningarna gjordes på Fritzing . Det är öppen källkod som Arduino.