Görüntüleme: 164 Yazar: Grace Yayınlanma Tarihi: 2021-07-26 Menşei: Alan
HC-SR04 ultrasonik sensör, Arduino projeleri için en popüler mesafe ölçüm modüllerinden biridir. Engellerden kaçınma robotlarında, park sensörlerinde, seviye algılamada, akıllı çöp kutularında, mesafe ölçerlerde ve diğer temassız algılama uygulamalarında yaygın olarak kullanılmaktadır.
Modül, bir verici aracılığıyla 40kHz ultrasonik dalgalar yayar. Ses dalgası bir nesneyle karşılaştığında alıcıya geri yansır. Arduino, yankı süresini ölçerek ve ses hızını kullanarak sensör ile nesne arasındaki mesafeyi hesaplayabilir.
| Parametre | Değer |
| Tipik çalışma voltajı | 5VDC |
| Statik çalışma akımı | Bazı modül versiyonlarında 5mA'den az |
| Çalışma frekansı | 40kHz ultrasonik dalga |
| Algılama mesafesi | Ortak aralık: 2cm ila 400cm; bazı kazanç ayarlı versiyonlar daha uzun menzili destekleyebilir. |
| Algılama açısı | Genellikle 15 derece dahilinde; Daha yüksek kazançlı bazı versiyonlar yaklaşık 30 dereceye ulaşabilir. |
| Kesinlik | Uygun test koşulları altında yaklaşık 0,3 cm'ye kadar |
| Kör bölge | Yaklaşık 2cm minimum ölçüm mesafesi |
HC-SR04 ultrasonik modülün dört pimi vardır: VCC, TRIG, ECHO ve GND. Arduino, TRIG pinine kısa bir tetikleme darbesi gönderir ve ardından ECHO pininden gelen dönüş darbesini okur.
| HC-SR04 Pimi | Arduino Bağlantısı | İşlev |
| VCC | 5V | Ultrasonik modül için güç kaynağı. |
| TETİK | Dijital pin 9 | Girişi tetikleyin. Arduino, menzili başlatmak için 10us'luk bir darbe uygular. |
| YANKI | Dijital pin 10 | Yankı çıkışı. Arduino mesafeyi hesaplamak için darbe genişliğini okur. |
| GND | GND | Toprak bağlantısı. |
HC-SR04 uçuş süresi ölçümüyle çalışır. Arduino, TRIG pinine en az 10 mikrosaniyelik yüksek seviyeli bir tetikleme sinyali gönderir. Modül daha sonra otomatik olarak sekiz adet 40kHz ultrasonik darbe gönderir ve yansıyan yankıyı bekler.
Yansıyan ultrasonik sinyal tespit edildiğinde ECHO pini yüksek seviyeli bir darbe verir. Bu darbenin süresi, ultrasonik dalganın gidiş-dönüş seyahat süresidir.
Mesafe = Yüksek seviye yankı süresi × Ses hızı / 2
Arduino kodunda ortak basitleştirilmiş formül şöyledir:
Cm cinsinden mesafe = süre × 0,0343 / 2
Zamanlama süreci basittir: Arduino, TRIG'yi kısa süreliğine düşük tutar, 10us'luk yüksek bir darbe gönderir ve ardından TRIG'yi düşük seviyeye döndürür. HC-SR04 bir ultrasonik patlama gönderir ve yansıyan sinyal geri dönene veya ölçüm zaman aşımına uğrayana kadar ECHO'yu yüksek seviyeye ayarlar.
Kararsız okumalardan kaçınmak için ölçümler arasında kısa bir gecikme bırakın. Genellikle yaklaşık 60 ms'lik bir ölçüm döngüsü kullanılır, böylece önceki ultrasonik yankının bir sonraki tetiklemeden önce kaybolması için zaman olur.
Arduino pulsIn() işlevi, bir dijital pinin ne kadar süreyle YÜKSEK veya DÜŞÜK kaldığını ölçmek için kullanılır. HC-SR04 için Arduino, pulsIn(echoPin, HIGH) kullanır. ECHO pininden yüksek seviyeli darbe genişliğini okumak için
| Sözdizimi | Anlam |
| pulsIn(pin, değer) | YÜKSEK veya DÜŞÜK darbenin süresini okur. |
| pulsIn(pin, değer, zaman aşımı) | Darbeyi mikrosaniye cinsinden zaman aşımı değeriyle okur. |
Bir zaman aşımı kullanılması önerilir. Hiçbir yankı döndürülmezse, işlev beklemeyi durdurabilir ve programı çok uzun süre engellemek yerine 0 değerini döndürebilir.
Kablolama basittir. VCC'yi 5V'ye, GND'yi GND'ye, TRIG'yi Arduino dijital çıkış pinine ve ECHO'yu Arduino dijital giriş pinine bağlayın. Aşağıdaki örnekte Arduino Uno, pin 9'da TRIG ve pin 10'da ECHO kullanılmaktadır.
Aşağıdaki tipik Arduino programı 10us tetik darbesi gönderir, ECHO darbe genişliğini okur, mesafeyi santimetre cinsinden hesaplar ve sonucu Seri Monitöre yazdırır.
const int trigPin = 9; const int echoPin = 10; uzun süre; yüzme mesafesiCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Seri.begin(9600); } void loop() { digitalWrite(trigPin, LOW); gecikmeMicroseconds(2); digitalWrite(trigPin, YÜKSEK); gecikmeMicroseconds(10); digitalWrite(trigPin, DÜŞÜK); süre = darbeIn(echoPin, YÜKSEK, 30000); if (süre == 0) { Serial.println('Aralık dışında'); } else { mesafeCm = süre * 0,0343 / 2; Seri.print('Mesafe: '); Seri.print(mesafeCm); Seri.println(' cm'); } gecikme(60); }
Seri Monitörde mesafe değerlerini görüyorsanız HC-SR04 ultrasonik sensör ve Arduino kablolaması doğru çalışıyor demektir. Daha sonra mesafe verilerini engel tespiti, robot hareket kontrolü, otomatik kapılar, park hatırlatıcıları veya sıvı seviyesi projeleri için kullanabilirsiniz.
Ölçülen nesneyi önerilen mesafe aralığında ve 2 cm'lik kör bölgenin dışında tutun.
Daha iyi ultrasonik yansıma için düz ve sağlam bir hedef yüzey kullanın.
Yumuşak, açılı, gözenekli veya ses emici malzemeleri ölçmekten kaçının.
Sabit bir 5V güç kaynağı kullanın ve kabloları kısa ve güvenli tutun.
Hiçbir yankı dönmediğinde uzun süreli engellemeyi önlemek için darbeIn() işlevine bir zaman aşımı ekleyin.
Gürültüyü azaltmak için birkaç okumayı ortalama veya medyan filtreleyin.
Daha yüksek doğruluk için sıcaklığı telafi edin çünkü ses hızı hava sıcaklığına göre değişir.
| Başvuru | HC-SR04 Nasıl Kullanılır? |
| Engellerden kaçınma robotu | Yakındaki nesneleri algılar ve robotun yön değiştirmesine yardımcı olur. |
| Park mesafe sensörü | Araç ile engel arasındaki mesafeyi ölçer. |
| Sıvı seviyesi tespiti | Sensörden sıvı yüzeyine olan mesafeyi temassız ölçer. |
| Akıllı çöp kutusu | Yakındaki bir eli veya nesneyi algılar ve kapağın otomatik açılmasını tetikler. |
Arduino ile bir HC-SR04 ultrasonik sensör kullanmak için, VCC'yi 5V'ye, GND'yi GND'ye, TRIG'yi dijital çıkış pinine ve ECHO'yu dijital giriş pinine bağlayın. 10us'luk bir tetikleme darbesi gönderin, pulsIn() ile yankı süresini okuyun ve uçuş süresi formülüyle mesafeyi hesaplayın.
HC-SR04 ucuzdur, kullanımı kolaydır ve birçok Arduino mesafe ölçüm projesine uygundur. En iyi sonuçları elde etmek için hedef yüzeye, ölçüm açısına, kör bölgeye, kararlı güce, zaman aşımı yönetimine ve sıcaklık etkilerine dikkat edin.
Arduino, TRIG pinine 10us'luk bir darbe gönderir. HC-SR04, sekiz adet 40kHz ultrasonik darbe yayar ve yansıyan ses geri dönene kadar ECHO pinini yüksek seviyeye ayarlar. Arduino bu darbe süresini ölçer ve mesafeyi hesaplar.
Formül mesafe = süre × ses hızı / 2'dir. Santimetre cinsinden yaygın bir Arduino formülü mesafeCm = süre × 0,0343 / 2'dir; burada süre mikrosaniye cinsinden ölçülür.
Ölçülen yankı süresi, sensörden nesneye ve sensöre geri gidiş-dönüş süresidir. 2'ye bölmek, sensör ile nesne arasındaki tek yönlü mesafeyi verir.
Çoğu Arduino dijital pinini kullanabilirsiniz. Birçok örnekte TRIG dijital pin 9'a ve ECHO dijital pin 10'a bağlanır. Kod, kablolamanızda kullanılan pinlerle eşleşmelidir.
Yaygın nedenler arasında gevşek kablolama, kararsız 5V güç, yanlış TRIG veya ECHO pin numaraları, menzil içinde nesne olmaması, açılı hedef yüzeyleri, yumuşak malzemeler, bloke sensör kafaları veya pulsIn() işlevinde zaman aşımı olmaması yer alır.
Kör bölge, modülün güvenilir şekilde ölçüm yapamadığı minimum mesafedir. HC-SR04 için kör bölge genellikle yaklaşık 2 cm'dir. Bundan daha yakın nesneler dengesiz okumalara neden olabilir.
Evet, sensörün nemden korunması ve sıvı yüzeyinin üzerine monte edilmesi durumunda HC-SR04 basit temassız su seviyesi projeleri için kullanılabilir. Nemli, dış mekan veya endüstriyel tanklar için su geçirmez bir ultrasonik sensör önerilir.
Sabit bir güç kaynağı kullanın, sensörü hedefe dik tutun, yumuşak veya açılı yüzeylerden kaçının, pulsIn zaman aşımı ekleyin, birden fazla ölçüm yapın, medyan filtreleme kullanın ve ölçümler arasında yaklaşık 60 ms bekleyin.