Pomiar światła

Urządzenie może mierzyć dowolne wartości jak natężenie światła, dźwięku itp.
W tym akurat przypadku będzie to światło.
Do projektu potrzebne będą:

  1. diody LED – u mnie niebieskie
  2. rezystory – u mnie 1k
  3. czujnik światła- fotorezystor (fotocela)
    przy podłączaniu do urządzenia należy pamiętać o „dzielniku” aby prawidłowo mierzyło, a także można dołączyć mały kondensator w celu wytłumienia przechodzenia pomiędzy jednym a drugim progiem
  4. dowolne Arduino – u mnie klon UNO

Urządzenie mierzy w odstępach czasu wartość i odwzorowuje to na diodach.
Można ustawić je jako świecąca linijka lub, jak kto woli, jako punkt o wybranej wartość (np tworząc skalę do odczytu).
Ponadto można także rozbudować program i urządzenie o alarmy dźwiękowe, a także przesyłać te wartości na serwer w celu dalszej analizy, a także można je wysyłać via mail lub sms.

 

Być może rozbuduję w przyszłości ten projekt o powyższe 🙂

Fotorezystor podpięty do zasilania 5V, masy-przez rezystor oraz do wejścia analogowego A0

Mała uwaga: na filmie pierwsza dioda od lewej powinna być ostatnią, ale nie chciałem już przepinać przewodów, bo akurat używam modułu ledowego do innego projektu, nad którym pracuję 😉

 

 

Poniżej kod z komentarzami oraz zakomentowane długie bloku kodu, a nad nimi pętle skracające kod.

 

const int Digital_Output_pin = 25;
const int Analog_Output_pin = A0;
int moc_swiecenia;
int i = 0; // inicjacja zmiennej Digital_Output wykorzystania w pętli
int j = 1; // inicjacja zmiennej do wykorzystania w pętli
int led[]={2,3,4,5,6,7,8,9,10,11};
/*
 //poniżej deklaracja zmiennych, a powyżej to samo, tyle, że w tablicy 
int led2 = 2;
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int led8 = 8;
int led9 = 9;
int led10 = 10;
int led11 = 11;
*/
int z = 18;  // skok pomiędzy krokami włączania się ledów
int w = 820; // "teoretyczna" stała, od której czujnik mierzy światło
//Można rozszerzyć odległość pomiędzy pomiarami zwiększając zmienną z i zmniejszając zmienną w

 
void setup() {

    pinMode(Digital_Output_pin, INPUT);

// ustawienie wyjść
for (i=0; i<sizeof(led)/sizeof(int); i++) //sizeof(int) -> rozmiar inta, aby nie było w bajtach -> https://www.arduino.cc/en/reference/sizeof
{
  pinMode(led[i], OUTPUT);
}


/*
 //ustawienie wyjść - wyżej jest pętla
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);

*/
  
  Serial.begin(9600);
}
 
void loop() {

// ustawienie wyłączenia ledów
for (i=0; i<sizeof(led)/sizeof(int); i++)
{
  digitalWrite(led[i], LOW);
}
/*
// ustawienie wyłączenia ledów - wyżej jest pętla
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
*/


for(j=1; j < sizeof(led)/sizeof(int)+1; j++)
{
  if (moc_swiecenia > w+z*j)
  {
    digitalWrite(led[j-1], HIGH);
  }
}



 // wykonywanie pomiaru, a powyżej to samo, tyle, że w pętli
/*
    if (moc_swiecenia > w+z) {
    digitalWrite(led2, HIGH);
  }
    if (moc_swiecenia > w+2*z) {
    digitalWrite(led3, HIGH);
  }
    if (moc_swiecenia > w+3*z) {
    digitalWrite(led4, HIGH);
  }
    if (moc_swiecenia > w+4*z) {
    digitalWrite(led5, HIGH);
  }
    if (moc_swiecenia > w+5*z) {
    digitalWrite(led6, HIGH);
  }
    if (moc_swiecenia > w+6*z) {
    digitalWrite(led7, HIGH);
  }
    if (moc_swiecenia > w+7*z) {
    digitalWrite(led8, HIGH);
  }
    if (moc_swiecenia > w+8*z) {
    digitalWrite(led9, HIGH);
  }  
  if (moc_swiecenia > w+9*z) {
    digitalWrite(led10, HIGH);
  } 
  if (moc_swiecenia > w+10*z) {
    digitalWrite(led11, HIGH);
  } 

*/

moc_swiecenia = analogRead(Analog_Output_pin);
Serial.print(digitalRead(Digital_Output_pin));
Serial.print("-");
Serial.println(analogRead(Analog_Output_pin));

 delay (30);
  
}

Leave a Reply