Voltmeter ammeter នៅលើ arduino ជាមួយនឹងការបង្ហាញពណ៌។ ឧបករណ៍វាស់ស្ទង់ប៊្លូធូសផ្អែកលើ arduino

បានពិពណ៌នាពីរបៀបប្រមូលផ្តុំ voltmeter ទ្វេដែលផលិតនៅផ្ទះដោយផ្អែកលើវេទិកា Arduino UNOដោយប្រើអេក្រង់ LCD 1602A ។ ក្នុងករណីខ្លះវាចាំបាច់ក្នុងការវាស់វ៉ុលថេរពីរក្នុងពេលដំណាលគ្នាហើយប្រៀបធៀបពួកគេ។ នេះអាចត្រូវបានទាមទារឧទាហរណ៍នៅពេលជួសជុលឬកែតម្រូវស្ថេរភាព វ៉ុល DCដើម្បីវាស់វ៉ុលនៅការបញ្ចូល និងទិន្នផលរបស់វា ឬក្នុងករណីផ្សេងទៀត។

ដ្យាក្រាមគ្រោងការណ៍

ដោយប្រើឧបករណ៍បញ្ជា microcontroller ជាសកល ម៉ូឌុល ARDUINO UNO និងប្រភេទអេក្រង់ LCD ពីរជួរ 1602A (ផ្អែកលើឧបករណ៍បញ្ជា HD44780) អាចបង្កើតឧបករណ៍បែបនេះបានយ៉ាងងាយស្រួល។ នៅក្នុងបន្ទាត់មួយវានឹងបង្ហាញវ៉ុល U1 ហើយមួយទៀត - វ៉ុល U2 ។

អង្ករ។ ១. ដ្យាក្រាមគ្រោងការណ៍ voltmeter ទ្វេជាមួយនឹងអេក្រង់ 1602A នៅលើ Arduino UNO ។

ប៉ុន្តែជាដំបូងខ្ញុំចង់រំលឹកអ្នកថា ARDUINO UNO គឺជាម៉ូឌុលដែលត្រៀមរួចជាស្រេចដែលមានតំលៃថោកសមរម្យ - តូចមួយ PCBដែលមីក្រូកុងទ័រ ATMEGA328 មានទីតាំងនៅ ក៏ដូចជា "ខ្សែ" ទាំងអស់ដែលចាំបាច់សម្រាប់ប្រតិបត្តិការរបស់វា រួមទាំងអ្នកសរសេរកម្មវិធី USB និងការផ្គត់ផ្គង់ថាមពល។

សម្រាប់អ្នកដែលមិនស្គាល់ ARDUINO UNO ខ្ញុំណែនាំអ្នកឱ្យអានអត្ថបទ L.1 និង L.2 ជាមុនសិន។ សៀគ្វីនៃ voltmeter ទ្វេត្រូវបានបង្ហាញនៅក្នុងរូបភព។ 1. វាត្រូវបានរចនាឡើងដើម្បីវាស់វ៉ុលពីរពី 0 ទៅ 100V (អនុវត្តរហូតដល់ 90V)។

ដូចដែលអាចមើលឃើញពីដ្យាក្រាមទៅច្រកឌីជីថល D2-D7 បន្ទះ ARDUINO UNO ត្រូវបានភ្ជាប់ទៅម៉ូឌុលបង្ហាញគ្រីស្តាល់រាវ H1 ប្រភេទ 1602A ។ សូចនាករ LCD ត្រូវបានបំពាក់ដោយឧបករណ៍ស្ថេរភាពវ៉ុល 5V ដែលមានទីតាំងនៅលើបន្ទះស្ថេរភាពវ៉ុល 5V ។

វ៉ុលដែលបានវាស់ត្រូវបានផ្គត់ផ្គង់ទៅឧបករណ៍បញ្ចូលអាណាឡូកពីរ A1 និង A2 ។ មានការបញ្ចូលអាណាឡូកចំនួនប្រាំមួយសរុប A0-A5 អ្នកអាចជ្រើសរើសពីរក្នុងចំណោមពួកវា។ IN ក្នុងករណីនេះ, A1 និង A2 ត្រូវបានជ្រើសរើស។ វ៉ុលនៅលើច្រកអាណាឡូកអាចមានភាពវិជ្ជមានតែប៉ុណ្ណោះហើយមានតែនៅក្នុងចន្លោះពីសូន្យទៅវ៉ុលផ្គត់ផ្គង់ microcontroller ពោលគឺរហូតដល់ 5V ។

លទ្ធផលនៃច្រកអាណាឡូកត្រូវបានបំប្លែងទៅជាទម្រង់ឌីជីថលដោយ ADC របស់ microcontroller ។ ដើម្បីទទួលបានលទ្ធផលជាឯកតានៃវ៉ុល អ្នកត្រូវគុណវាដោយ 5 (ដោយវ៉ុលយោង ពោលគឺដោយវ៉ុលផ្គត់ផ្គង់របស់ microcontroller) ហើយចែកនឹង 1024 ។

ដើម្បីអាចវាស់វ៉ុលធំជាង 5V ឬធំជាងវ៉ុលផ្គត់ផ្គង់របស់ microcontroller ពីព្រោះវ៉ុលពិតប្រាកដនៅទិន្នផលនៃស្ថេរភាព 5 វ៉ុលនៅលើបន្ទះ ARDUINO UNO អាចខុសគ្នាពី 5V ហើយជាធម្មតា ទាបជាងបន្តិច អ្នកត្រូវប្រើឧបករណ៍បែងចែក resistive ធម្មតានៅឯការបញ្ចូល។ នេះគឺជាការបែងចែកវ៉ុលនៅទូទាំង resistors R1, R3 និង R2, R4 ។

ក្នុងករណីនេះ ដើម្បីនាំយកការអានឧបករណ៍ទៅតម្លៃពិតនៃវ៉ុលបញ្ចូល អ្នកត្រូវកំណត់នៅក្នុងកម្មវិធីនូវការបែងចែកលទ្ធផលរង្វាស់ដោយមេគុណបែងចែកនៃផ្នែកទប់ទល់។ ហើយមេគុណចែក ចូរសម្គាល់វា “K” អាចត្រូវបានគណនាដោយប្រើរូបមន្តខាងក្រោម៖

K = R3 / (R1 + R3) ឬ K = R4 / (R2 + R4),

រៀងគ្នាសម្រាប់ ច្រកចូលផ្សេងគ្នា voltmeter ទ្វេ។

វាគួរឱ្យចាប់អារម្មណ៍ណាស់ដែលថារេស៊ីស្តង់នៅក្នុងផ្នែកបែងចែកមិនចាំបាច់មានភាពជាក់លាក់ខ្ពស់នោះទេ។ អ្នកអាចយក resistors ធម្មតា បន្ទាប់មកវាស់ភាពធន់ពិតប្រាកដរបស់ពួកគេជាមួយនឹង ohmmeter ត្រឹមត្រូវ ហើយជំនួសតម្លៃដែលបានវាស់ទាំងនេះទៅក្នុងរូបមន្ត។ អ្នក​នឹង​ទទួល​បាន​តម្លៃ “K” សម្រាប់​ផ្នែក​ជាក់លាក់​មួយ ដែល​នឹង​ត្រូវ​ជំនួស​ក្នុង​រូបមន្ត។

កម្មវិធី Voltmeter

កម្មវិធី C++ ត្រូវបានបង្ហាញក្នុងរូបភាពទី 2 ។

អង្ករ។ 2. កូដប្រភពនៃកម្មវិធី។

ដើម្បីគ្រប់គ្រងសូចនាករ LCD វាត្រូវបានសម្រេចចិត្តប្រើច្រក D2 ដល់ D7 នៃបន្ទះ ARDUINO UNO ។ ជាគោលការណ៍ ច្រកផ្សេងទៀតអាចធ្វើទៅបាន ប៉ុន្តែនេះជារបៀបដែលខ្ញុំសម្រេចចិត្តប្រើទាំងនេះ។

ដើម្បីឱ្យសូចនាករធ្វើអន្តរកម្មជាមួយ ARDUINO UNO អ្នកត្រូវផ្ទុកទម្រង់ការរងទៅក្នុងកម្មវិធីដើម្បីគ្រប់គ្រងវា។ ទម្លាប់បែបនេះត្រូវបានគេហៅថា "បណ្ណាល័យ" ហើយមាន "បណ្ណាល័យ" ផ្សេងៗគ្នាជាច្រើននៅក្នុងឈុតកម្មវិធី ARDUINO UNO ។ ដើម្បីធ្វើការជាមួយសូចនាករ LCD ដោយផ្អែកលើ HD44780 អ្នកត្រូវការបណ្ណាល័យ LiquidCrystal ។ ដូច្នេះកម្មវិធី (តារាងទី 1) ចាប់ផ្តើមដោយការផ្ទុកបណ្ណាល័យនេះ៖

បន្ទាត់នេះផ្តល់ពាក្យបញ្ជាដើម្បីផ្ទុកទៅក្នុង ARDUINO UNO បណ្ណាល័យនេះ។. បន្ទាប់អ្នកត្រូវកំណត់ច្រក ARDUINO UNO ដែលនឹងដំណើរការជាមួយសូចនាករ LCD ។ ខ្ញុំបានជ្រើសរើសច្រក D2 ដល់ D7 ។ អ្នកអាចជ្រើសរើសអ្នកដទៃ។ ច្រកទាំងនេះត្រូវបានចាត់តាំងដោយបន្ទាត់៖

LiquidCrystal led(2, 3, 4, 5, 6, 7);

បន្ទាប់ពីនោះកម្មវិធីបន្តទៅប្រតិបត្តិការជាក់ស្តែងនៃ voltmeter ។ ដើម្បីវាស់វ៉ុលវាត្រូវបានគេសម្រេចចិត្តប្រើការបញ្ចូលអាណាឡូក A1 និង A2 ។ ការបញ្ចូលទាំងនេះត្រូវបានផ្តល់ឱ្យនៅលើបន្ទាត់:

int analogInput=1;

int analogInput1=2;

ដើម្បីអានទិន្នន័យពីច្រកអាណាឡូក សូមប្រើមុខងារអានអាណាឡូក។ ការអានទិន្នន័យពីច្រកអាណាឡូកកើតឡើងនៅក្នុងបន្ទាត់៖

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

បន្ទាប់មកវ៉ុលពិតប្រាកដត្រូវបានគណនាដោយគិតគូរពីសមាមាត្របែងចែកនៃការបែងចែកវ៉ុលបញ្ចូល:

volt=vout*5.0/1024.0/0.048 ;

volt1=vout1*5.0/1024.0/0.048;

នៅក្នុងបន្ទាត់ទាំងនេះលេខ 5.0 គឺជាវ៉ុលនៅទិន្នផលនៃស្ថេរភាពនៃបន្ទះ ARDUINO UNO ។ តាមឧត្ដមគតិវាគួរតែមាន 5V ប៉ុន្តែដើម្បីឱ្យ voltmeter ដំណើរការបានត្រឹមត្រូវ វ៉ុលនេះត្រូវតែវាស់ជាមុនសិន។ ភ្ជាប់ប្រភពថាមពល និងវាស់វ៉ុល +5V នៅឧបករណ៍ភ្ជាប់ POWER នៃបន្ទះជាមួយនឹង voltmeter ត្រឹមត្រូវ។ តើមានអ្វីកើតឡើងបន្ទាប់មកបញ្ចូលក្នុងបន្ទាត់ទាំងនេះជំនួសឱ្យ 5.0 ឧទាហរណ៍ប្រសិនបើមាន 4.85V បន្ទាត់នឹងមើលទៅដូចនេះ:

volt=vout*4.85/1024.0/0.048;

volt1=vout1*4.85/1024.0/0.048;

នៅដំណាក់កាលបន្ទាប់ អ្នកនឹងត្រូវវាស់ស្ទង់ភាពធន់ពិតប្រាកដនៃរេស៊ីស្តង់ R1-R4 និងកំណត់មេគុណ K (ចង្អុលបង្ហាញថា 0.048) សម្រាប់បន្ទាត់ទាំងនេះដោយប្រើរូបមន្ត៖

K1 = R3 / (R1 + R3) និង K2 = R4 / (R2 + R4)

ចូរនិយាយថា K1 = 0.046 និង K2 = 0.051 ដូច្នេះយើងសរសេរ៖

volt=vout*4.85/1024.0/0.046 ;

volt1=vout1*4.85/1024.0/0.051;

ដូច្នេះការផ្លាស់ប្តូរត្រូវតែធ្វើឡើងចំពោះអត្ថបទកម្មវិធីដោយយោងទៅតាមវ៉ុលពិតប្រាកដនៅឯលទ្ធផលនៃស្ថេរភាព 5 វ៉ុលនៃបន្ទះ ARDUINO UNO និងយោងទៅតាមមេគុណការបែងចែកជាក់ស្តែងនៃផ្នែកទប់ទល់។ បន្ទាប់ពីនេះ ឧបករណ៍នឹងដំណើរការបានត្រឹមត្រូវ ហើយនឹងមិនតម្រូវឱ្យមានការកែតម្រូវ ឬការក្រិតតាមខ្នាតឡើយ។

តាមរយៈការផ្លាស់ប្តូរមេគុណការបែងចែកនៃផ្នែកទប់ទល់ (ហើយតាមនោះមេគុណ "K") អ្នកអាចកំណត់ដែនកំណត់រង្វាស់ផ្សេងទៀត ហើយមិនចាំបាច់ដូចគ្នាសម្រាប់ធាតុបញ្ចូលទាំងពីរនោះទេ។

Karavkin V. RK-2017-01 ។

អក្សរសិល្ប៍៖

  1. Karavkin V. - ពន្លឺដើមឈើណូអែលនៅលើ ARDUINO ជាមធ្យោបាយដោះស្រាយសម្រាប់ការភ័យខ្លាចនៃ microcontrollers ។ RK-11-2016 ។
  2. Karavkin V. - ឧបករណ៍វាស់ប្រេកង់នៅលើ ARDUINO ។ RK-12-2016 ។

ទិន្នន័យដំបូង និងការពិនិត្យឡើងវិញ

ដូច្នេះនៅចំណុចនេះយើងមាន voltmeter តង់ស្យុងថេរដែលមានដែនកំណត់ 0..20V (សូមមើលផ្នែកមុន) ។ ឥឡូវនេះយើងបន្ថែម 0..5a ammeter ទៅវា។ ដើម្បីធ្វើដូចនេះយើងកែប្រែសៀគ្វីបន្តិចបន្តួច - វានឹងក្លាយជាសៀគ្វីឆ្លងកាត់ពោលគឺវាមានទាំងធាតុបញ្ចូលនិងទិន្នផល។

ខ្ញុំបានដកផ្នែកដែលទាក់ទងនឹងការបង្ហាញនៅលើ LCD - វានឹងមិនផ្លាស់ប្តូរទេ។ ជាមូលដ្ឋាន ធាតុថ្មី។- Rx shunt នៅ 0.1 Ohm ។ ខ្សែសង្វាក់ R1-C1-VD1 បម្រើដើម្បីការពារការបញ្ចូលអាណាឡូក។ វាសមហេតុផលក្នុងការដំឡើងដូចគ្នានៅការបញ្ចូល A0 ។ ដោយសារយើងសន្មត់ថាចរន្តធំគួរសម វាមានតំរូវការក្នុងការដំឡើង - ខ្សែភ្លើងត្រូវតែធ្វើពីខ្សែក្រាស់ល្មម ហើយភ្ជាប់ទៅស្ថានីយ shunt ដោយផ្ទាល់ (និយាយម្យ៉ាងទៀត soldered) បើមិនដូច្នេះទេការអាននឹងនៅឆ្ងាយពីការពិត។ វាក៏មានកំណត់ចំណាំអំពីចរន្តផងដែរ - ជាគោលការណ៍វ៉ុលយោងនៃ 1.1V អនុញ្ញាតឱ្យអ្នកចុះឈ្មោះវានៅលើ shunt ។ ចរន្ត 0.1 Ohm រហូតដល់ 11 amperes ជាមួយនឹងភាពត្រឹមត្រូវបន្តិចគឺអាក្រក់ជាង 0.01a ប៉ុន្តែនៅពេលដែលវ៉ុលបែបនេះធ្លាក់ចុះនៅទូទាំង Rx ថាមពលដែលបានបញ្ចេញនឹងលើសពី 10 W ដែលវាមិនសប្បាយទាល់តែសោះ។ ដើម្បីដោះស្រាយបញ្ហា អ្នកអាចប្រើ amplifier ដែលមានការកើនឡើង 11 ដោយប្រើ op-amp ដែលមានគុណភាពខ្ពស់ និង shunt 10 mOhm (0.01 Ohm) ។ ប៉ុន្តែសម្រាប់ពេលនេះយើងនឹងមិនធ្វើឱ្យជីវិតរបស់យើងស្មុគស្មាញទេ ហើយគ្រាន់តែកំណត់ចរន្តដល់ 5A (ក្នុងករណីនេះ ថាមពល Rx អាចត្រូវបានជ្រើសរើសតាមលំដាប់ 3-5 W)។

នៅដំណាក់កាលនេះការភ្ញាក់ផ្អើលមួយកំពុងរង់ចាំខ្ញុំ - វាប្រែថា ADC របស់ឧបករណ៍បញ្ជាមានអុហ្វសិតសូន្យធំល្មម - ប្រហែល -3mV ។ នោះគឺ ADC គ្រាន់តែមិនឃើញសញ្ញាតិចជាង 3 mV ទេ ហើយសញ្ញានៃកម្រិតខ្ពស់ជាងបន្តិចអាចមើលឃើញជាមួយនឹងភាពមិនត្រឹមត្រូវនៃលក្ខណៈ -3 mV ដែលធ្វើអោយខូចលីនេអ៊ែរនៅដើមជួរ។ ការស្វែងរករហ័សមិនបានផ្តល់នូវសេចក្តីយោងជាក់ស្តែងណាមួយចំពោះបញ្ហាបែបនេះទេ (សូន្យអុហ្វសិតគឺធម្មតា ប៉ុន្តែវាគួរតែតូចជាងនេះ) ដូច្នេះវាពិតជាអាចទៅរួចដែលថានេះជាបញ្ហាជាមួយឧទាហរណ៍ Atmega 328 ជាក់លាក់ ដំណោះស្រាយដែលខ្ញុំបានជ្រើសរើស ពីរដង - នៅក្នុងវ៉ុល - ជំហានផ្នែកទន់នៅដើមជួរ (ការបង្ហាញចាប់ផ្តើមនៅ 0.06 វ៉ុល) សម្រាប់ចរន្ត - ប្រដាប់ទប់ទល់នឹងឡានក្រុង 5V ។ រេស៊ីស្តង់ត្រូវបានចង្អុលបង្ហាញដោយបន្ទាត់ចំនុច។

កូដប្រភព

កំណែពេញលេញនៃ volt-ampere ម៉ែត្រនេះ (នៅក្នុងកំណែ I2C) អាចទាញយកបានពីតំណនៅចុងបញ្ចប់នៃអត្ថបទ។បន្ទាប់ខ្ញុំនឹងបង្ហាញការផ្លាស់ប្តូរនៅក្នុង កូដប្រភព. បានបន្ថែមការអាននៃការបញ្ចូលអាណាឡូក A1 ជាមួយនឹងកម្រិតមធ្យមដូចគ្នានឹង voltmeter ។ នៅក្នុងខ្លឹមសារនេះគឺជា voltmeter ដូចគ្នាតែដោយគ្មានការបែងចែកហើយយើងទទួលបាន amperes ដោយប្រើរូបមន្តរបស់ Ohm: I = U/Rx (ឧទាហរណ៍ប្រសិនបើវ៉ុលធ្លាក់ចុះនៅទូទាំង Rx = 0.01 V នោះចរន្តគឺ 0.1A) ។ ខ្ញុំក៏បានណែនាំផងដែរនូវការទទួលបានបច្ចុប្បន្នថេរ AmpMult - សម្រាប់ពេលអនាគត។ ថេរ AmpRx ជាមួយ shunt resistance ប្រហែលជាត្រូវផ្គូផ្គងដើម្បីគិតគូរពីភាពមិនត្រឹមត្រូវនៃ shunt resistor ។ ជាការប្រសើរណាស់, ចាប់តាំងពីនេះគឺជាម៉ែត្រ volt-ampere រួចហើយហើយវានៅតែមានកន្លែងទំនេរនៅលើអេក្រង់ 1602 វានៅតែបង្ហាញការប្រើប្រាស់ថាមពលបច្ចុប្បន្នជាវ៉ាត់ដោយទទួលបានមុខងារបន្ថែមសាមញ្ញ។

.... // បញ្ចូលអាណាឡូក #define PIN_VOLT A0 #define PIN_AMP A1 // វ៉ុលយោងខាងក្នុង (ជ្រើសរើស) const float VRef = 1.10; // មេគុណបែងចែកធន់បញ្ចូល (Rh + Rl) / Rl ។ IN 0.2) InVolt += 3;

// បម្លែងទៅជាវ៉ុល (In: 0..1023 -> (0..VRef) ធ្វើមាត្រដ្ឋានដោយ Mult) float Volt = InVolt * VoltMult * VRef / 1023;

  • float Amp = InAmp * VRef / AmpMult / AmpRx / 1023 ;

// ដើម្បីយកទៅក្នុងគណនីធ្លាក់ចុះនៅលើ shunt, uncomment 2 បន្ទាត់ //float RxVolt = InAmp * VRef / 1023 / AmpMult; // វ៉ុល -= RxVolt; float Watt = វ៉ុល * អំពែ; // ទិន្នន័យលទ្ធផល lcd.setCursor (8, 0); lcd.print(វ៉ាត់);


lcd.print("W"); lcd.setCursor(0, 1); lcd.print(វ៉ុល);
lcd.print("V");
lcd.setCursor(8, 1);
lcd.print(Amp);
lcd.print("A"); )
តំណភ្ជាប់
បណ្ណាល័យ LiquidCrystal_I2C ដែលអនុញ្ញាតឱ្យអ្នកកំណត់ pinout

សួស្តី ហាប! ថ្ងៃនេះខ្ញុំចង់បន្តប្រធានបទ "ឆ្លងកាត់" arduino និង Android ។ IN

ការបោះពុម្ពមុន។
ខ្ញុំបាននិយាយអំពីម៉ាស៊ីនប៊្លូធូស ហើយថ្ងៃនេះយើងនឹងនិយាយអំពី DIY
ឧបករណ៍វាស់វ៉ុលប៊្លូធូស
អណ្តែត R1 = 100000.0; // ថ្ម Vin-> 100K -> A0
អណ្តែត R2 = 10000.0; // ថ្ម Gnd -> Arduino Gnd និង Arduino Gnd -> 10K -> A0
តម្លៃ int = 0;

ការ​កំណត់​ទុក​ជា​មោឃៈ () (
Serial.begin(9600);
pinMode(បញ្ចូលអាណាឡូក, បញ្ចូល);
}

រង្វិលជុំទទេ () (
តម្លៃ = analogRead(analogInput);
val = (តម្លៃ * 4.7) / 1024.0;
វ៉ុល = វ៉ាល់ / (R2 / (R1 + R2));
Serial.println(វ៉ុល);
ការពន្យាពេល (500);
}


Arduino Uno
ម៉ូឌុលប៊្លូធូស
ករណីទីបី។ នៅពេលដែលអ្នកត្រូវការដើម្បីទទួលបានព័ត៌មានត្រឹមត្រូវបន្ថែមទៀតអំពីវ៉ុល អ្នកគួរតែប្រើជាវ៉ុលយោងមិនមែនវ៉ុលផ្គត់ផ្គង់ទេ ដែលអាចប្រែប្រួលបន្តិចនៅពេលបំពាក់ដោយថ្ម ឧទាហរណ៍ ប៉ុន្តែវ៉ុលរបស់ឧបករណ៍ទប់លំនឹង Arduino ខាងក្នុងគឺ 1.1 វ៉ុល សៀគ្វីគឺដូចគ្នានៅទីនេះ ប៉ុន្តែកូដគឺវែងជាងបន្តិច។ ខ្ញុំនឹងមិនវិភាគជម្រើសនេះឱ្យបានលម្អិតទេ ព្រោះវាត្រូវបានពិពណ៌នាយ៉ាងល្អនៅក្នុងអត្ថបទប្រធានបទ ប៉ុន្តែវិធីសាស្ត្រទីពីរគឺគ្រប់គ្រាន់សម្រាប់ខ្ញុំ ដោយសារការផ្គត់ផ្គង់ថាមពលរបស់ខ្ញុំមានស្ថេរភាពពីរន្ធ USB នៃកុំព្យូទ័រយួរដៃ។
ដូច្នេះ​យើង​បាន​តម្រៀប​ចេញ​ការ​វាស់​វ៉ុល​ហើយ ឥឡូវ​យើង​បន្ត​ទៅ​ពាក់កណ្តាល​ទីពីរ​នៃ​គម្រោង៖ បង្កើត​កម្មវិធី Android។ យើងនឹងបង្កើតកម្មវិធីដោយផ្ទាល់ពីកម្មវិធីរុករកតាមអ៊ីនធឺណិតក្នុងបរិយាកាសអភិវឌ្ឍន៍ដែលមើលឃើញសម្រាប់កម្មវិធី Android App Inventor 2. ចូលទៅកាន់គេហទំព័រ appinventor.mit.edu/explore ចូលដោយប្រើគណនី Google របស់អ្នក ចុចប៊ូតុងបង្កើត គម្រោងថ្មី និងដោយ អូសនិងទម្លាក់សាមញ្ញធាតុដែលយើងបង្កើតអ្វីមួយដូចជាការរចនានេះ៖

ខ្ញុំបានបង្កើតក្រាហ្វិកយ៉ាងសាមញ្ញ ប្រសិនបើអ្នកណាម្នាក់ចង់បានក្រាហ្វិកដែលគួរឱ្យចាប់អារម្មណ៍ជាងនេះ ខ្ញុំសូមរំលឹកអ្នកថាសម្រាប់រឿងនេះ អ្នកត្រូវប្រើឯកសារ .png ដែលមានផ្ទៃខាងក្រោយថ្លាជំនួសឱ្យឯកសារ .jpeg ។
ឥឡូវចូលទៅកាន់ផ្ទាំង Blocks ហើយបង្កើតតក្កវិជ្ជាកម្មវិធីនៅទីនោះអ្វីមួយដូចនេះ៖


ប្រសិនបើអ្វីៗដំណើរការល្អ អ្នកអាចចុចប៊ូតុង Build ហើយរក្សាទុក .apk ទៅក្នុងកុំព្យូទ័ររបស់ខ្ញុំ ហើយបន្ទាប់មកទាញយក និងដំឡើងកម្មវិធីនៅលើស្មាតហ្វូនរបស់អ្នក ទោះបីជាមានវិធីផ្សេងទៀតដើម្បីបង្ហោះកម្មវិធីក៏ដោយ។ នៅទីនេះវាកាន់តែងាយស្រួលសម្រាប់នរណាម្នាក់។ ជាលទ្ធផលខ្ញុំបានបញ្ចប់ជាមួយនឹងកម្មវិធីនេះ:


ខ្ញុំយល់ថាមានមនុស្សតិចណាស់ដែលប្រើបរិយាកាសអភិវឌ្ឍន៍ដែលមើលឃើញរបស់ App Inventor 2 សម្រាប់កម្មវិធី Android នៅក្នុងគម្រោងរបស់ពួកគេ ដូច្នេះសំណួរជាច្រើនអាចកើតឡើងអំពីការធ្វើការនៅក្នុងវា។ ដើម្បីដកសំណួរទាំងនេះចេញ ខ្ញុំបានធ្វើ វីដេអូលម្អិតអំពីរបៀបបង្កើតកម្មវិធីបែបនេះ "ពីដំបូង" (ដើម្បីមើលវាអ្នកត្រូវចូលទៅកាន់ YouTube)៖

P.S. បណ្តុំនៃសម្ភារៈសិក្សាជាង 100 នៅលើ Arduino សម្រាប់អ្នកចាប់ផ្តើមដំបូង និងអ្នកជំនាញ

ជាមួយនឹងការបន្ថែមមួយចំនួន។

លក្ខណៈពិសេសដែលគេស្គាល់តិចតួចនៃ Arduino និងបន្ទះសៀគ្វី AVR ជាច្រើនផ្សេងទៀតគឺសមត្ថភាពក្នុងការវាស់វ៉ុលខាងក្នុង 1.1 V ។ លក្ខណៈពិសេសនេះអាច ត្រូវបានប្រើសម្រាប់ ការបង្កើនភាពត្រឹមត្រូវមុខងារ Arduino - analogRead នៅពេលប្រើវ៉ុលយោងស្តង់ដារនៃ 5 V (នៅលើវេទិកាដែលមានវ៉ុលផ្គត់ផ្គង់ 5 V) ឬ 3.3 V (នៅលើវេទិកាដែលមានវ៉ុលផ្គត់ផ្គង់ 3.3 V) ។នាងក៏អាចជា ប្រើដើម្បីវាស់ Vcc បានអនុវត្តទៅបន្ទះឈីបដោយផ្តល់ មធ្យោបាយនៃការគ្រប់គ្រង វ៉ុលថ្ម ដោយមិនប្រើម្ជុលអាណាឡូកដ៏មានតម្លៃ។

ការលើកទឹកចិត្ត

យ៉ាងហោចណាស់មាន យ៉ាងហោចណាស់ហេតុផលពីរសម្រាប់ការវាស់វែង វ៉ុលផ្គត់ផ្គង់ Arduino របស់យើង (Vcc) ។ មួយក្នុងចំណោមពួកគេគឺជាគម្រោងថាមពលថ្មរបស់យើង ប្រសិនបើយើងចង់ត្រួតពិនិត្យកម្រិតវ៉ុលរបស់ថ្ម។ លើសពីនេះទៀតនៅពេលដែលថាមពលថ្ម (Vcc) មិនអាច 5.0 វ៉ុល (ឧទាហរណ៍ថាមពលពី 3 កោសិកាគឺ 1.5 V) ហើយយើងចង់ធ្វើ ការវាស់វែងអាណាឡូកច្បាស់លាស់ជាងនេះ - យើងត្រូវប្រើទាំងឯកសារយោង 1.1 V ខាងក្នុង ឬ ប្រភពខាងក្រៅវ៉ុលយោង។ ហេតុអ្វី?

វាជារឿងធម្មតាទេក្នុងការសន្មត់នៅពេលប្រើ analogRead() ថាវ៉ុលផ្គត់ផ្គង់អាណាឡូករបស់ឧបករណ៍បញ្ជាគឺ 5.0 វ៉ុល នៅពេលដែលការពិតវាអាចមិនមែនជាករណីទាំងអស់ (ឧទាហរណ៍ការផ្គត់ផ្គង់ថាមពលពីធាតុ 3 គឺ 1.5 V) ។ ឯកសារផ្លូវការរបស់ Arduino អាចនាំយើងទៅរកការសន្មត់មិនត្រឹមត្រូវនេះ។ ចំណុចសំខាន់គឺថាថាមពលមិនចាំបាច់ 5.0 វ៉ុលទេដោយមិនគិតពី កម្រិតបច្ចុប្បន្នថាមពលនេះត្រូវបានអនុវត្តទៅ Vcc នៃបន្ទះឈីប។ ប្រសិនបើការផ្គត់ផ្គង់ថាមពលរបស់យើងមិនមានស្ថេរភាព ឬប្រសិនបើយើងកំពុងដំណើរការថាមពលថ្ម វ៉ុលនេះអាចប្រែប្រួលបន្តិច។ នេះគឺជាឧទាហរណ៍កូដដែលបង្ហាញពីបញ្ហានេះ៖

Vcc ទ្វេ = 5.0; // មិនចាំបាច់ពិត តម្លៃ int = analogRead(0); / អានការអានពី A0 វ៉ុលទ្វេ = (តម្លៃ / 1023.0) * Vcc; // តែជាការពិតប្រសិនបើ Vcc = 5.0 វ៉ុល ដើម្បីវាស់វ៉ុលត្រឹមត្រូវ វ៉ុលយោងត្រឹមត្រូវគឺត្រូវការ។ បន្ទះឈីប AVR ភាគច្រើនផ្តល់នូវសេចក្តីយោងវ៉ុលចំនួនបី៖

  • 1.1 ពី ប្រភពខាងក្នុងនៅក្នុងឯកសារវាឆ្លងកាត់ជាឯកសារយោង bandgap (មួយចំនួននៃពួកគេគឺ 2.56 V, ឧទាហរណ៍ ATMega 2560) ។ ការជ្រើសរើសត្រូវបានធ្វើឡើងដោយអនុគមន៍ analogReference() ជាមួយនឹងប៉ារ៉ាម៉ែត្រខាងក្នុង៖ analogReference(ខាងក្នុង);
  • ប្រភពខាងក្រៅនៃវ៉ុលយោងដែលមានស្លាក AREF នៅលើ arduino ។ ជ្រើសរើស៖ analogReference(External);
  • Vcc គឺជាការផ្គត់ផ្គង់ថាមពលរបស់ឧបករណ៍បញ្ជាខ្លួនឯង។ ជ្រើសរើស៖ analogReference(DEFAULT)។

នៅក្នុង Arduino អ្នកមិនត្រឹមតែអាចភ្ជាប់ Vcc ទៅ analog pin ដោយផ្ទាល់នោះទេ - តាមលំនាំដើម AREF ត្រូវបានភ្ជាប់ទៅ Vcc ហើយអ្នកនឹងទទួលបានជានិច្ច។ តម្លៃអតិបរមា 1023 មិនថាអ្នកកំពុងប្រើវ៉ុលអ្វីនោះទេ។ ការភ្ជាប់ទៅ AREF ប្រភពវ៉ុលដែលមានវ៉ុលស្ថេរភាពដែលធ្លាប់ស្គាល់ពីមុនមកជួយ ប៉ុន្តែនេះគឺ ធាតុបន្ថែមនៅក្នុងដ្យាក្រាម។

អ្នកក៏អាចភ្ជាប់ Vcc ទៅ AREF តាមរយៈ ឌីយ៉ូត៖ ការធ្លាក់ចុះតង់ស្យុងឆ្លងកាត់ diode ត្រូវបានគេដឹងជាមុន ដូច្នេះការគណនា Vcc មិនពិបាកទេ។ ទោះយ៉ាងណាក៏ដោយជាមួយនឹងសៀគ្វីបែបនេះតាមរយៈ diode លំហូរបច្ចុប្បន្នឥតឈប់ឈរកាត់បន្ថយអាយុកាលថ្ម ដែលមិនល្អខ្លាំងពេក។

សេចក្តីយោងវ៉ុលខាងក្រៅគឺត្រឹមត្រូវបំផុត ប៉ុន្តែត្រូវការផ្នែករឹងបន្ថែម។ ION ខាងក្នុងមានស្ថេរភាព ប៉ុន្តែមិនមានភាពត្រឹមត្រូវ +/- គម្លាត 10% ។ Vcc គឺមិនអាចទុកចិត្តបានទាំងស្រុងនៅក្នុងករណីភាគច្រើន។ ការជ្រើសរើសវ៉ុលយោងខាងក្នុងគឺមានតំលៃថោក និងមានស្ថេរភាព ប៉ុន្តែភាគច្រើនយើងចង់វាស់វ៉ុលច្រើនជាង 1.1V ដូច្នេះការប្រើ Vcc គឺជាក់ស្តែងបំផុត ប៉ុន្តែមានសក្តានុពលតិចបំផុត។ ក្នុងករណីខ្លះវាអាចមិនគួរឱ្យទុកចិត្តបាន!

របៀបធ្វើវា

បន្ទះឈីប AVR ជាច្រើនរួមទាំងស៊េរី ATmega និង ATtiny ផ្តល់នូវមធ្យោបាយសម្រាប់វាស់វ៉ុលយោងខាងក្នុង។ ហេតុអ្វីចាំបាច់? ហេតុផលគឺសាមញ្ញ - ដោយវាស់វ៉ុលខាងក្នុងយើងអាចកំណត់តម្លៃនៃ Vcc ។ នេះជារបៀប៖

  1. កំណត់សេចក្តីយោងវ៉ុលលំនាំដើម៖ analogReference(DEFAULT); . យើងប្រើ Vcc ជាប្រភព។
  2. យកការអាន ADC សម្រាប់ប្រភពខាងក្នុង 1.1 V ។
  3. គណនាតម្លៃ Vcc ដោយផ្អែកលើការវាស់វែង 1.1 V ដោយប្រើរូបមន្ត៖

Vcc * (អាន ADC) / 1023 = 1.1 V

តើមានអ្វីដូចខាងក្រោម៖

Vcc = 1.1 V * 1023 / (អាន ADC)

ដាក់​អ្វី​គ្រប់​យ៉ាង​ហើយ​យើង​ទទួល​បាន​កូដ​:

long readVcc() ( // អានសេចក្តីយោង 1.1V ទល់នឹង AVcc // កំណត់សេចក្តីយោងទៅ Vcc និងការវាស់វែងទៅឯកសារយោង 1.1V ខាងក្នុង #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560_____) (REFS0) |. _BV(MUX3) |. _BV(MUX1); #elif defined(__AVR_ATtiny44__) ||. # ADMUX ផ្សេងទៀត = _BV(MUX3) |. _BV(MUX1); #endif delay(75); );<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

ការប្រើប្រាស់

កំពុងពិនិត្យ Vcc ឬវ៉ុលថ្ម

អ្នកអាចហៅមុខងារនេះថា readVcc() ប្រសិនបើអ្នកចង់ត្រួតពិនិត្យ Vcc ។ ឧទាហរណ៍មួយនឹងពិនិត្យមើលកម្រិតនៃការសាកថ្ម។ អ្នកក៏អាចប្រើវាដើម្បីកំណត់ថាតើអ្នកត្រូវបានភ្ជាប់ទៅប្រភពថាមពល ឬដំណើរការដោយថាមពលថ្ម។

ការវាស់វែង Vcc សម្រាប់វ៉ុលយោង

អ្នកក៏អាចប្រើវាដើម្បីទទួលបានតម្លៃ Vcc ត្រឹមត្រូវសម្រាប់ប្រើជាមួយ analogRead() នៅពេលអ្នកកំពុងប្រើវ៉ុលយោង (Vcc) ។ លុះត្រាតែអ្នកប្រើការផ្គត់ផ្គង់ថាមពលដែលបានកំណត់ អ្នកមិនអាចប្រាកដថា Vcc = 5.0 វ៉ុលនោះទេ។ មុខងារនេះអនុញ្ញាតឱ្យអ្នកទទួលបានតម្លៃត្រឹមត្រូវ។ ទោះ​បី​ជា​មាន​ការ​ព្រមាន​មួយ...

នៅក្នុងអត្ថបទមួយខ្ញុំបានធ្វើសេចក្តីថ្លែងការណ៍ថាមុខងារនេះអាចត្រូវបានប្រើដើម្បីកែលម្អភាពត្រឹមត្រូវនៃការវាស់វែងអាណាឡូកក្នុងករណីដែល Vcc មិនមែន 5.0 វ៉ុល។ ជាអកុសល នីតិវិធីនេះនឹងមិនផ្តល់លទ្ធផលត្រឹមត្រូវទេ។ ហេតុអ្វី? នេះអាស្រ័យលើភាពត្រឹមត្រូវនៃសេចក្តីយោងវ៉ុលខាងក្នុង។ ការបញ្ជាក់ផ្តល់នូវវ៉ុលបន្ទាប់បន្សំ 1.1 វ៉ុល ប៉ុន្តែនិយាយថាវាអាចប្រែប្រួលរហូតដល់ 10% ។ ការវាស់វែងបែបនេះអាចមានភាពត្រឹមត្រូវតិចជាងការផ្គត់ផ្គង់ថាមពល Arduino របស់យើង!

ការបង្កើនភាពត្រឹមត្រូវ

ខណៈពេលដែលការអត់ធ្មត់ដ៏ធំនៃការផ្គត់ផ្គង់ថាមពលខាងក្នុង 1.1V កំណត់យ៉ាងសំខាន់នូវភាពត្រឹមត្រូវនៃការវាស់វែងនៅពេលប្រើក្នុងផលិតកម្មដ៏ធំ សម្រាប់គម្រោងនីមួយៗ យើងអាចសម្រេចបាននូវភាពត្រឹមត្រូវកាន់តែច្រើន។ វាងាយស្រួលធ្វើដោយគ្រាន់តែវាស់ Vcc ដោយប្រើ voltmeter និងមុខងារ readVcc() របស់យើង។ បន្ទាប់មកជំនួស 1125300L ថេរជាមួយនឹងអថេរថ្មី៖

scale_constant = internal1.1Ref * 1023 * 1000

internal1.1Ref = 1.1 * Vcc1 (voltmeter_readings) / Vcc2 (readVcc_function_readings)

តម្លៃដែលបានក្រិតតាមខ្នាតនេះនឹងក្លាយជាសូចនាករដ៏ល្អសម្រាប់ការវាស់វែងបន្ទះឈីប AVR ប៉ុន្តែអាចរងផលប៉ះពាល់ដោយការផ្លាស់ប្តូរសីតុណ្ហភាព។ មានអារម្មណ៍ថាមានសេរីភាពក្នុងការពិសោធន៍ជាមួយនឹងការវាស់វែងផ្ទាល់ខ្លួនរបស់អ្នក។

សេចក្តីសន្និដ្ឋាន

មានមុខងារជាច្រើនដែលអ្នកអាចធ្វើបានជាមួយនឹងមុខងារតូចមួយនេះ។ អ្នកអាចប្រើវ៉ុលយោងដែលមានស្ថេរភាពនៅជិត 5.0V ដោយមិនចាំបាច់មាន 5.0V នៅលើ Vcc ។ អ្នក​អាច​វាស់​វ៉ុល​ថ្ម​របស់​អ្នក ឬ​សូម្បី​តែ​មើល​ថា​តើ​អ្នក​កំពុង​ប្រើ​ថាមពល​ថ្ម ឬ​ថាមពល​ថេរ។

ជាចុងក្រោយ លេខកូដនឹងគាំទ្រ Arduinos ទាំងអស់ រួមទាំង Leonardo ថ្មី ក៏ដូចជាបន្ទះឈីបស៊េរី ATtinyX4 និង ATtinyX5 ។

ដ្យាក្រាមដែលមានប្រយោជន៍ត្រូវបានបង្ហាញសម្រាប់អ្នកដែលចូលចិត្តពិសោធន៍ជាមួយ Arduino ។ នេះគឺជា voltmeter ឌីជីថលសាមញ្ញដែលអាចវាស់ស្ទង់វ៉ុល DC ក្នុងជួរ 0 - 30V ។ ដូចធម្មតា បន្ទះ Arduino អាចត្រូវបានបំពាក់ដោយថ្ម 9V ។

ដូចដែលអ្នកបានដឹងហើយថាការបញ្ចូលអាណាឡូករបស់ Arduino អាចត្រូវបានប្រើដើម្បីវាស់វ៉ុល DC ក្នុងជួរ 0 - 5V ហើយជួរនេះអាចកើនឡើង។
ប្រើ resistors ពីរជាការបែងចែកវ៉ុល។ ឧបករណ៍បែងចែកនឹងកាត់បន្ថយវ៉ុលដែលបានវាស់ទៅកម្រិតនៃការបញ្ចូលអាណាឡូក Arduino ។ ហើយបន្ទាប់មកកម្មវិធីនឹងគណនាតម្លៃវ៉ុលពិត។

ឧបករណ៍ចាប់សញ្ញាអាណាឡូកនៅលើបន្ទះ Arduino រកឃើញវត្តមាននៃវ៉ុលនៅការបញ្ចូលអាណាឡូក ហើយបំប្លែងវាទៅជាទម្រង់ឌីជីថលសម្រាប់ដំណើរការបន្ថែមដោយ microcontroller ។ នៅក្នុងរូបភាព វ៉ុលត្រូវបានផ្គត់ផ្គង់ទៅការបញ្ចូលអាណាឡូក (A0) តាមរយៈការបែងចែកវ៉ុលសាមញ្ញដែលមានរេស៊ីស្តង់ R1 (100 kOhm) និង R2 (10 kOhm) ។

ជាមួយនឹងតម្លៃបែងចែកទាំងនេះ បន្ទះ Arduino អាចត្រូវបានផ្គត់ផ្គង់ដោយវ៉ុលពី 0 ទៅ
55V ។ នៅពេលបញ្ចូល A0 យើងមានវ៉ុលវាស់ដែលបែងចែកដោយ 11 ពោលគឺ 55V / 11 = 5V ។ នៅក្នុងពាក្យផ្សេងទៀតនៅពេលវាស់ 55V នៅ Arduino input យើងមានតម្លៃអនុញ្ញាតអតិបរមា 5V ។ នៅក្នុងការអនុវត្តវាជាការប្រសើរក្នុងការសរសេរជួរ "0 - 30V" នៅលើ voltmeter នេះដើម្បីឱ្យវានៅដដែល។
រឹមសុវត្ថិភាព!

កំណត់ចំណាំ

ប្រសិនបើការអានបង្ហាញមិនស្របគ្នានឹងការអានរបស់ voltmeter ឧស្សាហកម្ម (មន្ទីរពិសោធន៍) នោះវាចាំបាច់ត្រូវវាស់តម្លៃ Resistance R1 និង R2 ជាមួយនឹងឧបករណ៍ត្រឹមត្រូវ ហើយបញ្ចូលតម្លៃទាំងនេះជំនួស R1=100000.0 និង R2=។ 10000.0 នៅក្នុងកូដកម្មវិធី។ បន្ទាប់មកអ្នកគួរតែវាស់វ៉ុលពិតប្រាកដរវាងម្ជុល 5V និង "ដី" នៃបន្ទះ Arduino ជាមួយនឹង voltmeter មន្ទីរពិសោធន៍។ លទ្ធផលនឹងជាតម្លៃតិចជាង 5V ឧទាហរណ៍វានឹងមាន 4.95V។ តម្លៃពិតនេះគួរតែត្រូវបានបញ្ចូលក្នុងបន្ទាត់នៃកូដ
vout = (តម្លៃ * 5.0) / 1024.0 ជំនួសឱ្យ 5.0 ។
ដូចគ្នានេះផងដែរ, ព្យាយាមប្រើ resistors ភាពជាក់លាក់ជាមួយនឹងការអត់ធ្មត់ 1% ។

Resistors R1 និង R2 ផ្តល់ការការពារមួយចំនួនប្រឆាំងនឹងការកើនឡើងនៃវ៉ុលបញ្ចូល ទោះជាយ៉ាងណាក៏ដោយ សូមចាំថាតង់ស្យុងណាមួយលើសពី 55V អាចបំផ្លាញបន្ទះ Arduino ។ លើសពីនេះ ការរចនានេះមិនផ្តល់ការការពារប្រភេទផ្សេងទៀត (ពីការកើនឡើងថាមពល ពីការបញ្ច្រាសរាងប៉ូល ឬលើសវ៉ុល)។

កម្មវិធី voltmeter ឌីជីថល

/*
DC Voltmeter
Arduino DVM ផ្អែកលើគំនិតបែងចែកវ៉ុល
T.K.Hareendran
*/
# រួមបញ្ចូល
អេក្រង់ LCD LiquidCrystal (7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0.0;
អណ្តែត vin = 0.0;
អណ្តែត R1 = 100000.0; // ភាពធន់នៃ R1 (100K) - មើលអត្ថបទ!
អណ្តែត R2 = 10000.0; // ភាពធន់នៃ R2 (10K) - មើលអត្ថបទ!
តម្លៃ int = 0;
ការ​កំណត់​ទុក​ជា​មោឃៈ ())(
pinMode(បញ្ចូលអាណាឡូក, បញ្ចូល);
lcd.begin(16, 2);
lcd.print(“DC VOLTMETER”);
}
ចន្លោះប្រហោង ()
// អានតម្លៃនៅការបញ្ចូលអាណាឡូក
តម្លៃ = analogRead(analogInput);
vout = (តម្លៃ * 5.0) / 1024.0; // មើលអត្ថបទ
vin = vout / (R2/(R1+R2));
ប្រសិនបើ (វីន<0.09) {
vin=0.0;// សេចក្តីថ្លែងការណ៍ដើម្បីបញ្ឈប់ការអានដែលមិនចង់បាន !
}
lcd.setCursor(0, 1);
lcd.print(“បញ្ចូល V=”);
lcd.print(vin);
ការពន្យាពេល (500);
}

ដ្យាក្រាមគំនូសតាងនៃ Arduino-voltmeter

បញ្ជីនៃសមាសធាតុ

បន្ទះ Arduino Uno
ឧបករណ៍ទប់ទល់ 100 kOhm
រេស៊ីស្តង់ 10 kOhm
ឧបករណ៍ទប់ទល់ 100 ohm
10kOhm Trimmer Resistor
អេក្រង់ LCD 16?2 (Hitachi HD44780)