• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - Visible Light Communication
#1
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:

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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości