Lekcja 2
Regulacja za pomocą potencjometru
Myślę że z pierwszej lekcji wyciągnołeś co trzeba. Dowiedziałeś się o budowie kodu i montażu kabli do płytki mikrokontolera.Nie przedłużają zacznijmy od kilku przykładów z urzyciem potencjometru .Jest to urządzenie regulujące napięcie, czyli w prostym języku ile mamy dać napięcia dla diody lub innego urządzenia.
Stworzymy prosty woltomierz .Wytłumaczę trochę o poleceniach które wykorzystamy do tego programu.Funkcja analogRead (kanał ADC ); . Kanał ADC możesz zauważyć po przez oznaczenie na płytce ANALOG IN .Tutaj podłączym nasz potencjometr z wejściami do płytki.Podczas kręcenie potencjometrem otzrymujemy wartości od 0 do 1023 i w tym zakresie będziemy mogli tworzyć nasze funkcje. Napięcie wejścia w płytce waha się miedzy 0-5 V , a najwyższa wartość to 1023. Teraz zrobimy szybkie obliczenia.
1024 => 5V 1 => x 1024x = 1*5 x = (1*5V)/1024 = ~0,0049V
W skrócie , jeśli zwiększym napięcie wejściowe o ~0,0049V to zwiększy wskazania ADC o jeden.Mamy obliczenia teraz przyda nam się schemat.
Przygotuj: potencjometr, kabelki pinowe i płytkę .
Wpisz kod
int Wartosc = 0;
float napiecie = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
Wartosc = analogRead(A5);
napiecie = Wartosc * (5.0/1024.0);
Serial.println(napiecie);
delay(200);
}
Pewnie dziwi cie kilka nowych rzeczy. Już lecę z pomocą.int tak samo jak w języku C++ jest to przypisana wartość dla danej linijiki w tym przypadku Wartosc ma przpisaną wartość 0 , którą można zmieniać jak widać w dalszych obliczeniach. float przechowuje liczby zmienno przecinkowe , dlatego niemożna napiecia wpisać w int, gdzie napięcie będzie się zmieniać. Jest tu wykorzystana zwykła pętla i dodane jest obliczenie.napiecie = wartosc * (5.0/1023.0) i tutaj wraz z przekręcaniem potencjometru zwiększa lub zmniejsza się wartosc .
Pewnie się zastanawisza jak masz zobaczyć zmiany. Nie masz diody ani wyświetlacza. Wykorzystamy tym razem narzędzie w aplikacji Arduino IDE. Jest to narzędzie Monitor portu szeregowego i możemy je wywołać za pomocą skrótu klawiszowego CTRL+SHIFT+M .Te narzędzie pełni funkcje monitorowania zmian na płytce Arduino. Przyda się wielokrotnie więc zapamiętaj o tym narzędziu.
Efekt powinien być następujący :
To jest rzecz prosta tak samo jak przyciemniana lampka nocna. A może taką zrobimy ? Wystarczy że podłączym diode LED i dodamy linijkę kodu.
Przygotuj: potencjometr, kabelki pinowe , rezystor, diodę LED oraz płytkę .
Wpisz kod
int Wartosc = 0;
void setup() {
pinMode(1, OUTPUT);
}
void loop() {
Wartosc = analogRead(A5);
digitalWrite(1, HIGH);
delay(Wartosc);
digitalWrite(1, LOW);
delay(Wartosc);
}
Czujnik odległości
Potencjometr przyda nam się jeszcze przy pracy nad wyświetlaczem, ale na razie przejdźmy do zdecydowanie ciekawsztch rzeczy, czyli do Czujnika odległości . Czujnik HC-SR04 składa się z dwóch ważych elementów: nadajnika i odbiornika ultradźwięków oraz kliku układów. Działa to na zasadzie że sonar wysyła dźwięk i wraca po odbiciu od przeszkody. Sonar w tym czaje może obliczyć w jakiej odległości znajduje się przeszkoda. Nie jest to aż tak skąplikowane urządzenie, ale będzie to pierwsze które wykorzystamy w naszym kursie.
Czujnik składa się z czterech pinów , między innymi z pinów zasilających Vcc i GND oraz z dwóch pinów pomiarowych trigger i echo .Skupmy się na dwóch pomiarowych: trigger odpowiedzialny jest za wejście , czyli robi pomiar odległości , echo służy do odczyty zmierzonej odległości. Wydaje się żę są one podobne , ale każdy spełnia inną funkcję w programie. A najlepiej sprawdźmy to na przykładzie. Oto schemat:
Wpisz kod
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long czas;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
Serial.print(czas);
delay(500);
}
W skrócie wytłumaczę o o chodzi z kilkoa rzeczami.
#define trigPin 12
#define echoPin 11
Musimy zdefiniować wejście triggera i echo. W tym przypadku wejście jest 12 i 11 .Przyda nam się aby nie pomieszać wejść pinów.Jeszcze możesz zwrócić uwagę na nowy zwrot delayMicroseconds jest to ten sam odpowiednik co nam znany wcześniej delay() .Jest też wpisywanie odległości co kilka sekund więc przyda nam się monitor. Sprawdźmy jak działa nasz czyjnik odległości.
Słabo to wygląda.Można byłoby zrobić aby wyświetlało samą odległość np. w centymetrach lub milimetrach. Zróbmy tak. Dodajmy funkcję do naszego programu.
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
Serial.print(odleglosc());
Serial.println(" cm");
delay(500);
}
int odleglosc() {
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;
return dystans;
}
Efekt powinien być następujący.
ZADANIE
A teraz przekształć tak program aby podawał odległość w milimetrach. Jeśli ci się uda zrób tak aby pokazywało ci centymetry i milimetry np. 8 cm 7mm .Odpowiedź wyśli na fanpage na Facebooku.
Myślę że idzie nam całkiem sprawnie dlatego przejdźmy dalej, ale nie aż tak daleko. Rozwiniemy nasz czyjnik odległości dodając ALARM .Może to być zwykły buzzer kupiony w zestawie lub zwykły mały głośniczek. Może być stary z laptopa , czy innego urządzenia. Zasada będzie taka sama.Mój buzzer jest już za słaby dlatego wykorzystam stary głośniczek. Nie wyrzucaj starych urządzeń. Mogą ci się kiedyś przydać, chyba że oddajesz na szczytny cel lub po prostu ci przeszkadzają .Zaraz się przekonasz że warto.
Wpisz kod
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(2, OUTPUT);
}
void loop() {
zakres(10, 25);
delay(100);
}
int Odleglosc() {
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;
return dystans;
}
void zakres(int a, int b) {
int alarm = Odleglosc();
if ((alarm > a) && (alarm < b)) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}
}
Wystarczy że dodamy funkcję która będzie odpowiadać za alarm. W funckji void zakres(int a, int b) dodaliśmy zakres od a do b, odległość możesz zmieniać pętli void loop() i tam gdzie jest zakres(10 ,25 ) to liczby możemy zmieniać zakres alarmu. Zobacz jak mi to wyszło.
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long czas;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
Serial.print(czas);
delay(500);
}
#define trigPin 12
#define echoPin 11
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
Serial.print(odleglosc());
Serial.println(" cm");
delay(500);
}
int odleglosc() {
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;
return dystans;
}
ZADANIE A teraz przekształć tak program aby podawał odległość w milimetrach. Jeśli ci się uda zrób tak aby pokazywało ci centymetry i milimetry np. 8 cm 7mm .Odpowiedź wyśli na fanpage na Facebooku.
#define trigPin 12
#define echoPin 11
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(2, OUTPUT);
}
void loop() {
zakres(10, 25);
delay(100);
}
int Odleglosc() {
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;
return dystans;
}
void zakres(int a, int b) {
int alarm = Odleglosc();
if ((alarm > a) && (alarm < b)) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}
}