Cách tạo cảm biến khoảng cách siêu âm trên Arduino: Máy đo khoảng cách DIY. Cảm biến khoảng cách siêu âm Máy đo khoảng cách siêu âm tự làm trên sơ đồ mạch vi điều khiển

Bruno Gavand

Dự án xem xét giải pháp đơn giản và chi phí thấp cho cảm biến siêu âm để đo khoảng cách, dựa trên bộ vi điều khiển PIC16F877A của công ty, nhưng người dùng có thể điều chỉnh mã nguồn cho các bộ vi điều khiển khác. Cảm biến có thể được tích hợp vào các thiết kế và thiết bị tùy chỉnh: máy dò hiện diện, robot, hệ thống đỗ xe ô tô, thiết bị đo khoảng cách, v.v.

Tính năng đặc biệt:

  • một số lượng nhỏ các thành phần bên ngoài;
  • kích thước mã 200 Byte;
  • phạm vi khoảng cách làm việc: 30 cm - 200 cm;
  • độ chính xác đo ± 1 cm;
  • chỉ báo khi vượt quá giới hạn đo.

Như bạn đã biết, tốc độ truyền âm trong không khí là khoảng 340 m/s. Như vậy, nguyên lý của cảm biến siêu âm là gửi xung siêu âm có tần số 40 kHz và theo dõi tín hiệu phản xạ (tiếng vang). Tất nhiên, bạn sẽ không nghe thấy âm thanh nhưng cảm biến siêu âm có thể phát hiện xung phản xạ. Do đó, khi biết thời gian truyền của xung và tín hiệu siêu âm phản xạ, chúng ta có thể thu được khoảng cách. Chia cho hai, chúng ta có được khoảng cách từ cảm biến siêu âm đến chướng ngại vật đầu tiên mà tín hiệu được phản xạ.

Thiết bị sử dụng bộ phát siêu âm áp điện MA40B8S và cảm biến siêu âm áp điện MA40B8R mở. Các thông số chính được thể hiện trong bảng dưới đây.

Thiết bị Mục đích Tính thường xuyên Phương hướng,
kêu
Dung tích,
pF
Vùng đất
phát hiện,
tôi
Đầu vào
Vôn,
tối đa, V
MA40B8S Bộ phát 40 kHz 50 (đối xứng) 2000 0.2 … 6 40
MA40B8R cảm biến 40 kHz 50 (đối xứng) 2000 0.2 … 6

Nền tảng gỡ lỗi của công ty đã được sử dụng để thử nghiệm.

Tuy nhiên, người dùng có thể sử dụng bất kỳ bộ vi điều khiển PIC nào có ít nhất một kênh ADC và một kênh PLC.

Sơ đồ nguyên lý của cảm biến siêu âm

Bộ phát được điều khiển thông qua bóng bán dẫn BD135. Diode 1N4007 được sử dụng để bảo vệ bóng bán dẫn khỏi điện áp ngược. Nhờ sử dụng bóng bán dẫn và mạch cộng hưởng, được hình thành bằng cách kết nối song song giữa cuộn cảm L1 330 µH và tụ điện được hình thành bởi chính bộ phát, điện áp cung cấp của bộ phát sẽ vào khoảng 20 V, đảm bảo phạm vi phát hiện lên tới 200 cm. Điều đáng chú ý là bộ phát có thể được điều khiển trực tiếp từ đầu ra của vi điều khiển, tuy nhiên, trong trường hợp này, phạm vi khoảng cách không vượt quá 50 cm.

Cảm biến được kết nối trực tiếp với ADC của vi điều khiển (khi sử dụng PIC16F877A - kênh 1 của ADC), cần có một điện trở nối song song với cảm biến để phối hợp trở kháng.

Đầu tiên bạn cần gửi một xung siêu âm. Có thể dễ dàng thu được tín hiệu 40 kHz bằng bộ vi điều khiển phần cứng. Tín hiệu phản xạ từ cảm biến đi vào ADC, độ phân giải của ADC là 4 mV, khá đủ để đọc dữ liệu từ cảm biến và không cần thêm thành phần nào.

Hình ảnh bên ngoài của bảng phát triển cảm biến siêu âm


Cảm biến này là giải pháp đơn giản nhất và do đó có một số nhược điểm: độ rung nhẹ của máy thu siêu âm có thể dẫn đến các phép đo không chính xác. Do xung được gửi không được điều chế hoặc mã hóa nên các nguồn tần số siêu âm không liên quan có thể cản trở phép đo, tất cả đều có thể dẫn đến kết quả không chính xác (các phép đo ngoài phạm vi).

Chú thích trên hình ảnh:

nổ siêu âm - xung siêu âm;
tiếng vang cơ học (loại bỏ bằng phần mềm) - tiếng vang cơ học (loại bỏ bằng phần mềm);
sóng siêu âm phản xạ bởi vật ở xa - sóng siêu âm phản xạ từ vật ở xa.

Giá trị phân chia của máy hiện sóng: theo chiều ngang - 1 ms/div, theo chiều dọc - 5 mV/div.

Tiếng vang cơ học được loại bỏ trong phần mềm bằng cách tạo ra độ trễ. Sóng phản xạ, có biên độ khoảng 40 mV, được nhận sau xung gửi đi 9,5 ms. Xét tốc độ truyền âm là 340 m/s, ta có:

0,0095 / 2×340 = 1,615 m.

Trên thực tế, đó là trần của căn phòng ở khoảng cách 172 cm so với cảm biến, giá trị 170 cm được hiển thị trên màn hình LCD được lắp trên bảng gỡ lỗi.

Tải xuống

Mã nguồn của dự án trên vi điều khiển PIC16F877A (trình biên dịch mikroC) -

Thiết bị này, vẫn được coi là độc nhất, đã có thể ứng dụng trong hầu hết các lĩnh vực của đời sống con người. Ngày nay, máy đo khoảng cách laser có thể được nhìn thấy trong tay các nhà địa chất và khảo sát. Nói cách khác, trong những lĩnh vực hoạt động của con người cần phải đo khoảng cách với độ chính xác cực cao. Do đó, thước đo băng laser đã trở nên phổ biến rộng rãi, có đặc điểm là độ chính xác cao, độ tin cậy cao và giá cả rất phải chăng. Khá tự nhiên khi hỏi liệu bạn có thể chế tạo máy đo khoảng cách laser bằng tay của chính mình hay không.

Nhóm thiết bị đo khoảng cách sử dụng thiết bị điện tử bao gồm: máy đo xa laser, máy đo xa siêu âm.

Các phép đo bằng máy đo khoảng cách laser được thực hiện trên cơ sở thông lượng ánh sáng; chất mang tín hiệu là bức xạ điện từ, được tô màu trong bóng thích hợp. Trong hầu hết các trường hợp, đèn đỏ được sử dụng làm cơ sở.

Theo các định luật vật lý, tốc độ ánh sáng cao hơn rất nhiều so với tốc độ âm thanh nên thời gian đo cùng một khoảng cách sẽ khác nhau.

Những lý do chính để cài đặt máy đo khoảng cách laser

Sử dụng thước dây cơ học không phải lúc nào cũng thuận tiện. Đôi khi nó không có tác dụng tích cực. Trong 10 năm qua, máy đo khoảng cách điện tử ngày càng được ưa chuộng. Nhóm thiết bị đo khoảng cách sử dụng thiết bị điện tử này bao gồm:

  • công cụ tìm phạm vi tia laser;
  • máy dò phạm vi siêu âm.

Tất cả các thiết bị này hoạt động theo nguyên tắc không tiếp xúc. Ngày nay, một máy đo khoảng cách như vậy được tạo ra bởi các thợ thủ công trong nước bằng chính đôi tay của họ. Các thiết bị hoạt động không thua kém gì những thiết bị được sản xuất tại nhà máy.

Máy đo khoảng cách laser DIY bao gồm một số bộ phận:

  • chi trả;
  • vi điều khiển;
  • bộ khuếch đại tín hiệu laser;
  • laze;
  • bộ tách sóng quang;
  • lọc.

Về cơ bản, bức xạ laser xảy ra bằng tín hiệu hình sin.

Rất khó để có được tín hiệu như vậy có tần số 10 MHz. Một bộ điều khiển đơn giản không phù hợp ở đây. Để làm được điều này, tốt hơn là sử dụng một đoạn uốn khúc có tần số cần thiết. Khi tín hiệu đến từ bộ tách sóng quang được khuếch đại, các sóng hài không cần thiết sẽ bị loại bỏ bằng bộ lọc thông dải đặc biệt hoạt động ở tần số 10 MHz. Một tín hiệu xuất hiện ở đầu ra rất giống tín hiệu hình sin.

Quay lại nội dung

Để chế tạo máy đo khoảng cách bằng tay của chính bạn, bạn có thể sử dụng mạch liên lạc laser làm cơ sở. Trong trường hợp này, việc truyền dữ liệu diễn ra rất nhanh, tốc độ là 10 Mbit. Giá trị này tương ứng với tần số điều chế hiện có.

Đối với một thiết bị laser như vậy, bộ khuếch đại công suất đơn giản nhất được sử dụng. Nó bao gồm một chip 74HC04, được lắp ráp từ sáu bộ biến tần. Nguồn cung cấp hiện tại bị giới hạn bởi các điện trở đặc biệt. Tuy nhiên, thợ thủ công có thể thay thế điện trở bằng những bộ phận đáng tin cậy hơn.

Bảng vận hành trở thành nguồn điện áp 5 volt. Đây là cách bộ khuếch đại nhận được năng lượng. Để loại bỏ nhiễu tín hiệu đến phần khác của mạch điện, vỏ bộ khuếch đại được làm bằng thép, mỗi dây đều được bọc chắn.

Laser là ổ đĩa được cài đặt trong hộp giải mã DVD. Một thiết bị như vậy có đủ năng lượng để hoạt động ở tần số đạt tới 10 MHz.

Máy thu bao gồm:

  • điốt quang;
  • bộ khuếch đại.

Bộ khuếch đại bao gồm một bóng bán dẫn hiệu ứng trường, một vi mạch đặc biệt. Khi khoảng cách tăng lên, độ sáng của photodiode giảm xuống. Vì vậy cần phải có khuếch đại mạnh mẽ. Mạch lắp ráp cho phép bạn đạt tới 4000 đơn vị.

Khi tần số tăng lên, tín hiệu photodiode bắt đầu giảm. Bộ khuếch đại của thiết kế này là bộ phận chính và rất dễ bị tổn thương. Việc điều chỉnh nó đòi hỏi độ chính xác rất cao. Nên điều chỉnh mức tăng theo cách để đạt được giá trị tối đa. Cách dễ nhất là cung cấp điện áp 3 V cho bóng bán dẫn, bạn có thể lắp pin thông thường.

Để bộ thu bắt đầu hoạt động, bạn cần cung cấp nguồn điện 12 V. Để làm được điều này, một nguồn điện đặc biệt sẽ được lắp đặt.

Bộ khuếch đại như vậy có độ nhạy cao với bất kỳ nhiễu nào, vì vậy nó phải được che chắn. Bạn có thể sử dụng vỏ cảm biến quang học cho việc này. Tấm chắn photodiode có thể được làm từ giấy bạc thông thường.

Hệ thống được mô tả ở trên sẽ cho phép bạn tạo máy đo khoảng cách laser tự chế tại nhà.


Xin chào tất cả mọi người. Gần đây tôi tình cờ gặp một cảm biến siêu âm đo khoảng cách đến một vật thể - US-100. Một mặt hàng tương tự có thể được mua trên nền tảng giao dịch trực tuyến. Không thể tìm thấy những món đồ chơi như vậy được bày bán ở các chợ trong thành phố của tôi. Người ta đã quyết định xây dựng một mạch dựa trên cảm biến như vậy trên bộ vi điều khiển AVR ATmega8 thông thường. Mục đích của thiết bị là đo khoảng cách đến vật thể, cũng như đo nhiệt độ. Nói về nhiệt độ. Model US-100 là cảm biến siêu âm có bù nhiệt độ. Tốc độ truyền sóng âm (siêu âm) ở các nhiệt độ khác nhau sẽ khác nhau. Phép đo cảm biến dựa trên thời gian truyền sóng âm thanh từ vật thể đến bộ thu cảm biến. Việc bù nhiệt độ rất có thể sẽ không loại bỏ hoàn toàn lỗi do nhiệt độ môi trường gây ra.

Khi kiểm tra một bảng mạch in, chúng ta có thể đưa ra kết luận về nguồn đo nhiệt độ: nhiệt kế được đặt trong vi mạch hoặc nhiệt độ được đo bằng một diode nằm ở mép bảng. Khi đo nhiệt độ bằng một diode, mối nối P-N của nó được sử dụng và điều này liên quan đến hệ số dẫn nhiệt độ. Với sự tự tin cao độ, đây là lựa chọn thứ hai, vì khi làm việc với mạch bên dưới, khi bạn chạm ngón tay vào diode này, nhiệt độ sẽ thay đổi. Vì vậy, khi đo, tốt nhất bạn nên cố gắng không chạm tay vào cảm biến để có được dữ liệu khoảng cách chính xác hơn.

Để đo, cảm biến sử dụng 2 đầu giống như một chiếc micro lớn hoặc một chiếc loa nhỏ. Về cơ bản là cả hai. Một trong các đầu phát ra sóng siêu âm, đầu thứ hai nhận tín hiệu phản xạ của sóng siêu âm. Quãng đường đi được quyết định bởi thời gian đi. Rõ ràng giới hạn khoảng cách đo được là 4,5 mét là do công suất của bộ phát.

Đối với giao tiếp giữa cảm biến và bộ vi điều khiển, model US-100 có hai giao diện khả dụng, được chọn bằng một nút nhảy ở mặt sau của bảng cảm biến. Nếu jumper được đặt, giao diện UART sẽ được chọn; nếu jumper bị loại bỏ, giao diện hoặc chế độ vận hành GPIO sẽ được sử dụng. Trong trường hợp đầu tiên, phần cứng hoặc phần mềm của bộ vi điều khiển được sử dụng để giao tiếp với bộ vi điều khiển. Trong trường hợp thứ hai, bạn sẽ chỉ phải nhận và truyền dữ liệu theo cách thủ công. Trong mạch thiết bị, chúng tôi sử dụng chế độ vận hành đơn giản hơn bằng giao diện UART.

Cần làm rõ các sắc thái của sơ đồ chân và kết nối của cảm biến với vi điều khiển. Thông thường, khi truyền dữ liệu qua UART, các đường Rx và Tx được kết nối chéo - Rx với Tx và Tx với Rx. Cảm biến siêu âm này phải được kết nối theo các tiếp điểm đã ký trên bảng mạch in Rx đến Rx và Tx đến Tx. Người Trung Quốc đã đốt nó đi, tôi đồng ý. Trước khi xác định được điều này, tôi đã phải chịu đựng rất lâu và cuối cùng mới đi đến kết quả này. Vì vậy, khi làm việc qua UART, để khởi tạo một phép đo khoảng cách, cảm biến siêu âm US-100 cần truyền giá trị 0x55 đến chân Trig/Tx, tương ứng với ký hiệu “U”. Để đáp lại, cảm biến sẽ truyền hai byte thông tin khoảng cách đến chân Echo/Rx - byte đầu tiên là 8 bit cao, byte thứ hai là 8 bit thấp. Đơn vị của khoảng cách là milimét. Để chuyển đổi hai byte thành một giá trị khoảng cách, bạn cần nhân byte đầu tiên với 256 và cộng byte thứ hai. Việc này là cần thiết vì khi byte thấp bị tràn thì byte cao sẽ tăng thêm một. Để hiển thị giá trị nhiệt độ môi trường hiện tại, giá trị 0x50 phải được chuyển, tương ứng với ký tự "P". Đáp lại, cảm biến sẽ truyền giá trị nhiệt độ. Giá trị nhiệt độ thực tế sẽ bằng giá trị nhận được từ cảm biến trừ đi 45.

Thông số cảm biến siêu âm US-100:

  • điện áp cung cấp - điện áp DC 2,4 - 5,5 volt
  • mức tiêu thụ hiện tại ở chế độ chờ - 2 mA
  • nhiệt độ hoạt động - âm 20 - cộng 70 C
  • góc nhìn - 15 độ
  • giao diện - GPIO hoặc UART
  • khoảng cách đo được - từ 2 cm đến 450 cm
  • lỗi - cộng trừ 3 mm + 1%

Cấu hình UART cho cảm biến: tốc độ 9600 baud, 8 bit dữ liệu, chẵn lẻ: không có, 1 bit stop.

Hãy chuyển sang sơ đồ thiết bị.

Mạch đo khoảng cách siêu âm dựa trên bộ vi điều khiển Atmega8 và cảm biến siêu âm US-100. Nguồn điện cho mạch được lấy từ bộ ổn áp tuyến tính L7805, nó có thể được thay thế bằng bộ ổn áp tương tự trong nước KR142EN5A, cần có tụ điện trong bộ dây ổn áp, mặc dù nó có thể hoạt động mà không cần chúng. Một số bộ ổn định đơn giản là không khởi động được nếu không có tụ điện. Bộ ổn định tuyến tính có thể được thay thế bằng bộ điều chỉnh xung, ví dụ MC34063 hoặc LM2576, nhưng bạn sẽ phải thay đổi mạch một chút tùy theo kết nối của các bộ điều chỉnh chuyển mạch trong mạch. Tụ điện C5-C7 là cần thiết để đảm bảo sự ổn định của vi điều khiển và cảm biến. Công suất định mức của tất cả các tụ điện có thể thay đổi trong giới hạn hợp lý. Điện trở R2 là cần thiết để ngăn chặn việc khởi động lại bộ vi điều khiển một cách tự phát và đóng vai trò là nguồn cung cấp năng lượng dương cho chân đặt lại. Điện trở R1 điều chỉnh độ tương phản của màn hình LCD. Bảng thông tin là màn hình tinh thể lỏng (LCD hoặc LCD) màn hình SC1602, 2 dòng, mỗi dòng 16 ký tự, dựa trên bộ điều khiển HD44780. Bạn có thể thay thế màn hình LCD bằng bất kỳ model nào khác dựa trên bộ điều khiển HD44780 với cùng số dòng và ký tự trên mỗi dòng trở lên. Trên bảng mạch in của màn hình LCD, có thể kích hoạt đèn nền màn hình theo hai cách - bằng cách hàn một điện trở và một nút nhảy trên chính bảng màn hình hoặc bằng cách sử dụng các chân đặc biệt, thường được ký hiệu là “A” và “K”. ”. Anode và cathode tương ứng. Điện áp cung cấp mạch 5 volt được kết nối với chúng thông qua một điện trở giới hạn dòng điện. Sơ đồ này sử dụng phương pháp đầu tiên nên không được chỉ ra trên sơ đồ. Thay vì nút đồng hồ S1 - S5, bạn có thể sử dụng bất kỳ nút nào khác. LED1 có thể được sử dụng với bất kỳ màu nào phù hợp hoặc được thay thế bằng bóng bán dẫn và được điều khiển bởi một số mạch khác tùy thuộc vào khoảng cách từ cảm biến. Tùy thuộc vào loại bóng bán dẫn được sử dụng (P-N-P hoặc N-P-N), khi vượt quá khoảng cách hoặc giới hạn khoảng cách, đầu ra sẽ có điện áp dương hoặc âm, tức là khi tín hiệu logic của vi điều khiển cao thì bóng bán dẫn N-P-N sẽ mở và bóng bán dẫn P-N-P sẽ đóng lại. Phần sụn của bộ vi điều khiển chứa một tham số trong đó, nếu vượt quá giới hạn khoảng cách đã chỉ định, mức điện áp logic cao sẽ được cung cấp cho chân PB0. Trong mạch này, đèn LED chỉ báo hiệu quá mức. Tín hiệu này được nhân đôi trên màn hình LCD bằng cách gạch chân thông tin giới hạn khoảng cách. Thông số này có thể được điều chỉnh bằng nút S1, S2. Khi nhấn, nó tăng hoặc giảm 10 mm. Thông tin về khoảng cách cũng được hiển thị trên màn hình tính bằng milimét. Thông tin về nhiệt độ môi trường được hiển thị trên màn hình theo độ C. Hai tùy chọn phần sụn được đính kèm trong bài viết: 1) đo liên tục các thông số khoảng cách và nhiệt độ (trong khoảng thời gian khoảng 0,2 giây), trong khi các nút S4, S5 không được sử dụng, 2) khi nhấn các nút S4, S5, một yêu cầu duy nhất là được tạo ra cho cảm biến để đo nhiệt độ và khoảng cách. Video cho bài viết được thực hiện với firmware số 1. Để lập trình vi điều khiển, bạn cần flash các bit cầu chì:

Đối với người mới bắt đầu, tôi khuyên bạn nên sử dụng các giá trị thập lục phân cho các bit cầu chì CAO và THẤP để không làm rối các hộp kiểm. Ảnh chụp màn hình từ AVRstudio (có sự khác biệt so với pipe, sina prog và các chương trình khác dành cho bộ vi điều khiển nhấp nháy). Nếu bạn sử dụng các chương trình flash bộ vi điều khiển AVR không cho phép nhập thông số cầu chì, bạn có thể sử dụng máy tính cầu chì để chuyển đổi hộp kiểm sang dạng thập lục phân và ngược lại.

Mạch được lắp ráp và thử nghiệm trên bo mạch phát triển cho Atmega8:

Về mặt cấu trúc, sơ đồ có thể được thiết kế, ví dụ, dưới dạng một khẩu súng lục có chỉ báo laser về hướng của cảm biến siêu âm. Giới hạn duy nhất là khoảng cách đo được, vượt quá giới hạn đó thì sai số sẽ tăng mạnh. Hạn chế còn liên quan đến vị trí và kích thước của vật thể được đo khoảng cách - khoảng cách đến vật thể quá nhỏ hoặc ở một góc lớn sẽ bị biến dạng. Sự kết hợp lý tưởng là các vật thể đủ lớn vuông góc với hướng của cảm biến. Sai số đo gần đúng với sai số do nhà sản xuất công bố. Với sự phát triển hơn nữa, thiết bị này có thể được sử dụng như một thiết bị phát hiện chướng ngại vật, giống như cảm biến đỗ xe trong điều kiện trong nhà, vì trên đường phố, đầu siêu âm của cảm biến này sẽ bị bám bụi bẩn.

Đưa ra ý tưởng và lựa chọn ứng dụng của bạn; những ý tưởng thú vị nhất có thể được thực hiện trong tương lai.

Tôi đính kèm bài viết 2 phiên bản phần mềm HEX dành cho MK, một dự án trong (phiên bản 7.7, cảm biến siêu âm US-100 không có trong cơ sở dữ liệu proteus nhưng sử dụng trình gỡ lỗi UART), cũng như một đoạn video ngắn trình bày hoạt động của mạch.

Danh sách các nguyên tố phóng xạ

chỉ định Kiểu Mệnh giá Số lượng Ghi chúCửa hàngsổ ghi chú của tôi
IC1 MK AVR 8-bit

ATmega8

1 Vào sổ ghi chú
VR1 Bộ điều chỉnh tuyến tính

L7805AB

1 Vào sổ ghi chú
HG1 màn hình LCDSC16021 Dựa trên HD44780 Vào sổ ghi chú
U1 Cảm biến siêu âmMỹ-1001 Vào sổ ghi chú
R1 Điện trở tông đơ10 kOhm1 3296W-1-103LF Vào sổ ghi chú
R2 Điện trở

10 kOhm

1 0,25 W Vào sổ ghi chú
R3 Điện trở

390 Ohm

1 0,25 W
Một số lưu ý:
Tất cả các bộ phận cần thiết để tạo ra máy đo khoảng cách siêu âm theo sơ đồ này đều được bán bằng chipidip, mỗi thứ có giá khoảng 500-900 rúp (tôi không nhớ chính xác - có rất nhiều tiền, tôi không đếm :- ). (vỏ, loa tweeter, đầu nối, v.v.)
Một số nhận xét về mạch đo xa siêu âm:
1. Bạn có thể sử dụng bất kỳ loa tweeter nào, những loa khác nhau sẽ tốt hơn cho các tác vụ khác nhau... đối với nhiệm vụ của tôi - kích thước càng lớn thì càng tốt, góc là 50.
2. Bạn có thể thử chỉ sử dụng một AD822 tương đối đắt tiền và thay cho bộ so sánh một cái gì đó rẻ hơn (đơn giản là tôi không có sẵn thứ gì khác trong tay)
3. Trong mega, bạn có thể sử dụng bộ hẹn giờ để tạo ra 40 kilohertz, để làm được điều này, bạn cần chọn một bộ cộng hưởng khác. (Tôi chỉ có 16 và 12... chúng không vừa)
4. Tốc độ của âm thanh trong không khí thực sự phụ thuộc vào nhiệt độ - nếu độ chính xác là rất quan trọng (tôi không quan tâm đến nó), thì hãy tính đến điều này
5. Xin lưu ý rằng trong hình ảnh của máy đo khoảng cách trong hộp - loa tweeter không chạm vào nhựa - một người đã nói rằng với cài đặt siêu chính xác (mạch này có khả năng làm được điều này), âm thanh từ loa tweeter đến micrô sẽ truyền qua cơ thể nên tốt nhất là chơi an toàn
6. Có thể xem ví dụ về mega firmware đơn giản nhất trong C (theo sơ đồ này)
7. Tốt hơn nên sử dụng bộ lập trình STK200/300, còn được gọi là avreal - phần mềm và mạch có thể được kéo
8. Theo suy nghĩ, trong phần sụn cần phải theo dõi cả phần đầu và phần cuối của “gói”, trong ví dụ chỉ có phần đầu (độ chính xác sẽ tăng cụ thể)... có lẽ tôi sẽ thêm nó và đăng nó.
9. Loa tweeter thực sự thích tần số 40 kHz - lệch một chút thì hoàn toàn không giống nhau... có lẽ những gì họ nói trong sách hướng dẫn là đúng, rằng nó có độ vang :-)
10. Không phải vô cớ mà các bóng bán dẫn được nhét vào bộ phát trong sơ đồ - đối với những người muốn cho nhiều vôn hơn 12 - xin chào mừng - một người nói rằng nó sẽ kêu to hơn (đếm thêm). Tôi đã không làm điều này vì ba lý do: thứ nhất, vẫn cần tìm thấy điện áp 24 volt ở đâu đó, và thứ hai, phiên bản hiện tại, khi đặt điện trở cho phù hợp, sẽ nhìn thấy một bức tường cách đó 4 mét, tức là. Tôi không có nơi nào để kiểm tra nó và tôi không cần nó. Chà, lý do thứ ba cũng chính người này nói là loa tweeter có xu hướng chết ở điện áp này
11. Lời khuyên chung: bạn có thể tìm thấy tất cả các điện trở và tụ điện trong bộ nguồn không hoạt động từ máy tính ATX (tất cả chúng đều có công suất khoảng 1/8 watt) - bạn sẽ tiết kiệm được tiền!
12. Có một quan niệm sai lầm rằng bằng cách nào đó chó và các sinh vật khác có thể nghe thấy sóng siêu âm phát ra từ máy phát ra âm thanh, nó có ảnh hưởng xấu đến chúng: một đêm nọ, con chó của tôi đến và ngủ quên trước máy phát âm thanh đang bật.
13. Ngoài ra - chỉ để bạn biết - megas và các bộ điều khiển 8 bit khác của Atmel hoạt động rất tốt... trong một số tác vụ, thay vì yêu cầu 16, chúng hoạt động ở mức 24 và vẫn ổn.
14. Khi đặt R5 trên kilo-ohm (10, 50, 100), bạn sẽ nhận được mức tăng rất lớn và rất có thể bạn sẽ cần còi, nhưng phạm vi đo sẽ tăng lên rất nhiều.
15. Thay vì tháo còi (với R5 lớn), xem ở trên, bạn có thể nâng cấp chương trình cơ sở để nó không chờ tín hiệu hữu ích tại thời điểm ban đầu. Nhưng khi đó sẽ không thể đo được khoảng cách khoảng 10 cm trở xuống.

Bình luận về mẹo 8 - màu vàng cho biết thời điểm máy đo khoảng cách siêu âm MK bị gián đoạn khi tiếp nhận; trên thực tế, bạn có thể giới hạn bản thân ở khoảnh khắc đầu tiên này, đợi một chút và thực hiện phép đo tiếp theo, tạo ra xung tiếp theo - và thời gian bay của âm thanh được coi là thời gian từ xung được gửi đầu tiên (hoặc xung cuối cùng không quan trọng) cho đến xung đầu tiên được chấp nhận.
Tùy chọn thứ hai - được biểu thị bằng màu đỏ - chính xác hơn - vì gói xung, theo quy luật, không đến ở dạng hoàn hảo và không hoàn toàn (có thể không có một vài xung đầu tiên hoặc cuối cùng), trên thực tế, thậm chí trong hình, bạn có thể thấy rằng nó bị "làm phẳng" ở các cạnh, mặc dù một hình chữ nhật xung lý tưởng đã được gửi - vì vậy: vấn đề là phần giữa của gói phải được giữ nguyên mặc dù thực tế là các cạnh của nó có thể không còn nữa được cảm nhận bởi bộ so sánh. Vì vậy, độ chính xác là vài.. (người ta phải nghĩ đến milimet) phụ thuộc vào việc phần giữa hay chỉ phần đầu của gói đã được tính đến trong phần sụn của máy đo khoảng cách siêu âm khi nhận lại.

Cảm biến tiệm cận siêu âm HC-SR04 (và các mô-đun tương tự) sử dụng sóng siêu âm để xác định khoảng cách đến vật thể.

Nói chung, chúng ta sẽ cần tính ra khoảng cách đến vật thể, vì bản thân cảm biến chỉ tính đến thời gian cần thiết để bắt được tiếng vang của sóng âm thanh mà nó gửi đi. Nó diễn ra như thế này:

  1. Mô-đun này phát ra sóng âm thanh đồng thời cấp điện áp vào một chân phản hồi đặc biệt.
  2. Mô-đun bắt tín hiệu phản xạ và loại bỏ điện áp khỏi chân.

Đó là tất cả những gì máy đo khoảng cách siêu âm làm được. Chúng ta có thể tự xác định khoảng cách vì chúng ta biết âm thanh truyền từ mô-đun và quay trở lại mất bao lâu (bằng bao lâu mà chân phản xạ được cấp năng lượng) và chúng ta cũng biết tốc độ của âm thanh trong không khí. Nhưng chúng ta sẽ không đi sâu vào chi tiết và để Arduino thực hiện tất cả các phép tính.

Nhân tiện, mặc dù thực tế là nguyên lý hoạt động của tất cả các cảm biến siêu âm là như nhau, KHÔNG phải TẤT CẢ CHÚNG đều tạo ra cùng một điện áp đầu ra trên chân echo. Vì vậy, nếu bạn có một mô-đun không phải HC-S04, hãy chú ý đến bước thứ tư, mô tả các sự cố có thể xảy ra và kiểm tra xem mô-đun của bạn có trong danh sách hay không. Nếu nó không có ở đó, thì bạn sẽ phải tự mình tìm ra nó.

Bước 1: Lắp ráp phần cứng DIY

Lắp ráp rất đơn giản (lắp ráp mọi thứ bị ngắt khỏi điện áp):

  1. Kết nối 5V từ chân Arduino với chân VCC trên mô-đun
  2. Kết nối GND từ Arduino với GND trên mô-đun
  3. Kết nối chân số 7 trên Arduino với chân Trig trên mô-đun
  4. Kết nối mô-đun kỹ thuật số 8 trên Arduino với chân Echo trên mô-đun

Bước 2: Lập trình Mô-đun HC-SR04

Để xem kết quả của chương trình, bạn cần chạy màn hình nối tiếp trên Arduino. Nếu bạn chưa quen với tính năng này thì bây giờ là lúc mở nó ra và tìm hiểu thêm về nó - đó là một công cụ tuyệt vời để giúp bạn gỡ lỗi mã của mình. Trong giao diện Arduino, nhìn ở góc bên phải, bạn sẽ thấy nút khởi chạy màn hình nối tiếp, nó trông giống như một chiếc kính lúp, bấm vào đó và màn hình sẽ mở ra (hoặc chọn TOOLS/Serial Monitor, hoặc nhấn Ctrl+ Shift+M).

Sau đây là dự thảo chương trình làm việc:

// Bắt đầu phác thảo cho Aruino -
// Định nghĩa các hằng số (các hằng số không thay đổi và nếu bạn cố định nghĩa lại chúng, bạn sẽ gặp lỗi khi biên dịch)
const int triggerPin = 7; // tạo một hằng số gọi là "triggerPin" và gán chân số 7 cho nó
const int echoPin = 8; // tạo một hằng số gọi là "echoPin" và gán chân số 8 cho nó
// Xác định các biến (các biến có thể và thường thay đổi trong chương trình, chúng có thể chứa bất kỳ giá trị được tính toán nào)
thời lượng int = 0; // tạo một biến tên là "duration" để giữ giá trị được trả về bởi PulseIn, ban đầu được đặt thành "0"
khoảng cách int = 0; // tạo một biến để lưu trữ giá trị được tính bằng khoảng cách đến vật thể phía trước cảm biến, ban đầu giá trị được đặt thành “0”
void setup() // Trong phần này, bạn có thể định cấu hình bo mạch của mình và các tham số khác cần thiết để chương trình của bạn chạy.
{
Serial.begin(9600); // khởi tạo giao tiếp nối tiếp qua USB giữa Arduino và máy tính, chúng ta sẽ cần điều này
// xác định chế độ pin
pinMode(triggerPin, OUTPUT); // “triggerPin” sẽ được dùng cho OUTPUT, số pin được khai báo ở phần “Xác định biến” ở trên
pinMode(echoPin, INPUT); // “echoPin” sẽ được dùng cho INPUT, số pin được khai báo ở phần “Xác định biến” ở trên
) // kết thúc quá trình thiết lập
// mọi thứ được viết ở trên chỉ được chương trình đọc một lần - lúc Khởi động hoặc Đặt lại
void loop() // mã chương trình trong phần được lặp được đọc liên tục và lặp lại cho đến khi tắt nguồn hoặc thiết lập lại được thực hiện
{
digitalWrite(triggerPin, CAO); // bắt đầu gửi sóng siêu âm từ mô-đun HC-SR04
độ trễ(5); // tạm dừng một chút, mô-đun cần hoạt động chính xác (bạn có thể giảm giá trị này, các chương trình khác của tôi hoạt động với giá trị 1)
digitalWrite(triggerPin, THẤP); // dừng sóng siêu âm phát ra từ mô-đun HC-SR04
thời lượng = xungIn(echoPin, CAO); //chức năng đặc biệt cho phép bạn xác định khoảng thời gian mà điện áp được cấp vào chân echo trong chu kỳ siêu âm hoàn thành gần đây nhất
độ trễ(10); // lại một khoảng dừng ngắn. Nó cần thiết cho sự ổn định; sự tạm dừng quá ngắn có thể không mang lại kết quả.
khoảng cách = (thời lượng/2) / 58; // chuyển đổi thời lượng thành khoảng cách (giá trị được lưu trong “thời lượng” được chia cho 2, sau đó giá trị này được chia cho 58**) ** cho centimét
độ trễ (500); // một lần tạm dừng khác để ổn định - bạn có thể thử nghiệm với giá trị, nhưng điều này có thể làm hỏng chương trình, vì vậy hãy sử dụng 500 theo mặc định
Serial.print(khoảng cách); // gửi giá trị khoảng cách được tính toán tới màn hình nối tiếp
Serial.println("cm"); //thêm từ “cm” sau giá trị khoảng cách và di chuyển dấu mũ trên màn hình nối tiếp sang một dòng mới
Serial.println(); // thêm một dòng trống trên màn hình nối tiếp (để dễ đọc)
) // Kết thúc vòng lặp

_________________________________________________

Vì vậy, sau khi đọc hướng dẫn của mình, tôi nhận ra rằng dàn ý của chương trình không phù hợp với hiểu biết của tôi về sự đơn giản. Vì vậy, tôi đăng bản phác thảo tương tự với những bình luận nhẹ nhàng.

// chương trình mô-đun cảm biến khoảng cách siêu âm HC-SC04
const int triggerPin = 7; // kích hoạt cho 7
const int echoPin = 8; // ECHO lúc 8 giờ
thời lượng int = 0; // lưu trữ giá trị từ PulseIn
khoảng cách int = 0; // lưu trữ giá trị của khoảng cách được tính toán
thiết lập trống()
{
Serial.begin(9600);
pinMode(triggerPin, OUTPUT); // xác định chế độ pin
pinMode(echoPin, INPUT);
}
vòng lặp trống()
{
digitalWrite(triggerPin, CAO); // bắt đầu gửi siêu âm
độ trễ(5); // lệnh bắt buộc, có thể định cấu hình (nhưng không thấp hơn 10 micro giây)
digitalWrite(triggerPin, THẤP); // mô-đun dừng gửi siêu âm
thời lượng = xungIn(echoPin, CAO); // xác định thời gian pin ECHO được cấp điện
độ trễ(10); //lệnh cần thiết, có thể cấu hình được, nhưng cẩn thận
khoảng cách = (thời lượng/2) / 58; // tính khoảng cách tính bằng cm tới đối tượng
độ trễ (500); // tạm dừng để ổn định, giảm có thể làm đứt dòng chương trình, tốt hơn nên để nguyên
Serial.print(khoảng cách); // gửi giá trị hiện tại được lưu trữ ở khoảng cách tới màn hình nối tiếp
Serial.println("cm"); // hiển thị chữ "cm" ngay sau khoảng cách
Serial.println(); // tạo một dòng trống trong màn hình nối tiếp (để dễ đọc)
}

Mình cũng sẽ đính kèm file .ino vào hướng dẫn

Các tập tin

  1. HCSR04BareBones.ino - tệp này được nhận xét nhiều và chứa một số thông tin về mô-đun HC-SR04, cũng như thông tin lắp ráp.
  2. BareBonesLight.ino - một mô-đun có số lượng bình luận nhỏ

Đây là lời khuyên của tôi. Tôi biết rằng mã hoạt động, nhưng trước khi đính kèm các tệp vào hướng dẫn, tôi đã kiểm tra kỹ mọi thứ và màn hình nối tiếp luôn hiển thị “0 cm”. Vấn đề hóa ra là do mô-đun bị cháy và việc thay thế nó đã khắc phục được tình trạng này.

Hãy xem cách chương trình phản hồi nếu bạn quyết định sử dụng các giá trị của lệnh trì hoãn. Qua kinh nghiệm, tôi phát hiện ra rằng việc giảm giá trị độ trễ hoặc đặt chúng về 0 có thể khiến chương trình rơi vào trạng thái không hoạt động.

Khi bạn đã thiết lập thiết bị của mình, giới hạn duy nhất là trí tưởng tượng của bạn. Bạn có thể kiểm tra xem các vật thể đứng yên có ở cùng một khoảng cách và đứng yên không. Bạn có thể sử dụng màn hình để nhận thông báo khi có vật thể di chuyển qua cảm biến, v.v.

Tôi đã sử dụng sơ đồ trên để xác định rằng tất cả các vật thể đều cách cảm biến hơn 60 cm. Ba điốt và một loa tweeter đã được sử dụng trong dự án. Khi tất cả các vật thể cách xa hơn 60 cm, đèn LED màu xanh lá cây sẽ sáng. Khi có vật nào đó đến gần dưới 60 cm, diode xanh tắt và đèn đỏ bật sáng. Nếu vật thể vẫn ở khoảng cách gần trong một thời gian, diode màu đỏ thứ hai sẽ sáng lên và tiếng bíp sẽ bắt đầu phát ra. Khi vật di chuyển ra xa 60 cm, tiếng bíp im lặng, đèn đỏ tắt và đèn xanh lại sáng. Điều này không ngăn được tất cả các cảnh báo sai nhưng nó có tác dụng trong hầu hết các trường hợp khi một con chim bay ngang qua cảm biến hoặc một con sóc tò mò chạy ngang qua.

Bước 4: Các vấn đề đã biết

Nếu bạn thấy mô hình mô-đun siêu âm của mình trong đoạn này, hãy cuộn xuống bên dưới. Tôi hy vọng bạn tìm thấy vấn đề của bạn và giải quyết nó.

  1. Mỹ-105
  2. DYP-ME007TX

Mô-đun US-105

Mô-đun siêu âm US-105 sử dụng chân GPIO trên chân ECHO, nghĩa là các phép tính khác nhau để xác định khoảng cách. Bằng cách ghim GPIO vào chân ECHO, chân này không được cấp điện trong khi gửi sóng. Thay vào đó, khi nhận được siêu âm phản xạ, một điện áp cụ thể sẽ được đặt vào chân ECHO tỷ lệ thuận với thời gian để sóng siêu âm truyền đi và quay trở lại cảm biến. Đoạn mã sau sẽ hoạt động với mô-đun này:

// Code module siêu âm US-105 unsigned int EchoPin = 2; unsigned int TrigPin = 3; không dấu dài Time_Echo_us = 0; // Len_mm_X100 = chiều dài*100 dài không dấu Len_mm_X100 = 0; dài không dấu Len_Integer = 0; // unsigned int Len_Fraction = 0; void setup() ( Serial.begin(9600); pinMode(EchoPin, INPUT); pinMode(TrigPin, OUTPUT); ) void loop() ( digitalWrite(TrigPin, HIGH); delayMicroseconds(50); digitalWrite(TrigPin, LOW) ; Time_Echo_us = xungIn(EchoPin, HIGH); if((Time_Echo_us 1)) ( Len_mm_X100 = (Time_Echo_us*34)/2; Len_Integer = Len_mm_X100/100; Len_Fraction = Len_mm_X100%100; Serial.print("Khoảng cách: "); Serial.print(Len_Integer, DEC); Serial.print(".."); if(Len_Fraction< 10) Serial.print("0"); Serial.print(Len_Fraction, DEC); Serial.println("mm"); delay(1000); } // Конец программы

Mô-đun DYP-ME007TX

// Mã cho mô-đun siêu âm DYP-ME007TX /* Hướng dẫn kết nối * 5V từ Arduino đến VCC trên mô-đun * GNG từ Arduino đến GND trên mô-đun * OUT từ mô-đun đến chân kỹ thuật số 7 trên Arduino */ #include #define RXpin 7 #define TXpin 7 Phần mềmSerial mySerial(RXpin, TXpin); mili dài = 0; byte bộ đệm của tôi = (0); bit byte byte = 0; void setup() ( Serial.begin(9600); mySerial.begin(9600); ) void loop() ( bitpos = 0; while (mySerial.available()) ( if (bitpos< 4) { mybuffer = mySerial.read(); } else break; } mySerial.flush(); mili = mybuffer << 8 | mybuffer; Serial.print("Distance: "); Serial.print(mili / 25.4); Serial.print (" inches"); Serial.println(); delay(500); }