Arduino czujnik ultradźwiękowy z 2 diodami LED , schemat +kod z wyjaśnieniem

in #polish7 years ago

W tym poście chciałbym przedstawić schemat i omówić kod w języku C . Jest to dosyć proste więc myślę ,że każdy zrozumie .
Na początek rzućmy okiem na cały układ :
29341078_2063775267199998_1820439629_n.jpg
Zielona dioda(odległość większa lub równa 20 cm):
29020129_2063766083867583_927597259_n.jpg
Czerwona dioda(odległość mniejsza od 20 cm)
29547735_2063766070534251_694301179_n.jpg
a oto schemat :
29134938_2063766153867576_1612685700_n.jpg
Ja użyłem pinów 12,11 do czujnika odległości i 2,4 do diod ale oczywiście można to dostosować pod siebie , należy jednak pamiętać aby w kodzie zdefiniować te porty.
Kod z wyjaśnieniem:
#define trigPin 12
#define echoPin 11
#define LED_zielona 2
#define LED_czerwona 4
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //Pin, wyjście
pinMode(echoPin, INPUT); //Pin, wejście
}

void loop() {
{Serial.print (zmierzOdleglosc()); // wyświetlane odległości w konsoli programu
Serial.println(" cm od przeszkody");
delay(100);}//odczekaj 100ms

if( zmierzOdleglosc() >= 20)//jeśli odległość jest większa bądź równa 20 wtedy zapala się zielona dioda
{
digitalWrite(LED_zielona,HIGH);//załącza się stan wysoki czyli nie płynie prąd
digitalWrite(LED_czerwona,LOW);//załącza się stan niski czyli nie płynie prąd
delay(500);//odczekaj 500ms
}

if( zmierzOdleglosc() < 20)// jeśli odległość jest mniejsza niż 20 wtedy zapala się czerwona dioda
{
digitalWrite(LED_czerwona,HIGH);//załącza się stan wysoki czyli  płynie prąd
digitalWrite(LED_zielona,LOW);}//załącza się stan niski czyli nie płynie prąd
}

int zmierzOdleglosc(){
long czas, dystans;
pinMode(LED_zielona,OUTPUT);//definiujemy pin jako wyjście
pinMode(LED_czerwona,OUTPUT);//definiujemy pin jako wyjście
digitalWrite(trigPin, LOW);// załącza się stan niski czyli nie płynie prąd
delayMicroseconds(2);//odczekaj 2 us
digitalWrite(trigPin, HIGH);//załącza się stan wysoki czyli płynie prąd
delayMicroseconds(10);//odczekaj 10 us
digitalWrite(trigPin, LOW);//załącza się stan niski czyli nie płynie prąd

czas = pulseIn(echoPin, HIGH);//funkcja mierząca czas w którym dźwięk z nadajnika trafił do odbiornika
dystans = czas * 0.017;//mnożymy tutaj czas[uS] przez prędkość dźwięku [m/uS]

return dystans;}

Dziękuję za uwagę i zapraszam do dyskusji .

Sort:  

Napisz więcej o jakości czujnika. Jaką ma powtarzalność pomiaru, jaką precyzję, minimalną i maksymalną odległość. Ile kosztuje? To pozwoli porównać go z odpowiednikiem w Lego Mindstorms EV3 :)
Jestem ciekaw jak się sprawdza w praktyce, może wykresy rzeczywistej i zmierzonej odległości - temat na następny artykuł.
Acha dodaj etykietę pl-elektronika i pl-artykuly, gdy przekroczysz 200 słów.
Dodaję Cię do obserwowanych.

specyfikacje dodałem w poprzednim poście . Z moich testów wynika że ma dosyć dużą dokładność
ale jutro jeszcze coś wrzucę na ten temat, dzięki za kom

Popracuj nad formatowaniem. Schematy rysuj najlepiej w programie np Eagle