สารบัญ:

Sodial Dust Sensor บน Android: 6 ขั้นตอน
Sodial Dust Sensor บน Android: 6 ขั้นตอน

วีดีโอ: Sodial Dust Sensor บน Android: 6 ขั้นตอน

วีดีโอ: Sodial Dust Sensor บน Android: 6 ขั้นตอน
วีดีโอ: Fix- Proximity Sensor issue on Any Android! [Updated] 2024, กรกฎาคม
Anonim
เซ็นเซอร์วัดฝุ่นละอองบน Android
เซ็นเซอร์วัดฝุ่นละอองบน Android

หนึ่งปีที่ผ่านมาเพื่อนของฉันมีการประชุมเชิงปฏิบัติการเกี่ยวกับการตรวจสอบด้านสิ่งแวดล้อมในช่วงสุดสัปดาห์ เป้าหมายของการประชุมเชิงปฏิบัติการคือการสร้างเซ็นเซอร์วัดฝุ่นที่เชื่อมต่อกับบอร์ด Raspberry Pi เพื่อใส่ข้อมูลการวัดบนเซิร์ฟเวอร์บางเครื่องที่มีแผนที่ความเข้มข้นของฝุ่นที่อัปเดตบ่อยๆ เพื่อนของฉันถามว่ามีวิธีรับข้อมูลเซ็นเซอร์บนสมาร์ทโฟนของเขาโดยตรงเพื่อตรวจสอบและบันทึกหรือไม่ ดังนั้นฉันจึงขุดอินเทอร์เน็ตเพื่อหาแผ่นข้อมูลและเห็นว่าเซ็นเซอร์มีส่วนต่อประสาน UART อย่างง่ายพร้อมโปรโตคอล 9600Baud 8N1 แต่จะเชื่อมต่อ UART กับสมาร์ทโฟนได้อย่างไร นั่นเป็นเรื่องง่าย ฉันแค่ต้องใช้โมดูล Bluetooth เล็ก ๆ ที่มีอยู่ทั่วไปตัวใดตัวหนึ่งที่ให้การเลียนแบบบน Android ตอนนี้ดูว่าฉันทำมันได้อย่างไร

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ

คุณต้องมีชิ้นส่วนดังต่อไปนี้

  • ขั้วต่อการผสมพันธุ์ JST XH 7 พินสำหรับอินเทอร์เฟซ Sodial พร้อมสายไฟ ฉันซื้อของฉันบนอีเบย์
  • โมดูลบลูทูธ HC05 หรือ 06 เข้ากันได้กับขั้วต่อ UART
  • ตัวแปลงอนุกรม USB พร้อมอินเทอร์เฟซระดับ TTL เราใช้สิ่งนี้เพื่อให้โมดูล BT มีชื่อเฉพาะ
  • เซ็นเซอร์ฝุ่น Sodial SDS011 ฉันได้ของฉันจาก Ebay
  • เวโรบอร์ดชิ้นหนึ่ง
  • ขั้วต่อ USB-B
  • ลวด
  • แผ่นไม้ติดทุกอย่าง

คุณจะต้องใช้เครื่องมือง่ายๆ:

  • เลื่อยสำหรับตัดไม้
  • แหนบ
  • หัวแร้งและหัวแร้ง
  • เครื่องตัดลวด
  • ปืนกาวร้อน
  • ปลอกซิลิโคนขนาด 8 มม. (ไม่อยู่ในภาพ)

คุณสามารถดาวน์โหลดเอกสารข้อมูล Sodial SDS011 ได้ที่นี่ เอกสารข้อมูล Sodial SDS011

ขั้นตอนที่ 2: การเตรียมโมดูล Bluetooth

กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ
กำลังเตรียมโมดูลบลูทูธ

BT-Module มีอินเทอร์เฟซ UART พร้อมระดับ TTL สามารถกำหนดค่าใหม่ได้ด้วยคำสั่ง "AT" เหมือนที่เราทำกับโมเด็มอินเทอร์เน็ตในสมัยโบราณ หากต้องการเชื่อมต่อกับโปรแกรมเทอร์มินัลในเครื่องของคุณ คุณต้องปรับ UART ให้เข้ากับคอมพิวเตอร์ของคุณ ฉันใช้ตัวแปลง USB-RS232 ที่ซื้อมาจาก Amazon ฉันใช้ตัวเชื่อมต่อสำหรับโมดูล BT และกำหนดเส้นทางแหล่งจ่ายไฟ 3, 3V และ GND จากตัวแปลงไปยังโมดูล BT จากนั้นฉันก็เชื่อมต่อเส้น TxD และ RxD ตามลำดับในครอสโอเวอร์ TxD จากตัวแปลง USB เป็น RxD จากโมดูล BT และในทางกลับกัน

ฉันมีเครื่องลินุกซ์และใช้ cutecom หลังจากเชื่อมต่อตัวแปลง USB แล้ว comport คือ "ttyUSB0" คุณสามารถค้นหาชื่อ comport ได้ในไดเร็กทอรี "/ dev" บนเครื่อง linux ของคุณ สำหรับผู้ใช้ windows ฉันขอแนะนำ "hterm" ใช้งานง่าย พิมพ์ "AT" และคุณควรได้รับ "AT" เป็นคำตอบ จากนั้นพิมพ์ "AT+NameSensor" เพื่อให้โมดูล BT ชื่อ "Sensor"

ขั้นตอนที่ 3: การติดตั้งชิ้นส่วน

การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน
การติดตั้งชิ้นส่วน

ตัดไม้ให้ได้ขนาดที่เหมาะสมกับการตัดชิ้นส่วนทั้งหมด เชื่อมต่อสัญญาณทั้งหมดตามที่ระบุในแผนผัง เป็นความคิดที่ดีที่จะใส่ปลอกซิลิโคนไว้รอบสายไฟเพื่อป้องกันสายไฟ ประสานปลั๊ก USB-B บนบอร์ดเสริม ใช้สำหรับจ่ายไฟเท่านั้น แก้ไขทุกส่วนด้วยสกรูบนฐานไม้ ในที่สุดกาวร้อนสายเคเบิลเพื่อแก้ไขบนไม้

ขั้นตอนที่ 4: การจับคู่

จับคู่
จับคู่
จับคู่
จับคู่

จ่ายไฟให้กับแอปพลิเคชันเซ็นเซอร์โดยเสียบแหล่งจ่ายไฟ USB ไฟ LED สีแดงบนโมดูล BT จะเริ่มกะพริบ ไม่ต้องพยายามจับคู่กับสมาร์ทโฟน Android ของคุณ คุณต้องป้อนรหัสพิน นี่คือ "1234" หลังจากป้อนรหัส สมาร์ทโฟนของคุณควรจับคู่กับโมดูล BT

ขั้นตอนที่ 5: ซอฟต์แวร์

ฉันชอบเขียนแอพ Android บนแพลตฟอร์มเป้าหมายเอง มันช่วยคุณประหยัดจากสิ่งจำลองทั้งหมดที่คุณต้องใส่ใจหากคุณทำงานกับ Android Studio ฉันพบเครื่องมือพัฒนาที่เหมาะสมสามตัวบน Android เอง

  • มินทอริส เบสิค ล่ามพื้นฐานพร้อมชุดคำสั่งที่หลากหลายเพื่อปรับแต่งเกือบทุกอย่างบน Android คุณสามารถสร้างทางลัดสำหรับแอปของคุณได้ Mintoris basic ไม่มีคอมไพเลอร์ ดังนั้น คุณต้องติดตั้ง Mintoris บนอุปกรณ์ทุกเครื่องที่คุณใช้ แต่คุณต้องจ่ายเพียงครั้งเดียว (ประมาณ 7 ยูโร)
  • ขั้นพื้นฐาน! ล่ามและคอมไพเลอร์พื้นฐานที่ดีมาก (ส่วนเสริมสำหรับบาง€) เกือบเกี่ยวทุกอย่างใน Android และคุณสามารถรวบรวมแอพจริงเพื่อแจกจ่ายโดยไม่ต้องมีพื้นฐาน! บนอุปกรณ์เป้าหมาย เศร้าขั้นพื้นฐาน! ไม่มีฟังก์ชันแผนภูมิไดอะแกรมที่ยอดเยี่ยมของ Mintoris
  • AIDE เป็น IDE กึ่งมืออาชีพสำหรับการพัฒนา Android ใน Java บน Android ด้วย AIDE คุณจะมีความยืดหยุ่นสูงสุด แต่คุณต้องเรียนรู้เกี่ยวกับจาวา AIDE มีค่าใช้จ่ายรายปีประมาณ 50 €

ฉันเลือกมินโทริส ในส่วนนี้ฉันจะไม่ให้การสอนการเขียนโปรแกรมใน Mintoris แก่คุณ แต่เป็นคำอธิบายสั้น ๆ ของบล็อกฟังก์ชัน

ในส่วนต่อไปนี้ จะมีการประกาศอาร์เรย์สามรายการสำหรับสายข้อมูลเซ็นเซอร์สองบรรทัดและการประทับเวลาตามลำดับ ข้อมูลการประทับเวลาใช้สำหรับติดป้ายกำกับแกน x ของไดอะแกรม Sodial จะแสดงสตรีมข้อมูลสองสตรีมซึ่งแต่ละรายการระบุไว้สำหรับขนาดอนุภาคพิเศษ Dustdata-array สองตัวใช้ค่าเหล่านี้

WakeLock บางส่วน

TextColor 100, 75, 10

TextColorA 50, 50, 50

TextAlign 0

TextSize 24

CLS

ป๊อปอัป "Dust Sensor Meter (c) ARJ 2017"

Global dustData(), dustDataF(), timeStamp() ดัชนีสากล, ตัวเลือก, maxData, fileName$

เวลาสลัวแสตมป์(59)

ฝุ่นจางData(59)

ฝุ่นจางDataF(59)

Dim Menu$(4) = "max. 100 datasets", "max. 1000 data sets", "max. 5000 data sets", "max. 10000 data sets", "Exit"

'เริ่มต้นอาร์เรย์

สำหรับผม = 0 ถึง 59

ข้อมูลฝุ่น (i) = 0

dustDataF(i) = 0

timeStamp(i)=i

ต่อไปฉัน

ถัดไปมีการกำหนดค่าเมนูรายการ ซึ่งจะทำให้ผู้ใช้สามารถเลือกขนาดข้อมูลสูงสุดที่จะรวบรวมได้ นี่เป็นเพียงสวิตช์ความปลอดภัยเพื่อป้องกันไม่ให้สมาร์ทโฟนดูดข้อมูลที่ไม่มีที่สิ้นสุด ฟังก์ชัน BTgetPaired$() แสดงรายการอุปกรณ์ที่จับคู่ทั้งหมดบนอุปกรณ์ Android ชื่อและที่อยู่ BT

L รายการ Menu$(), ตัวเลือก

'เลือกจำนวนเงินสูงสุดหากข้อมูลที่จะจัดเก็บ

runLevel = 1

เลือกตัวเลือก

กรณี 0 maxData = 100

กรณีที่ 1 maxDate = 1000

กรณีที่ 2 maxData = 5000

กรณีที่ 3 maxData = 10000

กรณีที่ 4 maxData = 0

สิ้นสุดการเลือก

''เชื่อมต่อเซ็นเซอร์

คู่สลัว$(0)

คู่$() = BTGetPaired$()

ถ้าคู่$(0) = "ไม่มี" แล้ว

พิมพ์ "ไม่พบอุปกรณ์ที่จับคู่ BT เปิดอยู่หรือไม่" พิมพ์ "โปรแกรมยุติ"

จบ

Endif

รายการคู่$(), อุปกรณ์$

ชื่อ$=ItemExtract$(อุปกรณ์$, 0)

ที่อยู่$=ItemExtract$(อุปกรณ์$, 1)

BTConnect 1 ที่อยู่$

'รอการเชื่อมต่อ

ความคืบหน้า ON

พิมพ์ "กำลังพยายามเชื่อมต่อกับ ";address$

สำหรับผม = 1 ถึง 20

ความคืบหน้า i/2

ถ้า BTGetstate(1)=4 แล้วออก รอ 1000

ต่อไปฉัน

ความคืบหน้า OFF

'เมื่อสำเร็จให้เชื่อมต่อกับอุปกรณ์ BT

ถ้า BTGetState(1) = 4 ให้พิมพ์ "Connected" Else Print "ไม่สามารถเชื่อมต่อกับ ";name$

พิมพ์ "โปรแกรมยุติ"

จบ

Endif

บล็อกถัดไปแสดงการจัดซื้อข้อมูล สำหรับแต่ละเซสชันข้อมูล ไฟล์จะถูกเปิดโดยอัตโนมัติและตั้งชื่อตามเวลาและวันที่ จากนั้นลูปจะอ่านข้อมูลเซ็นเซอร์ ข้อมูลถูกบรรจุในหลายไบต์ ชุดของไบต์ระบุด้วยอักขระ ASCII สองตัว 170 และ 171 ข้อมูลต่อไปนี้ได้รับการจัดระเบียบใหม่และเติมลงในอาร์เรย์ฝุ่น

กราฟิกเปิด

'เปิดไฟล์ข้อมูลเพื่อเขียน

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

เปิด 1, fileName$, "w+" พิมพ์ "เปิด datafile ";fileName$ Writeln 1, FormatTime$(Time(), "yy-MM-dd")

Writeln 1, "ฝุ่นเวลา2.5 Dust10"

'เติมอาร์เรย์ด้วยข้อมูลที่วัดได้

data$="" แพ็กเก็ต$=""

ดัชนี=0

ทำในขณะที่ maxData > 0

BTRead 1, แพ็กเก็ต$, 10

data$=data$+แพ็คเก็ต$

ถ้า Len(data$) >= 10 แล้ว

ถ้า (ASCII(Left$(data$, 1))=170) & (ASCII(Right$(data$, 1)) = 171) แล้ว

dustDataF(ดัชนี)=ASCII(กลาง$(ข้อมูล$, 2, 1))

dustDataF(ดัชนี)=(dustDataF(ดัชนี)+256*ASCII(กลาง$(ข้อมูล$, 3, 1)))/10

dustData(ดัชนี)=ASCII(กลาง$(ข้อมูล$, 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))

ข้อมูล$=""

maxData = maxData-1

ดัชนี=ดัชนี+1

ถ้า index>59 แล้ว index=0

dustData(ดัชนี)=0

dustDataF(ดัชนี)=0

Endif

Endif

DrawGraph()

รอ 100

ห่วง

ปิด 1

กราฟิกปิด

CLS Print "โปรแกรมยุติ"

จบ

ส่วนสุดท้ายเป็นรูทีนย่อยที่เรียกหลังจากรับข้อมูลทุกครั้ง มันล้างหน้าจอ วาดไดอะแกรมใหม่ด้วยข้อมูลจริงที่จัดเก็บไว้ในอาร์เรย์การประทับเวลาและฝุ่นละออง

' วาดพิกัด ป้าย ขีด และเส้นโค้งข้อมูลด้วย

ย่อย DrawGraph()

' ในโหมดกราฟิก หน้าจอจะล้างเป็นสีปัจจุบัน

สี 0, 0, 0

CLS

สี 0, 0, 100

' กำหนดสีกราฟิกเพื่อใช้วาดเส้นกริด

TextColor 100, 100, 100, 50

'TextColor เป็นสีของชื่อหลักของตาราง

TextColorA 100, 100, 100

' TextColorA ใช้สำหรับชื่อแกนและคำอธิบายประกอบตาราง

' กำหนดขนาดของข้อความชื่อแกน

' ชื่อหลักของตารางคือ 2x ขนาดนี้

ขนาดข้อความ 20

แก้ไขทศนิยม 0

' กำหนดให้แสดงทศนิยม 2 ตำแหน่ง

PadDigits 2

' วาดตารางสำหรับกราฟ ' กำหนดช่วงและชื่อเรื่องของ X & Y

Axis AxisX 0, 59, "เวลา/วินาที"

AxisY 0, 10000, "ug/m3"

ตารางที่ 3 "ความเข้มข้นของฝุ่น"

' วาดกราฟฝุ่น

สี 100, 0, 0

GraphXY timeStamp(), ข้อมูลฝุ่นF()

สี 0, 100, 0

GraphXY timeStamp (), ข้อมูลฝุ่น ()

TextColor 100, 0, 0

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

TextColor 0, 100, 0

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

TextColor 100, 100, 100, 50

กลับ

ดาวน์โหลดซอร์สโค้ดที่นี่

ขั้นตอนที่ 6: ทดสอบ

Image
Image
ทดสอบ
ทดสอบ
ทดสอบ
ทดสอบ
ทดสอบ
ทดสอบ

เปิดเซ็นเซอร์และเริ่มแอป จากรายการอุปกรณ์ที่จับคู่ เลือกอุปกรณ์ที่ชื่อว่า "เซ็นเซอร์" หลังจากเชื่อมต่อเซ็นเซอร์แล้ว หน้าจอจะเริ่มแสดงข้อมูล ไฟล์ข้อมูลจะถูกจัดสรรพร้อมกัน หลังจากเสร็จสิ้นแฟชั่น คุณสามารถใช้ GnuPlot เพื่อแสดงข้อมูลได้ ใช้ไฟล์ "Test.gp" ใน GnuPlot เพื่อกำหนดค่า GnuPlot สำหรับแสดงไฟล์ข้อมูลชื่อ "Test.dat" คุณสามารถหาได้ที่นี่

ดูวิดีโอสำหรับรายละเอียดเพิ่มเติมและการทดสอบ มาสนุกและได้ไอเดียอีกมากมาย!

แนะนำ: