Mục lục:

Cảm biến bụi Sodial trên Android: 6 bước
Cảm biến bụi Sodial trên Android: 6 bước

Video: Cảm biến bụi Sodial trên Android: 6 bước

Video: Cảm biến bụi Sodial trên Android: 6 bước
Video: Rap Việt Mùa 3 - Tập 15: Chung kết 1 - Top 9 lột xác với 9 tiết mục đẳng cấp | Rap Việt 2023 2024, Tháng mười một
Anonim
Cảm biến bụi Sodial trên Android
Cảm biến bụi Sodial trên Android

Cách đây một năm, một người bạn của tôi có một cuộc hội thảo cuối tuần về quan trắc môi trường. Mục tiêu của hội thảo là xây dựng một cảm biến bụi kết nối với bảng pi mâm xôi để đưa dữ liệu đo đạc lên một số máy chủ cung cấp bản đồ nồng độ bụi được cập nhật thường xuyên. Bạn tôi hỏi có cách nào lấy dữ liệu cảm biến trực tiếp trên điện thoại thông minh của anh ấy để theo dõi và ghi nhật ký không. Vì vậy, tôi đã tìm kiếm trên Internet một biểu dữ liệu và thấy rằng cảm biến có giao diện UART đơn giản với giao thức 9600Baud 8N1. Nhưng làm thế nào để kết nối UART với điện thoại thông minh? Chà, điều đó thật dễ dàng. Tôi chỉ phải sử dụng một trong những mô-đun Bluetooth nhỏ phổ biến cung cấp một bộ biên dịch giả lập trên Android. Bây giờ hãy xem tôi đã làm nó như thế nào.

Bước 1: Những gì bạn cần

Những gì bạn cần
Những gì bạn cần
Những gì bạn cần
Những gì bạn cần

Bạn cần những phần sau

  • Một đầu nối giao phối JST XH 7 chân cho giao diện Sodial có dây. Tôi đã mua của tôi trên Ebay.
  • Mô-đun Bluetooth HC05 hoặc 06 tương thích với đầu nối UART
  • Bộ chuyển đổi nối tiếp USB với giao diện mức TTL. Chúng tôi sử dụng điều này để đặt tên duy nhất cho mô-đun BT
  • Cảm biến bụi Sodial SDS011. Tôi nhận được của tôi từ Ebay
  • một mảnh ván
  • Đầu nối USB-B
  • dây điện
  • Một miếng gỗ để gắn mọi thứ lên

Sau đó, bạn sẽ cần một số công cụ đơn giản:

  • Một cái cưa sắt để cắt gỗ
  • cái nhíp
  • hàn sắt và hàn
  • kìm cắt dây
  • Súng bắn keo nóng
  • Một mảnh ống tay silicon 8mm (không có trong hình)

Bạn có thể tải xuống biểu dữ liệu Sodial SDS011 tại đây Biểu dữ liệu Sodial SDS011

Bước 2: Chuẩn bị mô-đun Bluetooth

Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth
Chuẩn bị mô-đun Bluetooth

Mô-đun BT có giao diện UART với mức TTL. Nó có thể được cấu hình lại bằng các lệnh "AT" giống như chúng ta đã làm với modem internet trong thời cổ đại. Để kết nối nó với một chương trình đầu cuối trên máy của bạn, bạn cần điều chỉnh UART với máy tính của mình. Tôi đã sử dụng bộ chuyển đổi USB-RS232 mà tôi đã mua ở amazon. Tôi đã áp dụng một đầu nối cho mô-đun BT và định tuyến nguồn điện 3, 3V và GND từ bộ chuyển đổi sang mô-đun BT. Sau đó, tôi kết nối các dòng TxD và RxD tương ứng trong chéo. TxD từ bộ chuyển đổi USB sang RxD từ mô-đun BT và ngược lại.

Tôi có một máy linux và cutecom đã qua sử dụng. Sau khi kết nối bộ chuyển đổi USB, biên dịch là "ttyUSB0". Bạn có thể tìm thấy tên biên dịch trong thư mục "/ dev" trên máy linux của mình. Đối với người dùng windows, tôi muốn giới thiệu "hterm". Thật dễ dàng để vận hành. Gõ "AT" và bạn sẽ nhận được "AT" làm phản hồi. Sau đó gõ "AT + NameSensor" để đặt tên cho mô-đun BT là "Sensor"

Bước 3: Gắn các bộ phận

Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận
Gắn các bộ phận

Cắt một miếng gỗ có kích thước phù hợp để lấy tất cả các bộ phận. Kết nối tất cả các tín hiệu như được chỉ ra trong sơ đồ. Bạn nên đặt một ống bọc silicon xung quanh dây để bảo vệ chúng. Hàn đầu cắm USB-B trên bảng điều khiển. Nó chỉ được sử dụng để cung cấp năng lượng. Cố định tất cả các bộ phận bằng vít trên đế gỗ. Cuối cùng dùng keo nóng các sợi cáp để cố định chúng trên gỗ.

Bước 4: Ghép nối

Ghép nối
Ghép nối
Ghép nối
Ghép nối

Cấp nguồn cho ứng dụng cảm biến bằng cách cắm nguồn điện USB. Đèn LED màu đỏ trên mô-đun BT sẽ bắt đầu nhấp nháy. Không cố gắng ghép nối nó với điện thoại thông minh Android của bạn. Bạn phải nhập mã pin. Đây là "1234". Sau khi nhập mã, điện thoại thông minh của bạn sẽ được ghép nối với mô-đun BT.

Bước 5: Phần mềm

Tôi thích viết ứng dụng Android trên chính nền tảng mục tiêu. nó giúp bạn tiết kiệm khỏi tất cả những thứ mà bạn phải quan tâm nếu bạn đang làm việc với Android Studio. Tôi đã tìm ra ba công cụ phát triển phù hợp trên chính Android

  • Mintoris Cơ bản. Một trình thông dịch Cơ bản với một bộ lệnh phong phú để điều chỉnh hầu hết mọi thứ trên Android. Bạn có thể tạo lối tắt cho ứng dụng của mình. Mintoris basic không chứa trình biên dịch. Vì vậy, chắc hẳn bạn đã cài đặt Mintoris trên mọi thiết bị đang sử dụng. Nhưng bạn chỉ phải trả tiền cho nó một lần (khoảng 7 €)
  • Căn bản! Trình biên dịch và thông dịch cơ bản cực tốt (tiện ích bổ sung cho một số €). Hầu như kết nối với mọi thứ trong Android và bạn có thể biên dịch các ứng dụng thực để phân phối chúng mà không cần có Basic! trên thiết bị đích. Cơ bản thật đáng buồn! thiếu các chức năng biểu đồ sơ đồ tuyệt vời của Mintoris
  • AIDE là một IDE bán chuyên nghiệp để thực hiện phát triển Android trong java trên Android. Với AIDE, bạn có sự linh hoạt tối đa nhưng bạn cần phải học java. AIDE có chi phí hàng năm khoảng 50 €

Tôi đã chọn Mintoris. Trong phần này, tôi sẽ không cung cấp cho bạn hướng dẫn lập trình trong Mintoris mà chỉ mô tả ngắn gọn về các khối chức năng

Trong phần sau, ba mảng được khai báo cho hai đường dữ liệu cảm biến và dấu thời gian tương ứng. Dữ liệu dấu thời gian được sử dụng để gắn nhãn trục x của đường chéo. Sodial xuất ra hai luồng dữ liệu, mỗi luồng được chỉ định cho một kích thước hạt đặc biệt. Hai mảng dữ liệu bụi nhận các giá trị này.

WakeLock một phần

Màu văn bản 100, 75, 10

TextColorA 50, 50, 50

TextAlign 0

TextSize 24

CLS

Cửa sổ bật lên "Máy đo cảm biến bụi (c) ARJ 2017"

Global DustData (), DustDataF (), timeStamp () Global index, choice, maxData, fileName $

Dim timeStamp (59)

Bụi mờData (59)

Bụi mờDataF (59)

Dim Menu $ (4) = "tối đa 100 bộ dữ liệu", "tối đa 1000 bộ dữ liệu", "tối đa 5000 bộ dữ liệu", "tối đa 10000 bộ dữ liệu", "Thoát"

'Init các mảng

Đối với i = 0 đến 59

DustData (i) = 0

DustDataF (i) = 0

timeStamp (i) = i

Tiếp theo tôi

Tiếp theo, một menu Danh sách được định cấu hình. Điều này cho phép người dùng lựa chọn kích thước dữ liệu tối đa để thu thập. Đây chỉ là một công tắc an toàn để ngăn điện thoại thông minh hút vô số dữ liệu. Chức năng BTgetPairs $ () trả lại một danh sách với tất cả các thiết bị được ghép nối trên thiết bị android, tên và địa chỉ BT của chúng.

L ist Menu $ (), lựa chọn

'Chọn số lượng tối đa nếu dữ liệu được lưu trữ

runLevel = 1

Lựa chọn sự lựa chọn

Trường hợp 0 maxData = 100

Trường hợp 1 maxDate = 1000

Trường hợp 2 maxData = 5000

Trường hợp 3 maxData = 10000

Trường hợp 4 maxData = 0

Kết thúc Lựa chọn

'' Kết nối cảm biến

cặp mờ $ (0)

cặp $ () = BTGetPairs $ ()

Nếu cặp $ (0) = "none" Thì

In "Không tìm thấy thiết bị được ghép nối nào. BT đã được bật chưa?" In "Chương trình đã chấm dứt"

Kết thúc

Endif

Danh sách cặp $ (), thiết bị $

tên $ = ItemExtract $ (thiết bị $, 0)

địa chỉ $ = ItemExtract $ (thiết bị $, 1)

BTConnect 1, địa chỉ $

'Chờ kết nối

Tiến trình BẬT

In "Đang cố gắng kết nối với"; địa chỉ $

Đối với i = 1 đến 20

Tiến trình i / 2

Nếu BTGetstate (1) = 4 thì hãy thoát ra để đợi 1000

Tiếp theo tôi

Tiến độ TẮT

'Khi kết nối thành công với thiết bị BT

If BTGetState (1) = 4 Sau đó In "Đã kết nối" Khác In "Không thể kết nối với"; tên $

In "Chương trình đã chấm dứt"

Kết thúc

Endif

Khối tiếp theo hiển thị yêu cầu dữ liệu. Đối với mỗi phiên dữ liệu, một tệp được tự động mở và được đặt tên theo ngày và giờ. Sau đó, vòng lặp đang đọc dữ liệu cảm biến. Dữ liệu được đóng gói trong một số byte. Một tập hợp các byte được xác định bởi hai ký tự ASCII 170 và 171. Dữ liệu sau được tổ chức lại và điền vào các mảng bụi

Đồ họa đang bật

'Mở tệp dữ liệu để viết

fileName $ = FormatTime $ (t, "yyyy-MM-dd-kk-mm-ss") + ".dat"

Mở 1, fileName $, "w +" In "Tệp dữ liệu đã mở"; fileName $ Writeln 1, FormatTime $ (Time (), "yy-MM-dd")

Writeln 1, "Bụi thời gian 2,5 Bụi 10"

'Điền vào mảng với dữ liệu đo được

dữ liệu $ = "" gói $ = ""

chỉ số = 0

Do trong khi maxData> 0

BTRead 1, gói $, 10

dữ liệu $ = dữ liệu $ + gói tin $

Nếu Len (data $)> = 10 Thì

Nếu (ASCII (Trái $ (dữ liệu $, 1)) = 170) & (ASCII (Phải $ (dữ liệu $, 1)) = 171) Thì

DustDataF (chỉ mục) = ASCII (Giữa $ (dữ liệu $, 2, 1))

DustDataF (index) = (DustDataF (index) + 256 * ASCII (Mid $ (data $, 3, 1))) / 10

DustData (chỉ mục) = ASCII (Mid $ (data $, 4, 1))

DustData (index) = (DustData (index) + 256 * ASCII (Mid $ (data $, 5, 1))) / 10

Writeln 1, FormatTime $ (Time (), "kk: mm: ss") + "" + Str $ (DustDataF (index)) + "" + Str $ (DustData (index))

dữ liệu $ = ""

maxData = maxData-1

index = chỉ mục + 1

Nếu chỉ mục> 59 Thì chỉ mục = 0

DustData (chỉ mục) = 0

DustDataF (chỉ mục) = 0

Endif

Endif

DrawGraph ()

Chờ 100

Vòng

Đóng 1

Đồ họa Tắt

CLS Print "Chương trình đã chấm dứt"

Kết thúc

Phần cuối cùng là một chương trình con được gọi sau mỗi lần nhận dữ liệu. Nó xóa màn hình, vẽ lại sơ đồ với dữ liệu thực tế được lưu trữ trong mảng bụi và dấu thời gian.

'Vẽ các tọa độ, nhãn, dấu tích và cả các đường cong dữ liệu

Sub DrawGraph ()

'Ở chế độ Đồ họa, màn hình chuyển sang màu hiện tại

Màu 0, 0, 0

CLS

Màu 0, 0, 100

'Đặt màu đồ họa được sử dụng để vẽ các đường lưới

Màu văn bản 100, 100, 100, 50

'TextColor là màu của tiêu đề chính của lưới

TextColorA 100, 100, 100

'TextColorA được sử dụng cho tiêu đề Axis và chú thích lưới.

'Đặt kích thước của văn bản tiêu đề trục

'Tiêu đề chính của lưới có kích thước gấp 2 lần kích thước này

TextSize 20

FixDecimal 0

'Đặt để hiển thị 2 chữ số thập phân

PadDigits 2

'Vẽ lưới cho biểu đồ' Đặt phạm vi và tiêu đề của X & Y

Trục AxisX 0, 59, "Thời gian / s"

TrụcY 0, 10000, "ug / m3"

Lưới 3, "Nồng độ bụi"

'Vẽ đồ thị bụi

Màu 100, 0, 0

GraphXY timeStamp (), DustDataF ()

Màu 0, 100, 0

GraphXY timeStamp (), DustData ()

Màu văn bản 100, 0, 0

DrawText "PM2.5", 30, Int (ScreenY () - 60), 90, 1

Màu văn bản 0, 100, 0

DrawText "PM10", 30, Int (ScreenY () - 150), 90, 1

Màu văn bản 100, 100, 100, 50

Trở lại

Tải mã nguồn tại đây

Bước 6: Kiểm tra

Image
Image
Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm

Bật nguồn cảm biến và khởi động ứng dụng. Từ danh sách các thiết bị được ghép nối, hãy chọn một thiết bị có tên "Cảm biến". Sau khi kết nối cảm biến, màn hình sẽ bắt đầu hiển thị dữ liệu. Đồng thời tệp dữ liệu được cấp phát. Sau khi kết thúc thời trang, bạn có thể sử dụng GnuPlot để hiển thị dữ liệu. Sử dụng tệp "Test.gp" trong GnuPlot để định cấu hình GnuPlot để hiển thị tệp dữ liệu có tên "Test.dat". Bạn cũng có thể tìm thấy nó ở đây

Xem video để biết thêm chi tiết và thử nghiệm. Chúc bạn có nhiều niềm vui và nhiều ý tưởng hơn nữa!

Đề xuất: