Мазмуну:

Androidдеги содалык чаң сенсору: 6 кадам
Androidдеги содалык чаң сенсору: 6 кадам

Video: Androidдеги содалык чаң сенсору: 6 кадам

Video: Androidдеги содалык чаң сенсору: 6 кадам
Video: Как на Android ЗАРАБАТЫВАТЬ Деньги 2024, Ноябрь
Anonim
Androidдеги содалык чаң сенсору
Androidдеги содалык чаң сенсору

Бир жыл мурун менин бир досум экологиялык мониторинг боюнча дем алыш күндөрү семинар өткөрдү. Семинардын максаты - чаңдын концентрациялык карталарын тез -тез жаңырткан кээ бир серверге өлчөө маалыматын коюу үчүн малина пи тактасына туташкан чаң сенсорун куруу. Менин досум сенсордук маалыматты смартфонунан түз мониторинг жүргүзүү жана каттоо үчүн алуу мүмкүнчүлүгү барбы деп сурады. Ошентип, мен маалымат баракчасы үчүн интернетти каздым жана сенсордун 9600Baud 8N1 протоколу бар жөнөкөй UART интерфейси бар экенин көрдүм. Бирок UARTти смартфонго кантип туташтыруу керек? Ооба, бул оңой. Мен жөн гана андроидде эмуляцияланган компорт камсыз кылган кичинекей Bluetooth модулдарынын бирин колдонууга туура келди. Эми кантип жасаганымды көрүңүз.

1 -кадам: Сизге эмне керек

Сизге эмне керек
Сизге эмне керек
Сизге эмне керек
Сизге эмне керек

Сизге төмөнкү бөлүктөр керек

  • Зымдар менен Sodial интерфейси үчүн JST XH 7-пин туташтыргычы. Мен өзүмдү Ebayден сатып алдым.
  • UART туташтыргычы менен шайкеш келген HC05 же 06 Bluetooth модулу
  • TTL деңгээлиндеги интерфейси бар USB-сериялык конвертер. Биз муну BT-модулуна уникалдуу ат берүү үчүн колдонобуз
  • Sodial SDS011 чаң сенсору. Мен өзүмдү Ebayден алдым
  • вербордун бир бөлүгү
  • USB-B туташтыргычы
  • зым
  • Баарын монтаждай турган жыгач

Андан кийин сизге жөнөкөй куралдар керек болот:

  • Жыгачты кесүү үчүн бакча
  • пинцет
  • темир жана ширетүүчү
  • зым кескич
  • Ысык желим мылтык
  • 8мм кремний жеңинин бир бөлүгү (сүрөттө жок)

Sodial SDS011 маалымат барагын бул жерден Sodial SDS011 маалымат барагын жүктөп алсаңыз болот

2 -кадам: Bluetooth модулун даярдоо

Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо
Bluetooth модулун даярдоо

BT-Module TTL деңгээлиндеги UART интерфейсине ээ. Аны байыркы убакта интернет модемдериндей кылып "AT" буйруктары менен кайра конфигурациялоого болот. Аны машинаңыздагы терминалдык программага туташтыруу үчүн UARTды компьютериңизге ыңгайлаштырышыңыз керек. Мен Amazonдо сатып алган USB-RS232 конвертерин колдондум. Мен BT-модулуна туташтыргычты колдонуп, 3, 3V электр менен жабдууну жана GNDди конвертерден BT-модулуна багыттадым. Андан кийин мен тийиштүү TxD жана RxD линияларын кроссоверге туташтырдым. USB-конвертерден TxD BT-модулдан RxDге жана тескерисинче.

Менде Linux машинасы бар жана cutecom колдонгон. USB-конвертерин туташтыргандан кийин компорт "ttyUSB0" болгон. Компьютердин аталыштарын Linux машинаңыздагы "/dev" каталогунан таба аласыз. Windows колдонуучулары үчүн мен "hterm" сунуштайт элем. Иштетүү оңой. "AT" териңиз жана жооп катары "AT" алышыңыз керек. Андан кийин "AT+NameSensor" терип, BT-модулуна "Sensor" аталышын бериңиз

3 -кадам: Бөлүктөрдү орнотуу

Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо
Бөлүктөрдү монтаждоо

Жыгачтын бир бөлүгүн бардык бөлүктөрүн алууга ылайыктуу өлчөмдө кесип алыңыз. Бардык сигналдарды схемада көрсөтүлгөндөй туташтырыңыз. Зымдарды коргоо үчүн аларды кремний жең менен жабуу жакшы идея. Перфборттогу USB-B сайгычын туташтырыңыз. Бул жөн гана электр менен камсыздоо үчүн колдонулат. Бардык бөлүктөрдү жыгач базага бурамалар менен бекитүү. Акыры кабелдерди жыгачка бекитүү үчүн ысык клей.

4 -кадам: Жупташуу

Жупташуу
Жупташуу
Жупташуу
Жупташуу

Сенсор тиркемесин USB кубаттоо тармагын туташтырып күйгүзүңүз. BT-модулундагы кызыл LED күйө баштайт. Андроид смартфонуңуз менен жупташууга аракет кылбаңыз. Сиз пин кодду киргизишиңиз керек. Бул "1234". Кодду киргизгенден кийин смартфонуңуз BT-модулу менен жупташуусу керек.

5 -кадам: Программалык камсыздоо

Мен Android тиркемелерин максаттуу платформанын өзүнө жазганды жакшы көрөм. бул сизди Android Studio менен иштеп жаткан болсоңуз, эмуляциялоочу нерселердин баарынан сактайт. Мен Androidдин өзүнө ылайыктуу үч өнүгүү куралын таптым

  • Mintoris Basic. Негизги котормочу, буйруктардын бай топтому менен, андроиддеги дээрлик бардык нерселерди карап чыгууга. Колдонмолоруңуз үчүн кыска жолдорду түзө аласыз. Mintoris basicде компилятор жок. Демек, сиз колдонуп жаткан ар бир түзмөккө Mintoris орнотуш керек. Бирок сиз бир гана жолу төлөшүңүз керек (болжол менен 7 €)
  • Негизги! Абдан жакшы Негизги котормочу жана компилятор (кээ бир € үчүн кошумча). Дээрлик баардык нерселерди андроидке илип койсоңуз болот жана реалдуу тиркемелерди аларды Basic жок эле жайылтуу үчүн түзө аласыз! максаттуу түзмөктө. Тилекке каршы Негизги! Mintorisтин эң сонун диаграмма функциялары жок
  • AIDE - бул андроидде javaда андроид иштеп чыгуу үчүн жарым профессионалдуу IDE. AIDE менен сизде эң ийкемдүүлүк бар, бирок сиз Javaны үйрөнүшүңүз керек. AIDEдин жылдык чыгымдары болжол менен 50 €

Мен Минтористи тандадым. Бул бөлүмдө мен сизге Mintorisте программалоо боюнча окуу куралын бербейм, бирок функционалдык блоктордун кыскача сүрөттөмөсүн берем

Кийинки бөлүктө эки сенсор маалымат линиялары жана тиешелүү убакыт белгилери үчүн үч массив жарыяланган. Убакыт белгилери диаграмманын х огун белгилөө үчүн колдонулат. Sodial атайын бөлүкчө өлчөмү үчүн көрсөтүлгөн эки маалымат агымын чыгарат. Эки dustdata-массивдери бул баалуулуктарды алышат.

WakeLock жарым -жартылай

TextColor 100, 75, 10

TextColorA 50, 50, 50

TextAlign 0

TextSize 24

CLS

Калкып чыгуучу "Чаңды аныктоочу метр (c) ARJ 2017"

Global dustData (), dustDataF (), timeStamp () Глобалдык индекс, тандоо, maxData, fileName $

Түнкү убакыт Маркасы (59)

Dim Dust (59)

DimaF (59)

Dim Меню $ (4) = "макс. 100 маалымат топтому", "эң көп. 1000 маалымат топтому", "эң көп. 5000 маалымат топтому", "эң көп. 10000 маалымат топтому", "Чыгуу"

'Массивдерди баштаңыз

I = 0ден 59га чейин

dustData (i) = 0

dustDataF (i) = 0

timeStamp (i) = i

Кийинки i

Андан кийин Тизме менюсу конфигурацияланат. Бул колдонуучуга чогултуу үчүн маалыматтын максималдуу өлчөмүн тандоо мүмкүнчүлүгүн берет. Бул жөн эле смартфондун чексиз маалыматтарды соруп алуусун алдын алуу үчүн коопсуздук которгуч. BTgetPaired $ () функциялары андроид түзмөгүндөгү бардык жупташкан түзмөктөрдүн тизмесин, алардын аттарын жана BT-дарегин кайтарып берет.

L меню $ (), тандоо

'Маалыматтар сактала турган болсо, максималдуу сумманы тандаңыз

runLevel = 1

Тандоону тандоо

Case 0 maxData = 100

Case 1 maxDate = 1000

Case 2 maxData = 5000

Case 3 maxData = 10000

Case 4 maxData = 0

Тандоону бүтүрүү

'' Сенсорду туташтыруу

күңүрт жуп $ (0)

жуп $ () = BTGetPaired $ ()

Эгерде $ (0) = "none" жуп болсо

Басып чыгаруу "Жупташкан түзмөктөр табылган жок. BT күйгүзүлгөнбү?" "Программа токтотулду" басып чыгаруу

Аяктоо

Endif

$ () Тизмеси, $ түзмөгү

аты $ = ItemExtract $ (түзмөк $, 0)

$ = ItemExtract $ (түзмөк $, 1)

BTConnect 1, $ дареги

'Байланышты күтө туруңуз

Progress ON

"Кошулууга аракет кылууда" басып чыгаруу; $ дареги

I = 1ден 20га чейин

Progress i/2

Эгерде BTGetstate (1) = 4 анда 1000 күтө туруңуз

Кийинки i

Прогресс ӨЧҮК

Ийгиликке жеткенде BT түзмөгүнө туташыңыз

Эгерде BTGetState (1) = 4 анда "Байланышкан" Басып чыгарыңыз Башка Басма "Кошула алган жок"; аты $

"Программа токтотулду" басып чыгаруу

Аяктоо

Endif

Кийинки блок маалыматтардын жандануусун көрсөтөт. Ар бир маалымат сеансы үчүн файл автоматтык түрдө ачылат жана убакыттын жана датанын атынан аталат. Андан кийин цикл сенсордун маалыматын окуп жатат. Маалыматтар бир нече байтка топтолгон. Байттын жыйындысы 170 жана 171 эки ASCII белгилери менен аныкталат. Төмөнкү маалыматтар кайра уюшулган жана чаң массивдерине толтурулган.

Графика күйүк

Жазуу үчүн маалымат файлын ачыңыз

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

Open 1, fileName $, "w+" Print "Opened datafile"; fileName $ Writeln 1, FormatTime $ (Time (), "yy-MM-dd")

Writeln 1, "Time Dust2.5 Dust10"

'Массивди өлчөнгөн маалыматтар менен толтуруңуз

маалымат $ = "" пакет $ = ""

индекс = 0

MaxData> 0 кылып жатканда

BTR 1, пакет $, 10

маалымат $ = маалымат $+пакет $

Эгерде Лен (маалымат $)> = 10 Анда

Эгерде (ASCII (Сол $ (маалымат $, 1)) = 170) & (ASCII (Оң $ (маалымат $, 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

Эгерде индекс> 59 Анда индекс = 0

dustData (индекс) = 0

dustDataF (индекси) = 0

Endif

Endif

DrawGraph ()

Күтө тур 100

Loop

Жабуу 1

Графика өчүк

CLS Print "Программа токтотулду"

Аяктоо

Акыркы бөлүгү - бул ар бир маалыматты кабыл алгандан кийин чакырылган чакан программа. Бул экранды тазалайт, чаңда жана убакыттын шкаласында сакталган чыныгы маалыматтар менен диаграмманы кайра түзөт.

'Координаттарды, энбелгилерди, кенелерди жана ошондой эле маалыматтардын ийри сызыгын тартыңыз

Sub DrawGraph ()

'Графика режиминде экран учурдагы түскө тазаланат

Түс 0, 0, 0

CLS

Түс 0, 0, 100

'Графикалык түстү тор сызыктарын тартуу үчүн колдонуңуз

TextColor 100, 100, 100, 50

'TextColor - бул тордун башкы аталышынын түсү

TextColorA 100, 100, 100

'TextColorA Axis аталыштары жана торчо аннотациялары үчүн колдонулат.

'Ок огунун аталышынын текстинин өлчөмүн коюңуз

Тордун башкы аталышы бул өлчөмдөн 2 эсе чоң

TextSize 20

FixDecimal 0

'2 ондук орунду көрсөтүүнү коюңуз

PadDigits 2

'График үчүн торду тартыңыз' X & Y диапазонун жана аталышын коюңуз

Axis AxisX 0, 59, "Time/s"

AxisY 0, 10000, "ug/m3"

Grid 3, "Чаңдын топтолушу"

'Чаңдын графиктерин тартыңыз

Түс 100, 0, 0

GraphXY timeStamp (), dustDataF ()

Түс 0, 100, 0

GraphXY timeStamp (), dustData ()

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

Return

Булак кодун бул жерден жүктөп алыңыз

6 -кадам: Тест

Image
Image
Тест
Тест
Тест
Тест
Тест
Тест

Сенсорду иштетип, колдонмону иштетиңиз. Жупташкан түзмөктөрдүн тизмесинен "Сенсор" деп аталган бирин тандаңыз. Сенсорду туташтыргандан кийин экран маалыматты көрсөтө баштайт. Ошол эле учурда маалымат файлы бөлүштүрүлөт. Мода бүткөндөн кийин, маалыматтарды көрсөтүү үчүн GnuPlot колдонсоңуз болот. GnuPlotту "Test.dat" аттуу маалымат файлын көрсөтүү үчүн конфигурациялоо үчүн "Test.gp" файлын колдонуңуз. Сиз муну бул жерден да таба аласыз

Көбүрөөк маалымат жана тестирлөө үчүн видеону караңыз. Көңүлүңүз көтөрүлсүн жана дагы көптөгөн идеялар болсун!

Сунушталууда: