W tym artykule dowiecie się czegoś na temat sterowania diodą za pomocą zmiany częstotliwości.
Sterowanie
W naszym programie sterowanie częstotliwością zostało podzielone, ponieważ możemy ją zadawać z portu szeregowego jak również regulować za pomocą potencjometru. Zmiana miedzy tymi dwoma trybami następuję za pomocą przycisku.
Funkcja sinus w kodzie.
W kodzie, który widzimy poniżej użyliśmy funkcji sinus.
for (i = 0; i <= 2 * 31.4; i++) //Wygenerowanie kolejnych wartości dla funkcji sinus
Za jej pomocą możemy zmieniać wartości naszej częstotliwości w określony sposób, gdyż podczas sterowania wprowadzamy do niej zmienne, które wpływają na szerokość wypełnienia impulsu.
To znaczy, że zmieniamy jej okres, co powoduje szybsze lub wolniejsze miganie diody.
Jak Arduino czyta funkcję?
Jest to ciekawe zagadnienie, ponieważ jak każdy wie Arduino posiada wejścia analogowe i cyfrowe , dzięki którym potrafi zbierać informacje z czujników lub wysyłać sygnały.
Jak widać na schemacie nie korzystamy z wejścia analogowego, aby podawać funkcję sinus na naszej diodzie. Impulsy są podawane za pomocą pinu cyfrowego PWM. Piny te pozwalają na zadawanie impulsów w systemie 0,1. To znaczy, że po wysterowaniu określonego okresu na pinie on generuje sygnał 1, a po np 0,5 s stan 0 i tak co chwilę. Pozwala to na wygenerowanie odpowiedniego pasma częstotliwości, które możemy zaobserwować w postaci migania diody.
Aby zbudować powyższy układ potrzebujecie:
- Płytkę stykową
- Kilka przewodów
- Potencjometr
- rezystor 220 Ω
- LED
- Arduino Uno
- Przycisk (jak na schemacie)
Poniżej zamieszczamy KOD:
float a = 1;
bool m;
void setup() {
pinMode(11, OUTPUT);
pinMode(8, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
float x;
int b, i, w, t;
for (i = 0; i <= 2 * 31.4; i++) //Wygenerowanie kolejnych wartości dla funkcji sinus
{
if (!digitalRead(8)) // Przełączanie przyciskiem sposobu zadawania częstotliwości
{
m=!m;
delay(20);
while (!digitalRead(8));
}
if (m) //Zmiana częstotliwości przy pomocy potencjometru
{
b = analogRead(A0);
t = map(b, 0, 1023, 1000 / 63, 200 / 63);
} else
{
if (Serial.available()) //Zmiana częstotliwości przy pomocy monitora portu szeregowego
{
a = Serial.parseFloat();
Serial.println(a);
Serial.read();
}
t = map(a, 1, 5, 1000 / 63, 200 / 63);
}
x = 127.5 * sin(i / 10.0) + 127.5; //wywołanie funkcji sinus i zamiana jej wartości na wypełnienie szerokości impulsu
analogWrite(11, x);
delay(t);
}
}
Zachęcamy do komentowania i udostępniania swoich pomysłów odnośnie tego kodu. Może wpadniecie na jakieś ciekawe zastosowania, którymi warto się pochwalić.