Sygnał analogowy cz4

Poznaliśmy już sygnał cyfrowy, który przyjmował tylko dwie wartości: HIGH i LOW. Natomiast sygnał analogowy może przyjmować dowolną liczbę wartości. Arduino ma wbudowany przetwornik analogowo-cyfrowy (ADC), który mierzy wartość sygnałów analogowych. ADC przekształca napięcie analogowe na wartość cyfrową.

Składnia:

analogRead(pin)

Parametry:
  • pin: numer pin Arduino

Wartość zwrócona z analogRead() będzie wynosić od 0 do 1023 gdy posiadamy 10 bitowy przetwornik, przy czym zero reprezentuje 0 woltów, a 1023 reprezentuje napięcie robocze używanej płyty Arduino.

Zadanie:

Program opóźniający włączanie/wyłączanie diody Led na podstawie miary strumienia światła w pomieszczeniu.

Do zbudowania będziemy potrzebowali:
  • Diodę Led
  • Rezystor 56Ω
  • Fotorezystor
  • Rezystor 10kΩ
  • Arduino (użyłem MKR1010 wifi)

Aby stworzyć obwód oparty na fotorezystorze musimy zbudować dzielnik napięcia. Wejścia te nie pobierają prawie żadnego prądu, dlatego zgodnie z prawem Ohma napięcie mierzone na drugim końcu rezystora podłączonego do 5V wynosi zawsze 5V, niezależnie od wartości rezystora. Aby uzyskać napięcie proporcjonalne do wartości fotorezystora, niezbędny jest dzielnik napięcia. Obwód ten wykorzystuje rezystor zmienny, rezystor stały, a punkt pomiarowy znajduje się pośrodku rezystorów. Mierzone napięcie (Vout) jest zgodne z następującym wzorem:

Vout=Vin*(R2/(R1+R2))

gdzie Vin to 5 V, R2 to 10 kΩ, a R1 to wartość fotorezystora, która waha się od 1 MΩ w ciemności do 10 kΩ w świetle dziennym (10 lumenów). Wartość poniżej 1 kΩ to odczyt w jasnym świetle lub świetle słonecznym (>100 lumenów).
 

Schemat podłączeniowy z interaktywną treścią:

Analogowy sygnał

Kod programu:
#define SensorPin A1   // Pin wejściowy dla fotorezystora;
#define LedPin 1       // Pin dla diody LED
int sensorValue = 0;   // Zmienna do przechowywania wartości pochodzącej z czujnika

void setup() {
  pinMode(LedPin, OUTPUT); // Deklaracja ledPin jako WYJŚCIE
  Serial.begin(9600);	   // Deklaracja prędkość transmisji monitora portu szeregowego
}

void loop() {
  sensorValue = analogRead(SensorPin);   // Odczytaj wartość z fotorezystora:
  Serial.println(SensorPin);  		 // Wyświetl wartości w monitorze portu szeregowego
  digitalWrite(LedPin, HIGH); 	 	 // Włącz ledPin
  delay(sensorValue);  	 	         // Zatrzymaj program na <sensorValue> milisekund
  digitalWrite(LedPin, LOW); 		 // Wyłącz ledPin
  delay(sensorValue);		         // Zatrzymaj program na <sensorValue> milisekund
}

Częstotliwość zapalania diody Led wzrasta po zbliżeniu strumienia światła. Wartość odczytać możemy z portu szeregowego.

Monitor portu szeregowego