Բովանդակություն:

DIY անտառահատման ջերմաչափ 2 սենսորով. 3 քայլ (նկարներով)
DIY անտառահատման ջերմաչափ 2 սենսորով. 3 քայլ (նկարներով)

Video: DIY անտառահատման ջերմաչափ 2 սենսորով. 3 քայլ (նկարներով)

Video: DIY անտառահատման ջերմաչափ 2 սենսորով. 3 քայլ (նկարներով)
Video: Լաստիվերի ապօրինի անտառահատումները 2024, Հուլիսի
Anonim
DIY անտառահատման ջերմաչափ 2 սենսորով
DIY անտառահատման ջերմաչափ 2 սենսորով
DIY անտառահատման ջերմաչափ 2 սենսորով
DIY անտառահատման ջերմաչափ 2 սենսորով

Այս նախագիծը իմ նախորդ ՝ «DIY անտառահատումների ջերմաչափ» նախագծի կատարելագործումն է: Այն գրանցում է ջերմաստիճանի չափումները միկրո SD քարտի վրա:

Սարքավորման փոփոխություններ

Ես իրական ժամանակի ժամացույցի մոդուլին ավելացրեցի DS18B20 ջերմաստիճանի տվիչ, որտեղ տպագիր տպատախտակին այս սարքի համար կա դրույթ. և ավելացրեց համապատասխան մետաղալարը RTC- ի «DS» պինից Arduino- ի D2- ին:

Softwareրագրային ապահովման փոփոխություններ

Հետո ես ավելացրի և փոփոխեցի ծրագրակազմը: Հիմնական փոփոխություններն են.

LCD էկրանը ցույց է տալիս երկու ջերմաստիճան `« In »և« Out »:

SD քարտի վրա գրանցված տեղեկամատյաններն ունեն երկու ջերմաստիճանի դաշտ ՝ «ջերմաստիճանը ներսում» և «ջերմաստիճանը դուրս է»:

SD քարտի ավելի երկար գրանցման պատճառով EEPROM- ի աշխատանքային բուֆերներն ավելի մեծ էին, և արդյունքում ես սկսեցի հիշողության հետ կապված խնդիրներ ունենալ: Ես մի շարք փոփոխություններ կատարեցի ՝ ուղղված դինամիկ հիշողության օգտագործումը նվազեցնելու համար, ներառյալ բոլոր տողերի համար բնույթի զանգվածների օգտագործումը ՝ String օբյեկտի փոխարեն:

Softwareրագրային ապահովման այն մասը, որը ստանում է ջերմաստիճանը, ունի հիմնական փոփոխություններ, որոնցից շատերը կապված են որոշելու, թե որ զոնդը «ներսում է» և որն է «դուրս»: Այս նույնականացումը հիմնականում ավտոմատ է: Եթե ինչ -ինչ պատճառներով զոնդերը միացված են, այն կարող է շտկվել ՝ անջատելով «դուրս» զոնդը, այնուհետև նորից միացնելով այն: Ես ինքս չեմ զգացել այս շրջադարձը: Merրագրավորողը կամ օգտագործողը կարիք չունեն մուտքագրել սենսորային հասցեներ, ծրագրակազմն ինքն է հայտնաբերում ջերմաստիճանի տվիչի հասցեները:

Ըստ իմ կատարած փորձարկումների ՝ ջերմաստիճանի զոնդերի նույնականացումը և SD քարտի հեռացման և փոխարինման պատասխանը դեռ անխափան աշխատում են:

Քայլ 1: Softwareրագրաշարի մշակում

Այս քայլը ձեզ տալիս է ավարտված ծրագրի ամբողջական ծրագրակազմ: Ես այն կազմել եմ ՝ օգտագործելով Arduino IDE 1.6.12: Այն օգտագործում է 21, 400 բայթ ծրագրային հիշողություն (69%) և 1, 278 բայթ դինամիկ հիշողություն (62%):

Ես մեկնաբանություններ եմ տեղադրել օրենսգրքում այն հույսով, որ պարզ կդառնա, թե ինչ է կատարվում:

Քայլ 2. Աշխատեք երկու ջերմաստիճանի տվիչների հետ - մանրամասներ

Այս ծրագրաշարը օգտագործում է «OneWire» գրադարանը: Այն չի օգտագործում որևէ «DallasTemperature» կամ նմանատիպ գրադարաններ: Փոխարենը ջերմաստիճանի տվիչներին տրվող հրամանները և տվյալները կատարվում են էսքիզով և դրանք կարելի է տեսնել և հասկանալ բավականին հեշտությամբ: Ես գտա OneWire գրադարանի հրամանների օգտակար ցուցակը

www.pjrc.com/teensy/td_libs_OneWire.html

Երբ կան երկու (կամ ավելի) ջերմաստիճանի տվիչներ, անհրաժեշտ է դառնում որոշել, թե որն է այն:

Իմ երկու սենսորները կանչեցի «ներս» և «դուրս», ինչը բնորոշ է առևտրային ստորաբաժանումներին, որոնց ցուցիչն ունի ցուցիչ, որը սովորաբար «ներսում» է, իսկ մյուս սենսորը մալուխի վրա, որպեսզի այն տեղադրվի մյուս կողմում: արտաքին պատից և այդպիսով լինել «դրսից»:

Տարբեր զոնդերի նույնականացման սովորական մոտեցումն է `հայտնաբերել սարքի հասցեները և դրանք տեղադրել ծրագրակազմում` նույնականացման պիտակի հետ միասին: Մյուս բոլոր նախագծերը, որոնք ես տեսել եմ, օգտագործում են այս մոտեցումը ՝ անկախ նրանից նրանք օգտագործում են DallasTemperature գրադարանը, թե ոչ:

Իմ մտադրությունն այն էր, որ ծրագրակազմը պետք է ինքնաբերաբար ճանաչի սենսորները և ճիշտ բաշխի դրանք «ներսում» և «դուրս» -ում: Դա բավականին հեշտ է անել ՝ դրանք տեղադրելով առանձին Arduino կապում: Այս նախագծում A0- ից A3- ը և A6- ը և A7- ը բոլորը չօգտագործված են, ուստի դրանցից մեկը կարող էր օգտագործվել այս դեպքում: Այնուամենայնիվ, ինձ հաջողվեց ունենալ նույնականացման ավտոմատ աշխատանքը սենսորների հետ, միևնույն OneWire ավտոբուսում:

Այն աշխատում է այսպես.

OneWire գրադարանը ունի հրաման «OneWireObject.search (հասցե)», որտեղ «հասցեն» 8 բայթ զանգված է, իսկ «OneWireObject» - ը ՝ նախկինում ստեղծված OneWire օբյեկտի օրինակի անվանում: Այն կարող է ունենալ ցանկացած անուն, որը Ձեզ դուր է գալիս: Իմը կոչվում է «դս»: Երբ տալիս եք այս «որոնման» հրամանը, OneWire գրադարանը որոշակի ազդանշաններ է տալիս մեկ մետաղալար ավտոբուսի վրա: Եթե գտնի արձագանքող սենսոր, այն վերադարձնում է «TRUE» բուլյան արժեքը և լրացնում «հասցե» զանգվածը ՝ սենսորի 8 բայթ եզակի նույնացուցիչով: Այս նույնացուցիչը ներառում է ընտանեկան ծածկագիրը (սկզբում) և չեկի գումարը (վերջում): Միջևում կա 6 բայթ, որոնք յուրահատուկ նույնականացնում են սենսորը իր ընտանիքի ներսում:

Ամեն անգամ, երբ այս հրամանը տրվում է, ստացվում է մեկ արդյունք (հասցեն և վերադարձը UEՇՄԱՐՏՈԹՅՈՆ) ՝ շրջանցելով OneWire ավտոբուսի բոլոր սարքերը: Երբ յուրաքանչյուր սարք արձագանքի, հաջորդ անգամ «որոնում» է տրվում, վերադարձը «ՍՈALՏ» է ՝ նշելով, որ ավտոբուսում գտնվող յուրաքանչյուր սարք արդեն արձագանքել է: Եթե «որոնումը» կրկին թողարկվի, առաջին սարքը կրկին արձագանքում է, և այդպես անվերջ: Սարքերը միշտ արձագանքում են նույն հերթականությամբ: Պատասխանների հերթականությունը հիմնված է OneWire ավտոբուսի սարքերի նույնացուցիչների վրա: Կարծես թե դա երկուական որոնում է ՝ սկսած սարքի նույնացուցիչների ամենափոքր էական բիթերից: Այս նույնացուցիչները գտնելու համար օգտագործվող արձանագրությունը բավականին բարդ է և նկարագրված է «iButton ստանդարտների գիրք» փաստաթղթի 51-54 էջերում, որը pdf փաստաթուղթ է ՝ https://pdfserv.maximintegrated.com/hy/an/AN937.pd …

Ես փորձարկեցի այս որոնման գործընթացը 1 -ից 11 սենսորներով մեկ ավտոբուսի վրա և գտա, որ սարքերի որոշակի փաթեթի պատասխանը միշտ նույնն էր, բայց երբ ավտոբուսի վերջում նոր սարք ավելացրի, ոչ մի կերպ չկար Ես կարող էի կանխատեսել, թե որոնման կարգում որտեղ կհայտնվի: Օրինակ, իմ ավելացրած 11 -րդ սենսորը հայտնվեց No.5 դիրքում; և առաջին սենսորը, որը ես դնում էի ավտոբուսում, հեռու էր որոնման կարգում:

Երկու սենսոր ունեցող այս նախագծում դրանցից մեկը տեղում ամրացված է RTC մոդուլի վրա. մյուսը միացված է ՝ օգտագործելով տախտակի վրա արական վերնագիր, իսկ մալուխի վրա ՝ վերնագիր: Այն հեշտությամբ կարող է անջատվել:

Երբ մալուխի սենսորը («դուրս» սենսորը) անջատվում է, «որոնում» հրամանը տալիս է փոփոխվող «UEՇՄԱՐ» և «ԿԱԼ» վերադարձները:

Երբ մալուխի սենսորը կցվում է, «որոնում» հրահանգը տալիս է 3 փուլային ցիկլ ՝ երկու «TRUE» և մեկ «FALSE» վերադարձով:

Իմ ընթացակարգն է ՝ թողարկել 1, 2 կամ 3 «որոնման» հրաման, մինչև կեղծ արդյունքի վերադարձը: Այնուհետեւ ես տալիս եմ եւս 2 «որոնման» հրաման: Եթե երկրորդը ձախողվի (այսինքն ՝ ՍՈALՏ), ես գիտեմ, որ ավտոբուսում կա միայն մեկ տվիչ, և դա «ներս» ցուցիչն է: Սարքի ինքնությունը գրանցվում և հատկացվում է «ներ» սենսորին:

Հետագայում, եթե և՛ առաջին, և՛ երկրորդ վերադարձը TRԻՇՏ են, ես գիտեմ, որ ավտոբուսում կա երկու տվիչ: Ես ստուգում եմ, թե դրանցից որն ունի «in» սենսորին հավասար ինքնություն, իսկ մյուսը հատկացնում եմ որպես «դուրս» սենսոր:

Մյուս աննշան կետն այն է, որ երկու տվիչներից ստացված արդյունքների հավաքումը կատարվում է «մեկնարկի փոխարկումը» ուղարկելով այն, ինչ հայտնի է որպես «բաց թողնել ROM» հրաման: Մենք հնարավորություն ունենք հրամաններ ուղարկել մեկ սարքի (օգտագործելով իր եզակի նույնացուցիչը) կամ ավտոբուսի բոլոր սարքերին (բաց թողնել ROM): Կոդն այսպիսին է.

ds.reset (); //

// ուղարկել «բաց թողնել ROM» հրամանը (այնպես որ հաջորդ հրամանը գործում է երկու սենսորներում) ds.write (0xCC); // Բաց թողնել ROM հրամանը ds.write (0x44, 0); // սկսել փոխարկումը երկու զոնդերում temperature_state = wait_convert; // գնալ հետաձգման վիճակին

Երբ պահանջվող հետաձգման ժամանակը անցել է, ջերմաստիճանը յուրաքանչյուր սենսորից ստացվում է առանձին: Ահա երկրորդ սենսորի ծածկագիրը (այսինքն OUT սենսորը):

եթե (դրոշ 2) {

ներկա = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Կարդալ «դուրս» զոնդի տվյալների Scratchpad [0] = ds.read (); տվյալներ [1] = ds.read (); temperature_out = (տվյալներ [1] << 8) + տվյալներ [0]; temperature_out = (6 * temperature_out) + temperature_out / 4; // բազմապատկել 6.25} -ով {// ոչ flag2 - այսինքն ՝ Out սենսորը միացված չէ temperature_out = 30000; // շտկել 300.00 C ջերմաստիճանի դեպքում, եթե ջերմաստիճանի տվիչը չի աշխատում} // if- ի վերջը (flag2)

Ես մշակեցի այս ծրագրաշարի մեծ մասը ինքնուրույն ուրվագծի մեջ, որը պարունակում էր ջերմաստիճանի տվիչներ ՝ առանց LCD, RTC և SD քարտերի աջակցության բարդությունների: Այս զարգացման ուրվագիծը գտնվում է ստորև բերված ֆայլում:

Քայլ 3. Նախնական արդյունքներ

Նախնական արդյունքները
Նախնական արդյունքները

Այս աղյուսակը ընթերցումների առաջին երկու մաս-օրերի համադրությունն է:

Խորհուրդ ենք տալիս: