Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałElżbieta Sobczyk Został zmieniony 6 lat temu
1
Sensory Ultradźwiękowy czujnik odległości (Silabs UNI_DC)
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
2
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Zasilanie: V Pobór prądu: < 2mA Efektywny kąt: < 15º Zygmunt Kubiak
3
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Efekt piezoelektryczny Efekt piezoelektryczny występujący podczas ściskania i rozciągania płytki o cięciu X a) Płytka rozciągana wzdłuż osi X b) Płytka rozciągana wzdłuż osi Y Zygmunt Kubiak
4
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Przykłady zastosowań Zygmunt Kubiak
5
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Parkiet generujący energię elektryczną pod wpływem ruchu tańczących, zużywaną następnie do napędzania klimatyzacji ma londyński nocny klub Surya. Nazwa klubu mieszczącego się w Londynie na Pentoville Road pochodzi od imienia hinduskiego boga słońca. Zygmunt Kubiak
6
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Silniki piezoelektryczne Zygmunt Kubiak
7
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Materiały piezoelektryczne Kwarc α - ditlenek krzemu, kryształ górski Sól Seignette'a - winian sodowo-potasowy, sól La Rochelle Turmaliny - borokrzemiany kilku metali Diwodorofosforany amonu i potasu - KH2PO4 i NH4H2PO4, oznaczane są zwykle skrótami KDP i ADP Tytanian baru i jego związki izomorficzne Winian dwuaminoetylenowy, winian dwupotasowy - w skrócie są nazywane EDT i KDT Zygmunt Kubiak
8
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Zasada pomiaru Odległość = (Szerokość impulsu ● Prędkość dźwięku) / 2 Zygmunt Kubiak
9
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Zależność prędkości fali dźwiękowej (w m/s) od temperatury i wilgotności względnej powietrza C 20%RH 50%RH 80%RH 331,52 331,62 331,70 5 334,57 334,70 334,84 10 337,60 337,79 337,98 15 340,61 340,88 341,15 20 343,62 343,99 344,37 25 346,62 347,13 347,65 30 349,67 350,32 351,01 Zygmunt Kubiak
10
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Charakterystyka sensora: D[cm] = T[µs] / 58 Producent podaje zakres: 2cm cm (3 cm – 300 cm) Rozdzielczość: 0,3 cm Częstotliwość: 40 kHz (fala 8 x 25 µs = 200 µs) Zygmunt Kubiak
11
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
W temperaturze 21ºC prędkość dźwięku wynosi ok. 345m/s Oznacza to 0,0345 cm/µs Czyli przebycie odległości 1cm wymaga 28,9855 µs W zaokrągleniu przyjmujemy 29, a ponieważ dźwięk przebywa podwójną odległość i w związku z tym zmierzony czas odpowiedzi należy podzielić przez 58 Zygmunt Kubiak
12
Sensory Ultradźwiękowy czujnik odległości HC-SR04
Charakterystyka sensora D[cm] = T[µs] / 58 Producent podaje zakres 2cm cm Zygmunt Kubiak
13
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Charakterystyka sensora dookólna Zygmunt Kubiak
14
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Transmisja asynchroniczna Brak Zygmunt Kubiak
15
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Przykładowe biblioteki dla Arduino hc-sr04/ Example/ Zygmunt Kubiak
16
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Przykładowe realizacja // Pomiar odległości w cm z czujnikiem HC-SR04 //Konfiguracja sprzętowa int trigPin = 9; int echoPin = 10; int gndPin = 11; int vccPin = 8; Zygmunt Kubiak
17
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Przykładowe realizacja //Konfiguracja mikrokontrolera void setup() { Serial.begin(57600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); // Zasilanie masa pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); // Zasilanie +Vcc Serial.println(„ Pomiar odleglosci (w cm) z HC-SR04”); } Zygmunt Kubiak
18
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Przykładowe realizacja //Pętla główna void loop() { Serial.print(sonarPomiar_cm()); Serial.println(„ cm”); delay(1000); //Pomiar odległości w cm } Zygmunt Kubiak
19
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Przykładowe realizacja // Funkcja realizującą pomiar w cm int sonarPomiar_cm() { digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(12); // Impuls >10 µs int czas = pulseIn(echoPin, HIGH); int odleglosc = czas / 58; // obliczanie odległości if ((odleglosc > 500)|| (odleglosc < 0)) return 999; // przekroczony zakres pomiaru else return odleglosc; // poprawny pomiar w cm } Zygmunt Kubiak
20
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Zygmunt Kubiak
21
Sensory Ultradźwiękowy czujnik odległości – HC-SR04
Zygmunt Kubiak
22
Sensory Ultradźwiękowy czujnik odległości – SRF10
Sensor z magistralą I2C Zygmunt Kubiak
23
Sensory Ultradźwiękowy czujnik odległości – SRF10
Protokół I2C wzorowany na układach EEPROM serii 24xx Domyślny adres SFR10: 0xE0 Może być on zmieniony przez użytkownika na jeden z adresów: E0, E2, E4, E6, E8, EA, EC, EE, F0, F2, F4, F6, F8, FA, FC lub FE Rejestry SRF10 Zakres pomiaru określany jest w µs, tzn. wartość max równa (0xFFFF) odpowiada odległości 1129 cm lub 442 cale Rejestr #2 umożliwia zmianę wzmocnienia analogowego Zygmunt Kubiak
24
Sensory Ultradźwiękowy czujnik odległości – SRF10
Polecenia Polecenia #80 do #82 ustalają format wyniku Polecenia #160, #165, #170 przeznaczone są do zmiany adresu I2C Zygmunt Kubiak
25
Sensory Ultradźwiękowy czujnik odległości – SRF10
Wzmocnienie analogowe Zygmunt Kubiak
26
Sensory Ultradźwiękowy czujnik odległości – SRF10
Wzmocnienie analogowe Zygmunt Kubiak
27
Sensory Ultradźwiękowy czujnik odległości – SRF10
Zmiana adresów I2C Zygmunt Kubiak
28
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 // I2C SRF10 or SRF08 Devantech Ultrasonic Ranger Finder // by Nicholas Zambetti < // and James Tichenor < // Demonstrates use of the Wire library reading data from the // Devantech Utrasonic Rangers SFR08 and SFR10 // Created 29 April 2006 // This example code is in the public domain. #include <Wire.h> Zygmunt Kubiak
29
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial communication at 9600bps } int reading = 0; void loop() // step 1: instruct sensor to read echoes Wire.beginTransmission(112); // transmit to device #112 (0x70) // the address specified in the datasheet is 224 (0xE0) // but i2c adressing uses the high 7 bits so it's 112 Wire.write(byte(0x00)); // sets register pointer to the command register (0x00) Wire.write(byte(0x50)); // command sensor to measure in "inches" (0x50) // use 0x51 for centimeters // use 0x52 for ping microseconds Wire.endTransmission(); // stop transmitting Zygmunt Kubiak
30
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 // step 2: wait for readings to happen delay(70); // datasheet suggests at least 65 milliseconds // step 3: instruct sensor to return a particular echo reading Wire.beginTransmission(112); // transmit to device #112 Wire.write(byte(0x02)); // sets register pointer to echo #1 register (0x02) Wire.endTransmission(); // stop transmitting // step 4: request reading from sensor Wire.requestFrom(112, 2); // request 2 bytes from slave device #112 Zygmunt Kubiak
31
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 // step 5: receive reading from sensor if (2 <= Wire.available()) // if two bytes were received { reading = Wire.read(); // receive high byte (overwrites previous reading) reading = reading << 8; // shift high byte to be high 8 bits reading |= Wire.read(); // receive low byte as lower 8 bits Serial.println(reading); // print the reading } delay(250); // wait a bit since people have to read the output :) Zygmunt Kubiak
32
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 Fragment zakomentowany /* // The following code changes the address of a Devantech Ultrasonic Range Finder (SRF10 or SRF08) // usage: changeAddress(0x70, 0xE6); void changeAddress(byte oldAddress, byte newAddress) { Wire.beginTransmission(oldAddress); Wire.write(byte(0x00)); Wire.write(byte(0xA0)); Wire.endTransmission(); Zygmunt Kubiak
33
Sensory Ultradźwiękowy czujnik odległości – SRF10
Czytnik zakresu SFR10 Fragment zakomentowany Wire.beginTransmission(oldAddress); Wire.write(byte(0x00)); Wire.write(byte(0xAA)); Wire.endTransmission(); Wire.write(byte(0xA5)); Wire.write(newAddress); } */ Zygmunt Kubiak
34
Sensory Ultradźwiękowy czujnik odległości – SRF10
Symulator czujnika SFR10 byte address = 112; // adres czujnika unsigned int manipVar = 0; // zmienna do zmiany danych byte bytessent = 2 ; // liczba bajtów do wysłania byte bytestosend[2] ; // przygotowanie danych do wysłania byte command = 0 ; // przechowywanie poleceń void setup() { TWAR = (address << 1) | 0b ; // ustawienie adresu i ogólnej odpowiedzi na wywołania TWCR = 0b ; // ustawienie TWEA, TWEN i TWIE na 1 SREG |= 0b ; // globalne włączenie przerwań pinMode(13 , OUTPUT); } // koniec void setup() Zygmunt Kubiak
35
Sensory Ultradźwiękowy czujnik odległości – SRF10
Symulator czujnika SFR10 void loop() { if (command == 0x50) // włączenie diody dla polecenia 0x digitalWrite (13 , HIGH); if (command == 0x02) // wyłączenie diody dla polecenia 0x digitalWrite (13 , LOW); manipVar++; // główna zmienna do manipulowania dwoma bajtami wyjściowymi bytestosend [0] = manipVar; // przygotowanie starszego i młodszego bajtu zmiennej manipVar bytestosend [1] = manipVar >> 8 ; // starszy bajt manipVar delay (250); // coś innego do zrobienia podczas oczekiwania } // koniec void loop() Zygmunt Kubiak
36
Sensory Ultradźwiękowy czujnik odległości – SRF10
Symulator czujnika SFR10 ISR (TWI_vect) { // procedura obsługi przerwania przypisana do wektora if (TWCR & (1 << TWINT)) { // powtórne sprawdzenie, czy przerwanie jest właściwe if ((TWSR & 0b ) == 0x80) { // dane przychodzące command = TWDR; // skopiowanie danych polecenia do wykorzystania później TWCR = 0b ; // reset oryginalnej konfiguracji } Zygmunt Kubiak
37
Sensory Ultradźwiękowy czujnik odległości – SRF10
Symulator czujnika SFR10 if ((TWSR & 0b ) == 0xA8 ) // żądanie danych wychodzących { while (bytessent > 0 ) // wysłanie bajtów do mastera bytessent--; TWDR = bytestosend [bytessent]; // wysłanie danych od najstarszego do najmłodszego bajta TWCR = 0b ; // reset po każdym wysłaniu delay (5); // chwilowa pauza po wysłaniu } if (bytessent == 0 ) // reset liczby bajtów i jeżeli bufor jest pusty bytessent = 2; } // koniec if ((TWSR & 0b ) == 0xA8 ) Zygmunt Kubiak
38
Sensory Ultradźwiękowy czujnik odległości – SRF10
Symulator czujnika SFR10 TWCR = 0b ; // jeszcze jeden reset na wszelki wypadek SREG |= 0b ; // włączenie z powrotem przerwań } // koniec if (TWCR & (1 << TWINT)) } // koniec ISR (TWI_vect) Zygmunt Kubiak
39
Dziękuję Zygmunt Kubiak
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.