18-07-2016, 20:05
Witam,
Realizuję projekt, którego celem będzie zagłębienie się w temat transmisji danych światłem widzialny (VLC - visible light communication). Moje wstępne założenia są następujące. Przy pomocy dwóch arduino uno chcę zrobić nadajnik i odbiornik VLC oraz dołożyć do tego modulacje (on/off, pwm lub jeśli to możliwe ppm).
Nadajnik: arduino + biała dioda LED. Moim założeniem jest aby transmisja danych odbywała się poprzez światło widzialne, z zastrzeżeniem że ludzkie oko nie dostrzeże zmian w natężeniu strumienia światła. Planuje początkowo zastosować modulacje on/off z wykorzystaniem kodu manchaster, żeby zmiana z 1 na 0 była króta i nie powodowała dłuższego wyłączenia diody LED przy przesyłaniu na przykład danych 1000001101
(Kod Manchester)
Odbiornik: arduino + detektor światła (Detektor światła) + moduł audio (wtv020 mini sd) + głosnik. Chcę zmienić w detektorze światła fotodiodę na bardziej czułą (Fotodioda Osram). Całość w założeniu ma działać tak, że jeśli nadajnik prześle dane np. 1000001101 to program w arduino zweryfikuje czy dane odczytane przez detektor światła to 1000001101 i jeśli tak to z modułu audio zostanie odtworzona melodia nr. X. Aktualnie utknąłem przy realizacji odbiornika. Ponieważ, program działa w ten sposób: Jeśli na fotodiodę świeci światło to odtwórz melodia X jeśli nie to melodię Y. Natomiast chcę i tu mam problem, aby dane z fotodiody po odczycie co np. 1 sek zostały wpisywane do tablicy, która przechowuje 20 ostatnich pomiarów i jesli w tablicy znajdzie się ciąg np. 1000001101 to odtwórz melodia X. Czy ktoś mógłby mi pomoć?
Aktualny kod obiornika:
*Zdaję sobię sprawę, że żeby oko nie zauważyło migania to to wszystko musi odbywać się znacznie szybciej natomiast narazie próbuję zrobić to "wolniej".
Z góry dziękuję za pomoc, jeśli coś powinienem jaśniej opisać to dajcie znać gdzie.
Pozdr.
Realizuję projekt, którego celem będzie zagłębienie się w temat transmisji danych światłem widzialny (VLC - visible light communication). Moje wstępne założenia są następujące. Przy pomocy dwóch arduino uno chcę zrobić nadajnik i odbiornik VLC oraz dołożyć do tego modulacje (on/off, pwm lub jeśli to możliwe ppm).
Nadajnik: arduino + biała dioda LED. Moim założeniem jest aby transmisja danych odbywała się poprzez światło widzialne, z zastrzeżeniem że ludzkie oko nie dostrzeże zmian w natężeniu strumienia światła. Planuje początkowo zastosować modulacje on/off z wykorzystaniem kodu manchaster, żeby zmiana z 1 na 0 była króta i nie powodowała dłuższego wyłączenia diody LED przy przesyłaniu na przykład danych 1000001101
(Kod Manchester)
Odbiornik: arduino + detektor światła (Detektor światła) + moduł audio (wtv020 mini sd) + głosnik. Chcę zmienić w detektorze światła fotodiodę na bardziej czułą (Fotodioda Osram). Całość w założeniu ma działać tak, że jeśli nadajnik prześle dane np. 1000001101 to program w arduino zweryfikuje czy dane odczytane przez detektor światła to 1000001101 i jeśli tak to z modułu audio zostanie odtworzona melodia nr. X. Aktualnie utknąłem przy realizacji odbiornika. Ponieważ, program działa w ten sposób: Jeśli na fotodiodę świeci światło to odtwórz melodia X jeśli nie to melodię Y. Natomiast chcę i tu mam problem, aby dane z fotodiody po odczycie co np. 1 sek zostały wpisywane do tablicy, która przechowuje 20 ostatnich pomiarów i jesli w tablicy znajdzie się ciąg np. 1000001101 to odtwórz melodia X. Czy ktoś mógłby mi pomoć?
Aktualny kod obiornika:
Kod:
#define inPin0 0
#include <Wtv020sd16p.h>
int resetPin = 2; // The pin number of the reset pin.
int clockPin = 3; // The pin number of the clock pin.
int dataPin = 4; // The pin number of the data pin.
int busyPin = 5; // The pin number of the busy pin.
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
void setup(void) {
Serial.begin(9600);
Serial.println();
wtv020sd16p.reset();
Serial.print("Start programu\n");
}
void loop(void) {
int pinRead0 = analogRead(inPin0);
float pVolt0 = pinRead0 / 1024.0 * 5.0;
Serial.print(pVolt0);
Serial.println();
if(pVolt0 > 3) {
wtv020sd16p.asyncPlayVoice(0);
wtv020sd16p.pauseVoice();
delay(5000);
}
else if(pVolt0 <= 3) {
wtv020sd16p.asyncPlayVoice(5);
wtv020sd16p.pauseVoice();
delay(5000);
}
}
*Zdaję sobię sprawę, że żeby oko nie zauważyło migania to to wszystko musi odbywać się znacznie szybciej natomiast narazie próbuję zrobić to "wolniej".
Z góry dziękuję za pomoc, jeśli coś powinienem jaśniej opisać to dajcie znać gdzie.
Pozdr.