ការទទួលស្គាល់សំឡេង Arduino ។ ការគ្រប់គ្រងសំឡេងរបស់ Arduino ដោយប្រើ Processing និង Google Speech API

តើអ្នកចាំពីរបៀបដែលកាលពីប៉ុន្មានឆ្នាំមុន (ហើយប្រហែលជាឥឡូវនេះ) គំនិតនៃការគ្រប់គ្រងពន្លឺនៅក្នុងបន្ទប់ដោយការទះដៃគឺមានប្រជាប្រិយភាព? ប៉ុន្តែវាងាយស្រួលណាស់ អ្នកកំពុងដេកលើគ្រែ ខ្ជិលក្រោកពីដេកបិទភ្លើងដោយទះដៃ ឬយើងទៅផ្ទះងងឹត ត្រូវការពេលយូរដើម្បីរកកុងតាក់ ហើយបន្ទាប់មក ពីកម្រិតចាប់ផ្តើមមានការទះដៃមួយ ឬពីរ ហើយពន្លឺបានបើករួចហើយ។ វាហាក់បីដូចជាខ្ញុំថាគំនិតនេះនៅតែពាក់ព័ន្ធប៉ុន្តែវាអាចត្រូវបានអនុវត្តទៅច្រើនទៀត បច្ចេកវិទ្យាខ្ពស់។បើ​ធៀប​នឹង​កាល​ពី​៥​ឆ្នាំ​មុន​១០​ឆ្នាំ។ ឥឡូវនេះសម្រាប់ចំនួនតិចតួច អ្នកអាចទិញផ្នែកជាច្រើន និងរៀបចំការរចនា មុខងារស្រដៀងគ្នាដែលនឹងត្រូវបានពិភាក្សាដូចខាងក្រោម។

ថ្ងៃនេះយើងនឹងពិនិត្យមើលម៉ូឌុលដែលត្រូវបានរចនាឡើងដើម្បីស្គាល់ពាក្យបញ្ជាជាសំឡេង (រាប់បញ្ចូលទាំងសំឡេងនៅក្នុងពាក្យបញ្ជាសំឡេងដែលបានថតទុក) - ម៉ូឌុលសម្គាល់សំឡេង V3.1 (V3)ឬឈ្មោះការអ៊ិនកូដដែលជួបប្រទះញឹកញាប់ FZ0475 ។

កញ្ចប់ចែកចាយរួមមានម៉ូឌុលខ្លួនវា ( PCBខ្លាំងណាស់ គុណភាពល្អ) មីក្រូហ្វូននៅលើជើងដែលអាចបត់បែនបានជាមួយនឹងឧបករណ៍ភ្ជាប់ Jack 3.5 មីលីម៉ែត្រ និងទំនាក់ទំនង PLS ជ្រុងដែលមានកម្រិត 2.56 mm សម្រាប់បន្ទះម៉ូឌុល (ពួកវាមិនអាចប្រើបានទេប្រសិនបើភ្ជាប់ទៅទំនាក់ទំនងម៉ូឌុលតាមរបៀបផ្សេង) ។

សព្វថ្ងៃនេះមានម៉ូឌុលជាច្រើនដែលមានមុខងារស្រដៀងគ្នា។ ក្រុមហ៊ុនផលិតផ្សេងៗគ្នានិងអ្នកអភិវឌ្ឍន៍ ឬប្រតិបត្តិ។ ម៉ូឌុលសម្គាល់សំឡេងនេះ តាមគំនិតរបស់ខ្ញុំ មានតុល្យភាពជាក់លាក់រវាងតម្លៃ មុខងារ និងភាពងាយស្រួល។ ម៉ូឌុល EasyVR នឹងមានថាមពលខ្លាំង និងមានតម្លៃថ្លៃជាង។ ម៉ូឌុលដែលមានមូលដ្ឋានលើ LD3320 នឹងមានតម្លៃថោកជាង និងមានភាពរអាក់រអួល (យ៉ាងហោចណាស់ក៏មានការរអាក់រអួលដោយសារតែវាមិនងាយស្រួលក្នុងការស្វែងរកការពិពណ៌នាធម្មតាសម្រាប់ពួកគេ ប៉ុន្តែបើមិនដូច្នេះទេនេះគឺជាប្រធានបទ)។

លក្ខណៈនៃម៉ូឌុលទទួលស្គាល់សំឡេង V3.1 (V3)៖

  • វ៉ុលផ្គត់ផ្គង់ - 5 វ៉ុល
  • ការប្រើប្រាស់បច្ចុប្បន្ន - រហូតដល់ 40 mA
  • ចំណុចប្រទាក់ - UART, GPIO
  • ភាពត្រឹមត្រូវនៃការទទួលស្គាល់ - 99% (ក្រោមលក្ខខណ្ឌដ៏ល្អ)
  • ជួរ - អាស្រ័យលើមីក្រូហ្វូនដែលបានប្រើ សម្រាប់មីក្រូហ្វូនស្តង់ដាររួមបញ្ចូលក្នុងឧបករណ៍ ជួរគឺ 0.5 - 1 ម៉ែត្រ ចម្ងាយអតិបរមាជាមួយនឹងសំឡេងខ្លាំងគ្រប់គ្រាន់ ប៉ុន្តែប្រសិនបើសំឡេងស្ងាត់ អ្នកនឹងត្រូវយកមីក្រូហ្វូនទៅជិតមាត់របស់អ្នក។

ម៉ូឌុលគឺជាបន្ទះតូចស្អាតដែលមីក្រូកុងទ័រមេ (ប្លុកខ្មៅ) ឧបករណ៍ភ្ជាប់ Jack 3.5 មីលីម៉ែត្រសម្រាប់ភ្ជាប់មីក្រូហ្វូន និងមីក្រូសៀគ្វីមានទីតាំងនៅ។ អង្គចងចាំពន្លឺ, GPIO, UART និងទំនាក់ទំនងថាមពល, គូនៃ LEDs និងនៅសល់នៃឧបករណ៍ចាំបាច់សម្រាប់ប្រតិបត្តិការនៃសៀគ្វីនេះ - resistors, capacitors, រ៉ែថ្មខៀវ។ ទំហំបង្រួម board នឹងអនុញ្ញាតឱ្យអ្នកងាយស្រួលបញ្ចូលម៉ូឌុលទៅក្នុង ការអភិវឌ្ឍន៍របស់ខ្លួន។. ដើម្បីបង្កើនជួរនៃការបញ្ជាដោយសំឡេង ចាំបាច់ត្រូវប្រើមីក្រូហ្វូនពង្រីក។ នៅពេលសម្រេចបានជួរដែលអាចទទួលយកបាន ម៉ូឌុលគឺសមរម្យសម្រាប់ប្រើក្នុងប្រព័ន្ធ ផ្ទះឆ្លាត. បើគ្មានការកែប្រែដើម្បីកែលម្អជួរប្រតិបត្តិការទេ ម៉ូឌុលអាចត្រូវបានប្រើនៅក្នុង ប្រព័ន្ធកុំព្យូទ័រលើតុការគ្រប់គ្រងក៏ដូចជានៅក្នុងប្រព័ន្ធសុវត្ថិភាព (ការគ្រប់គ្រងការចូលប្រើ និងការរឹតបន្តឹង)។ ជាមួយនឹងមីក្រូហ្វូនស្ដង់ដារ ដោយសារតែជួរខ្លី វាជាការគួរឱ្យទុកចិត្តបំផុតក្នុងការប្រើម៉ូឌុលសម្គាល់សំឡេងជាកាស និង ឥតខ្សែបញ្ជូនពាក្យបញ្ជាទៅឧបករណ៍បញ្ជាដែលគ្រប់គ្រងអ្វីមួយដោយប្រើថ្ម និងម៉ូឌុលឥតខ្សែ (ឧទាហរណ៍ HC-05 ឬ HC-12 ឬឧបករណ៍សមរម្យផ្សេងទៀត) ។ ម៉ូឌុលអាចដំណើរការដោយគ្មាន microcontroller ខាងក្រៅ ដោយហេតុថាអ្នកផលិតផ្តល់នូវភាពឯករាជ្យនៃមុខងារ អ្នកគ្រាន់តែសរសេរវាម្តងប៉ុណ្ណោះ។ ពាក្យបញ្ជាសំឡេងនិងកំណត់ការកំណត់សម្រាប់ ការងារឯករាជ្យដោយមានជំនួយ ឧបករណ៍ខាងក្រៅ(PC ឬ MK) ។

ដូច្នេះ ដើម្បីចាប់ផ្តើមធ្វើការជាមួយម៉ូឌុលសម្គាល់សំឡេង យើងត្រូវភ្ជាប់វាទៅកុំព្យូទ័រ (អ្នកត្រូវការអាដាប់ទ័រ USB-UART) ឬទៅមីក្រូកុងទ័រ (អ្នកត្រូវអភិវឌ្ឍ កូដកម្មវិធីដើម្បីគ្រប់គ្រងម៉ូឌុល) ។

មិនមានភាពខុសគ្នាជាមូលដ្ឋានក្នុងការគ្រប់គ្រង និងកំណត់រចនាសម្ព័ន្ធម៉ូឌុលរវាងការភ្ជាប់ទៅកុំព្យូទ័រ ឬ microcontroller ដូច្នេះសម្រាប់ភាពច្បាស់លាស់ យើងនឹងប្រើកុំព្យូទ័រសម្រាប់ការកំណត់រចនាសម្ព័ន្ធ។ សេចក្តីណែនាំពិពណ៌នាអំពីពាក្យបញ្ជាសម្រាប់ម៉ូឌុលក្នុងទម្រង់គោលដប់ប្រាំមួយ ដូច្នេះដើម្បីភាពងាយស្រួល អ្នកក៏នឹងត្រូវការស្ថានីយដែលបញ្ជូនបៃជាទម្រង់លេខគោលដប់ប្រាំមួយ ឧទាហរណ៍ AccessPort (អាចទាញយកនៅចុងបញ្ចប់នៃអត្ថបទ)។ លើសពីនេះ ក្រុមហ៊ុនផលិតផ្តោតលើអ្នកប្រើប្រាស់វេទិកា Arduino និងផ្តល់បណ្ណាល័យសម្រាប់ការប្រើប្រាស់ម៉ូឌុលនេះ និងការណែនាំសម្រាប់ការប្រើប្រាស់បណ្ណាល័យនេះ។ ទោះយ៉ាងណាក៏ដោយ ពួកយើងជាច្រើនចាប់អារម្មណ៍ក្នុងការធ្វើការជាមួយម៉ូឌុលផ្ទាល់ជាជាងតាមរយៈ Arduino wrapper ។

មុនពេលចាប់ផ្តើមការងារសូមក្រឡេកមើលក្តារ។ នៅចុងបញ្ចប់នៃក្តារនៅខាងស្តាំគឺជារន្ធសម្រាប់ភ្ជាប់មីក្រូហ្វូន ហើយនៅម្ខាងទៀតមានទំនាក់ទំនងបួននៃចំណុចប្រទាក់ UART ។ នៅផ្នែកខាងក្រោមមានទំនាក់ទំនងចំនួនប្រាំបីដែលត្រូវបានប្រើដើម្បីបញ្ចេញសញ្ញាដែលបណ្តាលមកពីការទទួលស្គាល់ពាក្យបញ្ជាសំឡេង។ នៅផ្នែកខាងលើ ម្ជុលចំនួនបួនដែលបានកំណត់រចនាសម្ព័ន្ធជាការបញ្ចូលសញ្ញាត្រូវបានប្រើដើម្បីប្តូររវាងក្រុម (នៃពាក្យបញ្ជាសំឡេងប្រាំពីរនីមួយៗ) នៃពាក្យបញ្ជា ប្រសិនបើមុខងារបែបនេះត្រូវបានប្រើ។ ហើយម្ជុលចំនួនប្រាំមួយដែលនៅសល់នៅលើកំពូលប្រហែលជាត្រូវបានប្រើដើម្បីភ្ជាប់ទៅអង្គចងចាំរបស់ម៉ូឌុល។

ប្រព័ន្ធពាក្យបញ្ជាត្រូវបានប្រើដើម្បីដំណើរការ និងកំណត់រចនាសម្ព័ន្ធម៉ូឌុល។ ទិដ្ឋភាពទូទៅស៊ុមមើលទៅដូចនេះ:

ពាក្យបញ្ជាបួនដំបូង 00, 01, 02, 03 ត្រូវបានប្រើដើម្បីពិនិត្យមើលស្ថានភាពម៉ូឌុល និងការកំណត់របស់វា។ ពាក្យបញ្ជាប្រាំមួយបន្ទាប់ 10, 11, 12, 13, 14, 15 ត្រូវបានប្រើដើម្បីផ្លាស់ប្តូរការកំណត់ម៉ូឌុល រួមទាំងការគ្រប់គ្រងច្រកទិន្នផល និងការកំណត់ការផ្ទុកដោយស្វ័យប្រវត្តិ។ បន្ទាប់មក បីពាក្យបញ្ជា 20,21,22 ត្រូវបានប្រើដើម្បីថតសំឡេងបញ្ជា។ ពាក្យបញ្ជាបីបន្ទាប់ 30,31,32 ត្រូវបានប្រើដើម្បីគ្រប់គ្រងការទទួលស្គាល់ពាក្យបញ្ជាសំឡេង។ ពាក្យបញ្ជា 0A, 0D, FF ត្រូវបានប្រើតែនៅពេលដែលទិន្នន័យត្រូវបានបញ្ជូនមកវិញដោយម៉ូឌុលខ្លួនវាប៉ុណ្ណោះ។ តាមពិតមិនមានពាក្យបញ្ជាច្រើនទេ ហើយទាំងអស់នេះមិនគួរឱ្យខ្លាចដូចដែលវាហាក់ដូចជានៅ glance ដំបូងនៅក្នុងឯកសារសម្រាប់ម៉ូឌុល។ សូមក្រឡេកមើលពាក្យបញ្ជាដែលចាំបាច់ដើម្បីធ្វើការជាមួយម៉ូឌុលសម្គាល់សំឡេង។ មិនមែនទាំងអស់ទេ។ ក្រុមដែលមានស្រាប់មានលក្ខណៈជាក់ស្តែង។

គួរកត់សម្គាល់ថាម៉ូឌុលអាចដំណើរការដោយគ្មាន microcontroller ខាងក្រៅ ហើយក៏អាចគ្រប់គ្រងអ្វីមួយដោយឯករាជ្យជាមួយនឹងច្រកទិន្នផលរបស់វាផងដែរ។ ដើម្បីធ្វើដូចនេះអ្នកត្រូវកំណត់រចនាសម្ព័ន្ធពួកវា (ពាក្យបញ្ជា 12, 13, 14) ។

ក្រុម 12 - កំណត់រចនាសម្ព័ន្ធច្រកទិន្នផល។ ពាក្យបញ្ជានេះកំណត់រចនាសម្ព័ន្ធរបៀបប្រតិបត្តិការនៃច្រកលទ្ធផលម៉ូឌុលទទួលស្គាល់សំឡេង។

ទម្រង់៖ | អេអេ | ០៣ | 12 | របៀប | 0A |

កន្លែងដែល MODE អាចយកតម្លៃចំនួនបួន៖ 0 – របៀបជីពចរ (នៅពេលដែលពាក្យបញ្ជាសំឡេងត្រូវបានកេះ លទ្ធផលដែលត្រូវនឹងពាក្យបញ្ជានឹងផ្លាស់ប្តូរស្ថានភាពរបស់វាសម្រាប់ពេលវេលាកំណត់ដោយពាក្យបញ្ជា 13) 1 – របៀបប្តូរ (បិទ/បើក ឬត្រឡប់) (រាល់ពេល ពាក្យ​បញ្ជា​សំឡេង​ត្រូវ​បាន​កេះ លទ្ធផល​ដែល​ត្រូវ​នឹង​ពាក្យ​បញ្ជា​សំឡេង​ដាក់​បញ្ច្រាស) 2 - នៅ​លើ​របៀប (ពេល​បញ្ជា​ដោយ​សំឡេង​ត្រូវ​បាន​កេះ លទ្ធផល​នឹង​ចូល​ទៅ​ក្នុង​ស្ថានភាព​ឡូជីខល ហើយ​នឹង​លែង​ចូល​ទៅ​ក្នុង​ស្ថានភាព​សូន្យ​ឡូជីខល​ទៀត​ហើយ កំណត់​ឡើង​វិញ​គឺ អនុវត្តដោយពាក្យបញ្ជា 14), 3 - របៀបបិទ (ស្រដៀងទៅនឹងរបៀបបើក តែផ្ទុយទៅវិញ នៅពេលដែលពាក្យបញ្ជាសំឡេងត្រូវបានកេះ លទ្ធផលនឹងទៅរដ្ឋសូន្យឡូជីខល)។

ការអនុវត្តជាក់ស្តែងបំផុតគឺរបៀបប្តូរដែលមិនត្រូវការពាក្យបញ្ជាដែលមិនចាំបាច់។ របៀបជីពចរជាការល្អ ប៉ុន្តែតក្កវិជ្ជានៃរបៀបនេះគឺថានៅពេលដែលពាក្យបញ្ជាសំឡេងត្រូវបានកេះ វាចេញឡូជីខលម្តង សម្រាប់រយៈពេលពី 10 ms ទៅ 1 វិនាទី។ នេះមិនគ្រប់គ្រាន់ទេ។ ទោះបីជាអាស្រ័យលើតម្រូវការសម្រាប់របៀបនេះ វាអាចមានប្រយោជន៍។ របៀបបើក និងបិទត្រូវបានអនុវត្តដោយរអាក់រអួល ព្រោះវាទាមទារឱ្យមានការប្រតិបត្តិពាក្យបញ្ជាបន្ថែម។

ក្រុម ១៣ - កំណត់រយៈពេលជីពចរនៃរបៀបដែលត្រូវគ្នា។

ទម្រង់៖ | អេអេ | ០៣ | ១៣ | កម្រិត | 0A |

កន្លែងដែល LEVEL យកតម្លៃពី 00 ទៅ 0F (ដែលត្រូវគ្នានឹងរយៈពេលពី 10 ms ដល់ 1 s)។

កម្រិត រយៈពេល
0x00 10 ms
0x01 15 ms
0x02 20 ms
0x03 25 ms
0x04 30 ms
0x05 35 ms
0x06 40 ms
0x07 45 ms
0x08 50 ms
0x09 75 ms
0x0A 100 ms
0x0B 200 ms
0x0C 300 ms
0x0D 400 ms
0x0E 500 ms
0x0F 1 ស

ក្រុម ១៤ - កំណត់ច្រកទិន្នផលឡើងវិញទៅស្ថានភាពដែលបានបញ្ជាក់ដោយរបៀបបើកឬបិទ។

ទម្រង់៖ | អេអេ | ០៣ | ១៤ | អេហ្វ | 0A | - កំណត់ច្រកទិន្នផលទាំងអស់ឡើងវិញ

| អេអេ | ០៣+ន | ១៤ | IO0 | ... | អ៊ីយ៉ូន | 0A | - កំណត់ច្រកលទ្ធផលដែលបានជ្រើសរើសឡើងវិញ

ដែល n ជាចំនួនម្ជុលដែលត្រូវបានកំណត់ឡើងវិញដោយជ្រើសរើស IO0...IOn គឺជាបញ្ជីនៃម្ជុលទាំងនេះនៅក្នុងស៊ុមបញ្ជូនទិន្នន័យ។

បន្ទាប់​មក សម្រាប់​ការ​បញ្ជា​ដោយ​សំឡេង​ត្រូវ​តែ​ត្រូវ​បាន​កត់ត្រា​ក្នុង​ម៉ូឌុល (ហ្វឹកហាត់​ម៉ូឌុល)។ មានដែនកំណត់នៅទីនេះ។ មានតែពាក្យបញ្ជាចំនួន 7 ប៉ុណ្ណោះដែលអាចត្រូវបានគេទទួលស្គាល់ក្នុងពេលតែមួយ ទោះបីជាមានពាក្យបញ្ជាជាច្រើនទៀតអាចត្រូវបានកត់ត្រាក៏ដោយ។ ដើម្បីពង្រីកជួរនៃពាក្យបញ្ជាសំឡេងដែលនឹងត្រូវបានទទួលស្គាល់ ប្រព័ន្ធដាក់ជាក្រុម (ពាក្យបញ្ជា 32) ត្រូវបានប្រើប្រាស់ ដែលត្រូវបានគ្រប់គ្រងដោយច្រកបញ្ចូលម៉ូឌុល។ តាមរយៈការកំណត់ការកំណត់សញ្ញានៅលើម្ជុលទាំងនេះ អ្នកជ្រើសរើសក្រុមនៃពាក្យបញ្ជាដែលនឹងត្រូវបានទទួលស្គាល់។ នេះគឺដោយសារតែការអនុវត្តមានកម្រិតនៃឧបករណ៍បញ្ជាសំឡេងរបស់ម៉ូឌុល។

ក្រុម 20 - ការ​ថត​ពាក្យ​បញ្ជា​សំឡេង​មួយ​ឬ​ច្រើន​។

ទម្រង់៖ | អេអេ | ០៣+ន | 20 | R0 | ... | Rn | 0A |

ដែល n ជា​ចំនួន​នៃ​ការ​បញ្ជា​ជា​សំឡេង​ដែល​បាន​ថត (ប្រសិនបើ​ពាក្យ​បញ្ជា​មួយ n=0 ត្រូវ​បាន​កត់ត្រា​នោះ ពាក្យ​បញ្ជា​ពីរ n=1 និង​បន្តបន្ទាប់​ទៀត​ដោយ​អនុលោម​តាម​ទម្រង់​ទូទៅ​សម្រាប់​ការ​បញ្ជូន​ពាក្យ​បញ្ជា Lenght - length) R0...Rn ចំនួន​នៃ​ការ​បញ្ជា​ជា​សំឡេង (AA 03 20 03 0A - ពាក្យបញ្ជាសម្រាប់ការថតសំឡេងបញ្ជាទីបី) ។

ក្រុម 21 - កត់ត្រាពាក្យបញ្ជាសំឡេងមួយហើយកំណត់ហត្ថលេខាសម្រាប់វា។

ទម្រង់៖ | អេអេ | ០៣+SIGLEN | ២១ | កត់ត្រា | SIG | 0A |

ដែលជាកន្លែងដែល RECORD គឺជាលេខបញ្ជាដោយសំឡេង SIG គឺជាហត្ថលេខា (អាចមានបៃជាច្រើន ដូច្នេះបៃនីមួយៗអាចឆ្លើយតបទៅនឹងការអ៊ិនកូដតួអក្សរអក្ខរក្រមប្រសិនបើចាំបាច់) SIGLEN គឺជាចំនួនបៃដែលបង្កើតហត្ថលេខា។

ក្រុម 22 - បន្ថែម ឬលុបហត្ថលេខាសម្រាប់ពាក្យបញ្ជាសំឡេងដែលបានជ្រើសរើស។

ទម្រង់៖ | អេអេ | ០៣+SIGLEN | ២២ | កត់ត្រា | SIG | 0A | - បន្ថែមហត្ថលេខា

| អេអេ | ០៣ | ២២ | កត់ត្រា | 0A | - ការដកហត្ថលេខាចេញ

នៅពេលថតសំឡេងបញ្ជា អ្នកត្រូវតែត្រូវបានដឹកនាំដោយសញ្ញា LED ។ បន្ទាប់ពីបញ្ចូលពាក្យបញ្ជាដែលចាប់ផ្តើមដំណើរការថតនោះ LED ពណ៌លឿង (ពណ៌ទឹកក្រូច) ចាប់ផ្តើមភ្លឹបភ្លែតៗ។ ដរាបណាអំពូល LED ពណ៌ក្រហមភ្លឺ អ្នកត្រូវតែនិយាយពាក្យបញ្ជាជាសំឡេងទៅក្នុងមីក្រូហ្វូន។ ប្រសិនបើជោគជ័យ អំពូល LED ពណ៌លឿង (ពណ៌ទឹកក្រូច) នឹងភ្លឺ ហើយបន្ទាប់មកពណ៌ក្រហមម្តងទៀត - អ្នកត្រូវបញ្ជាក់ពាក្យបញ្ជាដោយសំឡេង ហើយនិយាយម្តងទៀត។ ប្រសិនបើជោគជ័យ អំពូល LED ទាំងពីរនឹងភ្លឺឡើង - ពាក្យបញ្ជាសំឡេងត្រូវបានរក្សាទុក។

នៅពេលដែលការបញ្ជាដោយសំឡេងត្រូវបានកត់ត្រានៅក្នុងម៉ូឌុល គ្មានអ្វីនឹងកើតឡើងរហូតដល់ពាក្យបញ្ជាទាំងនេះត្រូវបានដាក់ក្នុង "អ្នកទទួលស្គាល់" របស់ម៉ូឌុល។ ដើម្បីធ្វើដូចនេះអ្នកត្រូវប្រើពាក្យបញ្ជា 30. បន្ទាប់ពីប្រតិបត្តិពាក្យបញ្ជានេះ ម៉ូឌុលនឹងចាប់ផ្តើមរង់ចាំពាក្យបញ្ជាសំឡេងដែលត្រូវគ្នានឹងគំរូដែលបានរក្សាទុក។ មានតែពាក្យបញ្ជាចំនួនប្រាំពីរប៉ុណ្ណោះដែលអាចទទួលស្គាល់ក្នុងពេលតែមួយ។ ក្នុងករណីនេះ LED ពណ៌លឿង (ពណ៌ទឹកក្រូច) នៅលើបន្ទះម៉ូឌុលនឹងភ្លឹបភ្លែតៗ។

ក្រុម 30 - ផ្ទុកកំណត់ត្រាទៅក្នុងឧបករណ៍ទទួលស្គាល់របស់ម៉ូឌុល។

ទម្រង់៖ | អេអេ | 2+n | ៣០ | R0 | ... | Rn | 0A |

ទម្រង់ឆ្លើយតបមានដូចខាងក្រោម៖ | អេអេ | ០៧ | 0D | 00 | GRPM | R | រី | SIGLEN | SIG | 0A |

កន្លែងដែល GRPM គឺជាព័ត៌មានអំពីក្រុមដែលពាក្យបញ្ជាជាកម្មសិទ្ធិ (ប្រសិនបើប្រើ) R គឺជាពាក្យបញ្ជាសំឡេងដែលត្រូវបានទទួលស្គាល់ (ដោយប្រើទិន្នន័យនេះ អ្នកអាចបែងចែកពាក្យបញ្ជាពីគ្នាទៅវិញទៅមក ប្រសិនបើហត្ថលេខាមិនត្រូវបានប្រើ) RI គឺជាលិបិក្រមពាក្យបញ្ជានៅក្នុងអ្នកទទួលស្គាល់ , SIGLEN គឺជាប្រវែងនៃហត្ថលេខាជាបៃ, SIG - ហត្ថលេខា (ប្រសិនបើប្រើ) ។

ហើយចុងក្រោយប្រសិនបើម៉ូឌុលគួរតែដំណើរការដោយឯករាជ្យនោះអ្នកត្រូវប្រើពាក្យបញ្ជា 15 ទៅ ការចាប់ផ្តើមដោយស្វ័យប្រវត្តិនេះបើយោងតាមការកំណត់ជាមុនរបស់អ្នកទទួលស្គាល់។ ក្នុងករណីនេះ ម៉ូឌុលសម្គាល់សំឡេងនឹងដំណើរការដោយឯករាជ្យដោយមិនចាំបាច់មានការចាប់ផ្តើមបន្ទាប់ពីបើក។

ក្រុម 15 - កំណត់​ឱ្យ​អ្នក​ទទួល​ស្គាល់​ឱ្យ​ចាប់ផ្ដើម​ស្វ័យប្រវត្តិ​ពេល​បើក។

ទម្រង់៖ | អេអេ | ០៣ | ១៥ | 00 | 0A | - បិទមុខងារ autorun

| អេអេ | ០៣+ន | ១៥ | BITMAP | R0 | ... | Rn | 0A | - កំណត់មុខងារ autorun

ដើម្បីគ្រប់គ្រងការប្រតិបត្តិត្រឹមត្រូវនៃពាក្យបញ្ជា ពួកវានីមួយៗមានការឆ្លើយតបផ្ទាល់ខ្លួន។ បើចាំបាច់ ទិន្នន័យទាំងអស់អាចត្រូវបានរកឃើញនៅក្នុងឯកសារសម្រាប់ម៉ូឌុលសម្គាល់សំឡេងដែលបានភ្ជាប់នៅចុងបញ្ចប់នៃអត្ថបទ។ កុំភ្លេចថាអ្វីៗទាំងអស់។ តម្លៃជាលេខបានបង្ហាញនៅក្នុង លេខគោលដប់ប្រាំមួយ។ទម្រង់។

ដូច្នេះ ដោយប្រើប្រព័ន្ធបញ្ជា អ្នកអាចកំណត់រចនាសម្ព័ន្ធម៉ូឌុលសម្គាល់សំឡេងដោយបត់បែនសម្រាប់ប្រើសម្រាប់គោលបំណងផ្សេងៗ។ ប្រសិនបើ ការត្រួតពិនិត្យសាមញ្ញដោយសារច្រកទិន្នផលម៉ូឌុលមិនគ្រប់គ្រាន់ ម៉ូឌុលសម្គាល់សំឡេងអាចត្រូវបានភ្ជាប់ទៅឧបករណ៍ផ្សេងទៀតតាមរយៈ UART ឬ GPIO ។ សម្រាប់ ការតភ្ជាប់ឥតខ្សែអ្នកអាចប្រើម៉ូឌុលដែលបានពិភាក្សាពីមុន។

ដោយប្រើម៉ូឌុលឥតខ្សែ អ្នកអាចភ្ជាប់ម៉ូឌុលសម្គាល់សំឡេងទៅឧបករណ៍ណាមួយដែលវាចាំបាច់។ ជាឧទាហរណ៍ ចូរយើងភ្ជាប់វាទៅ microcontroller ដែលនឹងគ្រប់គ្រង LEDs ដោយផ្អែកលើទិន្នន័យដែលទទួលបានអំពីការទទួលស្គាល់ការបញ្ជាដោយសំឡេង។ ម៉ូឌុលឥតខ្សែអនុញ្ញាតឱ្យទិន្នន័យត្រូវបានផ្ទេរក្នុងទិសដៅពីរ ដូច្នេះប្រសិនបើចាំបាច់ អ្នកអាចសរសេរកូដសម្រាប់ microcontroller ដើម្បីចាប់ផ្តើមម៉ូឌុលសំឡេង និងកត់ត្រាការបញ្ជាជាសំឡេង។ ក្នុងករណីរបស់យើង នៅក្រោមការគ្រប់គ្រងកុំព្យូទ័រ ពាក្យបញ្ជាជាសំឡេងជាច្រើនត្រូវបានកត់ត្រារួចហើយនៅក្នុងម៉ូឌុល ហើយការទទួលស្គាល់ដោយស្វ័យប្រវត្តិត្រូវបានកំណត់នៅពេលដែលថាមពលត្រូវបានបើក ដូច្នេះសម្រាប់ microcontroller យើងនឹងចុះឈ្មោះតែការទទួលទិន្នន័យ និងការគ្រប់គ្រង LED ប៉ុណ្ណោះទាក់ទងនឹងទិន្នន័យនេះ។ microcontroller STM32F103C8T6 ប្រើ USART1 ដើម្បីទទួលទិន្នន័យ និងម្ជុល PB10...PB15 ដែលបានកំណត់រចនាសម្ព័ន្ធជាលទ្ធផល ដែលគ្រប់គ្រង LEDs ។ កូដប្រភពមានទីតាំងនៅក្នុងឧបសម្ព័ន្ធនៅចុងបញ្ចប់នៃអត្ថបទ។

បន្តិចអំពីលទ្ធផល

ការសម្គាល់សំឡេងមិនត្រឹមត្រូវទាំងស្រុងទេ។ វាអាស្រ័យលើពាក្យបញ្ជាដែលបានជ្រើសរើស និងសំឡេងរបស់អ្នកប្រើប្រាស់។ ក្នុងអំឡុងពេលធ្វើតេស្តខ្ញុំបានរកឃើញជាច្រើន។ ចំណុចអវិជ្ជមាន. នៅពេលបង្រៀនពាក្យបញ្ជាម៉ូឌុល ពាក្យបញ្ជាសំឡេង "មួយ" និង "ពីរ" ត្រូវបានជ្រើសរើស។ ពាក្យបញ្ជា "ពីរ" តែងតែឆ្លងកាត់យ៉ាងច្បាស់ ប៉ុន្តែពាក្យបញ្ជា "មួយ" ជារឿយៗត្រូវបានកំណត់ថាជាពាក្យបញ្ជា "ពីរ" ហើយកូដនៃពាក្យបញ្ជាទីពីរត្រូវបានប្រតិបត្តិតាម។ លើសពីនេះ នៅពេលព្យាយាមផ្តល់ការបញ្ជាដោយសំឡេងជាភាសាអង់គ្លេស (ហើយពួកវាមិនត្រូវបានកត់ត្រានៅក្នុងម៉ូឌុលសំឡេងទេ) ពាក្យបញ្ជា "មួយ" តែងតែត្រូវបានកំណត់ថាជា "ពីរ" ។ ប្រហែលជាវានិយាយអំពីការបញ្ចេញសំឡេង សំឡេង និងទិដ្ឋភាពផ្សេងទៀតនៃសំឡេងរបស់មនុស្សដែលបានបង្កប់នៅក្នុងក្បួនដោះស្រាយសម្រាប់ការអ៊ិនកូដម៉ូឌុលសំឡេងនៃពាក្យបញ្ជានិយាយ។ ទោះជាយ៉ាងណាក៏ដោយក្រុមហ៊ុនផលិតអាថ៌កំបាំងទាំងនេះ បើកការចូលប្រើពួកគេមិនផ្តល់ឱ្យវាទេ។ លើសពីនេះទៀតគុណភាពនៃការទទួលស្គាល់ត្រូវបានប៉ះពាល់ដោយលក្ខខណ្ឌសំលេងរំខានពីខាងក្រៅ - សំលេងរំខានពីផ្លូវ, សំលេងអ្នកគាំទ្រ, សំលេងចៃដន្យជាដើម។ ក្រុមហ៊ុនផលិតទាក់ទាញការយកចិត្តទុកដាក់ចំពោះការពិតដែលថា កម្រិតខ្ពស់ភាពត្រឹមត្រូវនៃការទទួលស្គាល់កើតឡើងក្រោមលក្ខខណ្ឌដ៏ល្អ។ គំនិតនៃការប្រើប្រាស់មីក្រូហ្វូនជាមួយ amplifier ពិតណាស់នឹងបង្កើនជួរប្រតិបត្តិការរបស់ឧបករណ៍ ប៉ុន្តែវាក៏នឹងបង្កើនលទ្ធភាពនៃកំហុសផងដែរ ចាប់តាំងពីការពង្រីកសម្លេងនឹងបង្កើនសំលេងរំខានផងដែរ។

នៅទីបញ្ចប់ប្រសិនបើអ្នកមានតម្រូវការទាបសម្រាប់ការទទួលស្គាល់សំឡេង និងការប្រតិបត្តិពាក្យបញ្ជាជាសំឡេង នោះម៉ូឌុលនេះនឹងធ្វើការចេញដោយស្មោះត្រង់នូវប្រាក់ដែលបានចំណាយលើវា។

បញ្ជីនៃធាតុវិទ្យុសកម្ម

ការកំណត់ ប្រភេទ និកាយ បរិមាណ ចំណាំហាងបន្ទះចំណាំរបស់ខ្ញុំ
អាយ.ស៊ី.១ MK STM32

STM32F103C8

1 ទៅ notepad
VR1 និយតករលីនេអ៊ែរ

AMS1117-3.3

1 ទៅ notepad
MOD1, MOD3 ម៉ូឌុលឥតខ្សែHC-122 ទៅ notepad
MOD2 ម៉ូឌុលសម្គាល់សំឡេងVR3.11 ទៅ notepad
Z1 រ៉ែថ្មខៀវ8 MHz1

នៅក្នុងគម្រោងនេះ ខ្ញុំបានបញ្ចូលឧបករណ៍ចាប់សញ្ញាមុខ និងប្រព័ន្ធតាមដាន។

សង្ខេបខ្លឹមសារនៃគម្រោង៖ កាមេរ៉ាបណ្ដាញដែលបានដំឡើងនៅលើយន្តការបង្វិលត្រូវបានភ្ជាប់ទៅកុំព្យូទ័រដែលគ្រប់គ្រងដោយបន្ទប់ប្រតិបត្តិការ ប្រព័ន្ធវីនដូនិងជាមួយការដំឡើង កម្មវិធី OpenCV. ប្រសិនបើកម្មវិធីរកឃើញមុខនៅក្នុងវាលនៃទិដ្ឋភាពនៃ webcam កណ្តាលនៃមុខត្រូវបានគណនា។ កូអរដោនេ X និង Y ត្រូវបានបញ្ជូនទៅឧបករណ៍បញ្ជា Arduino ដែលត្រូវបានភ្ជាប់ទៅកុំព្យូទ័រតាមរយៈ USB ។ នៅក្នុងវេនឧបករណ៍បញ្ជា Arduino ដោយផ្អែកលើពាក្យបញ្ជាដែលបានទទួលគ្រប់គ្រង servomotors ពីរ: តាមកូអរដោនេ X និងតាមបណ្តោយកូអរដោនេ Y i.e. ប្រព័ន្ធតាមដានត្រូវបានផ្តល់ជូន។

បណ្ណាល័យ OpenCV ( ប្រភពបើកចំហបណ្ណាល័យចក្ខុវិស័យកុំព្យូទ័រ) អាចទាញយកបាន។ បណ្ណាល័យមានពហុវេទិកា ហើយបច្ចុប្បន្នមានសម្រាប់ប្រព័ន្ធប្រតិបត្តិការដូចខាងក្រោម៖ Windows, Linux, Android, Mac OS និងសូម្បីតែ iOS ។ បណ្ណាល័យផ្តល់នូវដំណើរការរូបភាពក្នុងពេលវេលាជាក់ស្តែង។ សរសេរក្នុង C/C++ ។

នោះ។ គម្រោងនេះ។គឺជាល្បាយនៃដំណោះស្រាយទន់ និងរឹង។ ដំណើរការរូបភាពត្រូវបានអនុវត្តនៅលើកុំព្យូទ័រ ហើយការគ្រប់គ្រង servo ត្រូវបានអនុវត្តដោយប្រើឧបករណ៍បញ្ជា។

ដូច្នេះអ្វីដែលខ្ញុំបានប្រើសម្រាប់គម្រោង៖

កម្មវិធី៖
Arduino IDE 1.0 សម្រាប់ Windows

Microsoft Visual C++ 2010 Express SP1
បណ្ណាល័យ Serial C++ សម្រាប់ Win32 (ដោយ Thierry Schneider)

ជាតិដែក៖
កុំព្យូទ័រជាមួយ Windows 7 SP1
Arduino Unoឬឆបគ្នា + PSU
2 servos
កាមេរ៉ាបណ្ដាញ USB

ដូច្នេះ តោះទៅ។

ជំហានទី 1: ដំឡើងកម្មវិធី

1) ប្រសិនបើអ្នកមានប្រព័ន្ធប្រតិបត្តិការ Windows បន្ទាប់មកទាញយកឯកសារ OpenCV-2.3.1-win-superpack.exe (ឬច្រើនជាងនេះ កំណែក្រោយ) ហើយដំឡើងបណ្ណាល័យ។

2) ទាញយក និងដំឡើង Microsoft Visual C++ 2010 Express ។ ប្រសិនបើអ្នកមាន 64 ប៊ីត កំណែវីនដូបន្ទាប់មកអ្នកក៏នឹងត្រូវទាញយក Windows SDK ផងដែរ (ប៉ុន្តែប្រហែលជាមានបញ្ហាសម្រាប់កំណែ 64; ខ្ញុំមិនអាចយក OpenCV ដើម្បីដំណើរការក្រោម Windows 7 x64)។

សូមអានដំណើរការនៃការបង្កើត OpenCV សម្រាប់ Visual C++ នៅលើគេហទំព័រផ្លូវការ។

ជំហាន 2. ការដំឡើងកាមេរ៉ា និង servos

ខ្ញុំ​មិន​បាន​ធ្វើ​ឱ្យ​ការ​រចនា​មាន​ភាព​ជាប់​លាប់​ទេ ព្រោះ​បន្ទាប់​ពី​សម្រេច​បាន​នូវ​គោល​ដៅ​ចុង​ក្រោយ ខ្ញុំ​បាន​រុះរើ​អ្វី​គ្រប់​យ៉ាង​សម្រាប់​គម្រោង​បន្ទាប់។
ខ្ញុំបានភ្ជាប់ webcam ទៅនឹង servomotor អ័ក្ស X ហើយវាបានភ្ជាប់វាទៅនឹង servomotor អ័ក្ស Y ហើយខ្ញុំបានធានារចនាសម្ព័ន្ធទាំងមូលនេះដោយការគៀប "ដៃទីបី" ។

ជំហានទី 3: ការតភ្ជាប់

ឧបករណ៍ភ្ជាប់ servomotor:
ម្ជុលពណ៌លឿងពី servo អ័ក្ស X ត្រូវបានភ្ជាប់ទៅ pin 9 ឧបករណ៍បញ្ជា Arduino
ម្ជុលពណ៌លឿងពី servo អ័ក្ស Y ត្រូវបានភ្ជាប់ទៅ pin 10 នៃឧបករណ៍បញ្ជា Arduino
ម្ជុល Vcc ក្រហមពី servo ភ្ជាប់ទៅ pin 5V
ម្ជុល GND ខ្មៅពី servo ត្រូវបានភ្ជាប់ទៅម្ជុល GND របស់ឧបករណ៍បញ្ជា Arduino

ការភ្ជាប់បណ្តាញកាមេរ៉ា៖
កាមេរ៉ាបណ្ដាញភ្ជាប់ទៅកុំព្យូទ័រតាមរយៈ ចំណុចប្រទាក់ USB. កម្មវិធី C++ កំណត់ webcam តាមលេខច្រក USB របស់វា។ អ្នកប្រហែលជាត្រូវបញ្ជាក់ច្រកនៅក្នុងកម្មវិធី។

ការភ្ជាប់ឧបករណ៍បញ្ជា Arduino UNO៖
ឧបករណ៍បញ្ជាក៏ភ្ជាប់ទៅកុំព្យូទ័រតាមរយៈចំណុចប្រទាក់ USB ។ ច្រក COM និម្មិតលេចឡើងនៅក្នុងប្រព័ន្ធ ដែលត្រូវតែបន្ថែមទៅកូដកម្មវិធីនៅក្នុង C++ ។

  • ដំណើរការ
  • ការអភិវឌ្ឍន៍គេហទំព័រ
  • គំនិត៖

    ដូចម្ដេចដែលគំនិតបានមកដើម្បីបង្កើតសំឡេង ការគ្រប់គ្រង Arduinoប៉ុន្តែ Arduino តែមួយមិនគ្រប់គ្រាន់ទេព្រោះ ... សម្រាប់ប្រព័ន្ធផ្ទះឆ្លាតវៃ អ្នកក៏ត្រូវទំនាក់ទំនងជាមួយកុំព្យូទ័រ និងប្រព័ន្ធរបស់វាផងដែរ។

    ការស្វែងរកដំណោះស្រាយ៖

    BitVoicer
    ខ្ញុំបានឆ្លងកាត់អត្ថបទគ្រប់ប្រភេទដោយប្រើ BitVoicer ភ្ជាប់ជាមួយ Arduino ប៉ុន្តែបញ្ហាគឺថា BitVoicer ដំណើរការតែលើ Windows ប៉ុណ្ណោះ ហើយវាមិនអនុញ្ញាតឱ្យប្រើប្រព័ន្ធនៅលើ ឧបករណ៍សាមញ្ញដូចជា Rasberry Pi កំពុងដំណើរការ Unix ។
    ការទទួលស្គាល់សំឡេង Arduino
    Arduino ក៏អាចគ្រប់គ្រងដោយសំឡេងផងដែរ ដោយសារម៉ូឌុលសម្គាល់សំឡេង ប៉ុន្តែរហូតមកដល់ពេលនេះ ខ្ញុំមិនមានសេចក្តីរីករាយក្នុងការទិញវាទេ ហើយមានការរអាក់រអួលមួយចំនួននៅពេលប្រើម៉ូឌុលនេះ៖ ពាក្យបញ្ជាចំនួនមានកំណត់ ការបណ្តុះបណ្តាលធុញទ្រាន់ ពាក្យបញ្ជាថ្មីទាមទារ បញ្ចេញពន្លឺម៉ូឌុល ដែលជាដកមួយរួចហើយ ប្រសិនបើប្រព័ន្ធត្រូវបានបំបាត់កំហុស និងដំឡើង។

    ដំណោះស្រាយ

    ខ្ញុំចាប់ផ្តើមស្វែងរកដំណោះស្រាយឆ្លងវេទិកាដែលនឹងអនុញ្ញាតឱ្យប្រព័ន្ធដំណើរការលើច្រើន។ ប្រព័ន្ធប្រតិបត្តិការ. បានរកឃើញនេះ៖ សុន្ទរកថាទៅកាន់បណ្ណាល័យអត្ថបទសម្រាប់ Java/ដំណើរការ. ស្មុគស្មាញត្រូវបានអនុវត្តដោយផ្អែកលើភាសា ដំណើរការ (Java)និង Google Speach APIឆ្មាត្រូវបានសរសេររួចហើយអំពីមុន។ ការសម្រេចចិត្តនេះ។អនុញ្ញាតឱ្យតាមដានសំឡេងតាមពេលវេលាជាក់ស្តែង បើកការកត់ត្រាដោយស្វ័យប្រវត្តិ()ចង្អុលបង្ហាញកម្រិតសំឡេង enableAutoThreshold(), ភ្ជាប់ មីក្រូហ្វូនខាងក្រៅ getLineIn()បញ្ជាក់ភាសាទទួលស្គាល់ setLanguage(ខ្សែអក្សរ). បញ្ជីពេញលេញសមត្ថភាព និងភាពជាក់លាក់មាននៅលើគេហទំព័ររបស់អ្នកអភិវឌ្ឍន៍៖ http://stt.getflourish.com ។ ដើម្បីដំណើរការ យើងត្រូវការ Google Speech API Key ។ របៀបទទួលបានវាត្រូវបានពិពណ៌នានៅទីនេះ៖ www.chromium.org/developers/how-tos/api-keys. តែមួយគត់ ចំណុចអវិជ្ជមានបញ្ហាគឺថា Google Speech អនុញ្ញាតឱ្យអ្នកដំណើរការបានតែ 50 សំណើក្នុងមួយថ្ងៃ ប៉ុន្តែក្នុងការអនុវត្តជាក់ស្តែងច្រើនជាង 500 សំណើត្រូវបានដំណើរការ។

    ដើម្បីធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការរុករកអត្ថបទនាពេលអនាគត ខ្ញុំបានភ្ជាប់ប្រភពទាំងអស់ដែលមានការបញ្ជាជាសំឡេងរួចហើយ ការតភ្ជាប់ទៅបន្ទះ Arduino គំនូរព្រាងសម្រាប់ បន្ទះ Arduinoការបញ្ជាក់ជាសំឡេងនៃឃ្លា និងអ្វីៗផ្សេងទៀតដែលឥឡូវនេះមាន និងដំណើរការ៖ កូដប្រភព។ បន្ទាប់​ពី​ការ​ទាញ​យក យើង​ដាក់​ថត GoogleTTS ក្នុង Processing"a libraries ។ គំនូរព្រាង​សម្រាប់ Arduino គឺ​នៅ​ក្នុង​ថត GoogleTTS/ArduinoSerial ។ អ្វី​គ្រប់​យ៉ាង​ត្រូវ​បាន​សរសេរ​ក្នុង Processing 3.0a4 ដែល​មាន​នៅ​ក្នុង​ការ​ចេញ​ផ្សាយ​មុន​នៅ​លើ​គេហទំព័រ​ផ្លូវការ។

    ការអនុវត្ត(“ស្តាប់​បង្គាប់​ខ្ញុំ!”)៖
    យើងបានសម្រេចចិត្តលើការទទួលស្គាល់។ ឥឡូវនេះយើងត្រូវចាប់យកពាក្យបញ្ជាដែលយើងត្រូវការហើយធ្វើការសម្រេចចិត្តលើពួកគេ។ ផ្នែកទទួលខុសត្រូវចំពោះបញ្ហានេះ៖
    void commands() ( if (result.equals("arduino")) ( // ស្វែងរកការផ្គូផ្គង // ប្រតិបត្តិពាក្យបញ្ជានៅពេលដែលការប្រកួតត្រូវបានទទួល ) else if (result.equals("តើម៉ោងប៉ុន្មាន")) (/ / ប្រតិបត្តិពាក្យបញ្ជានៅពេលដែលការប្រកួតត្រូវបានទទួល ))
    សំឡេងឆ្លើយតប
    ឥឡូវ​នេះ យើង​ត្រូវ​ការ​ឧបករណ៍​មួយ​ដែល​នឹង​ឆ្លើយ​តប​មក​យើង​ជា​សំឡេង​មនុស្ស ប្រសិនបើ​ការ​ប្រកួត​ត្រូវ​បាន​រក​ឃើញ។ ឧបករណ៍អនុវត្តដែលត្រូវបានជ្រើសរើស Google បកប្រែឬជាម៉ូឌុលដែលបំប្លែងអត្ថបទទៅជាសំឡេង។ អត្ថបទត្រូវបានផ្ញើដោយការស្នើសុំទៅកាន់ម៉ាស៊ីនមេ Google ហើយបំប្លែងទៅជា ឯកសារសំឡេងហើយផ្ញើមកយើងវិញជាទម្រង់ mp3 ។ ផ្នែកទទួលខុសត្រូវចំពោះបញ្ហានេះ៖
    ទុកជាមោឃៈ googleTTS(String txt, String language) ( // អត្ថបទត្រូវបានបំប្លែងទៅជាសំឡេងដោយប្រើពាក្យបញ្ជា googleTTS("text", "language") String u = "http://translate.google.com/translate_tts?tl="; u = u + ភាសា + "&q=" + txt; u = u.replace(" ", "%20"); អាសយដ្ឋាន url= URL ថ្មី(u);

    សាកល្បង (ការតភ្ជាប់ URLConnection = url.openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/4.0 (ឆបគ្នា; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; . NET CLR 1.2.30703)"); connection.connect(); InputStream is = connection.getInputStream(); File f = new File(sketchPath + "/" + txt + ".mp3"); OutputStream out = new FileOutputStream( f); byte buf = new byte; while ((len = is.read(buf)) > 0) ( out.write(buf, 0, len); ) out.close(); : " + txt + ".mp3" ) ចាប់ (IOException e) ( e.printStackTrace( ); ) ) catch (MalformedURLException e) ( e.printStackTrace( ); )
    ផ្នែកនេះទទួលខុសត្រូវក្នុងការដំណើរការឃ្លាអត្ថបទដោយផ្ទាល់៖

    void voicer(String s) ( // ប្រតិបត្តិដោយ command voicer("text") println(s); // ប្រើដើម្បីត្រួតពិនិត្យអត្ថបទ ឯកសារ f = new File(sketchPath + "/" + s + ".mp3"); // ពិនិត្យឯកសារ // ប្រសិនបើឯកសារមានរួចហើយ ចាក់ឯកសារ if(f.exists())( println("ឯកសារមានរួចហើយ! ខ្ញុំកំពុងចាក់ឯកសារ!"); player = minim.loadFile(s + ".mp3"); player.play(); ) // ប្រសិនបើឯកសារមិនទាន់មាននៅឡើយ សូមបង្កើតវាទៀត ( println("ឯកសារមិនទាន់មានទេ! ខ្ញុំកំពុងបង្កើត!"); googleTTS(s, "ru"); អ្នកលេង = minim.loadFile(s + ".mp3");
    ឧទាហរណ៍នៃការអនុវត្តការទទួលស្គាល់ និងការបញ្ជាក់ដោយសំឡេង៖
    void commands() ( if (result.equals("computer")) (// Looking for match voicer("Listen"); // ការទទួលការបញ្ជាក់ជាសំឡេង // ប្រតិបត្តិពាក្យបញ្ជានៅពេលដែលការប្រកួតត្រូវបានទទួល))

    គាត់នៅរស់!

    ដំណើរការ + Arduino
    ជាការប្រសើរណាស់ វាហាក់ដូចជាបានដំណើរការ ប៉ុន្តែមានអ្វីមួយបាត់។ ឥឡូវនេះ ចូរយើង "បង្កើតមិត្ត" ជាមួយ Arduino ។ យើងចាប់ផ្តើមការតភ្ជាប់សៀរៀលក្នុងដំណើរការដើម្បីបញ្ជូនទិន្នន័យទៅ Arduino (សម្រាប់អ្នកប្រើប្រាស់ Mac
    និងយូនីក)៖

    String portName = Serial.list(); myPort = ស៊េរីថ្មី (នេះ, ឈ្មោះច្រក, 9600); myPort.bufferUntil("\n"); សម្រាប់:
    អ្នកប្រើប្រាស់វីនដូ

    ខ្សែអក្សរ myPort = ស៊េរីថ្មី (នេះ "ច្រក COM របស់អ្នក", 9600); myPort.bufferUntil("\n");
    ហើយផ្ញើពាក្យបញ្ជាទៅទីនោះ ប្រសិនបើការផ្គូផ្គងសំឡេងត្រូវបានរកឃើញ៖

    void commands() ( if (result.equals("បើកពន្លឺ")) (// ប្រសិនបើឃ្លាសំឡេងត្រូវបានទទួលស្គាល់ថា "បើកពន្លឺ" បន្ទាប់មកប្រតិបត្តិសំណើ myPort.write("ខ្ពស់"); / / ផ្ញើពាក្យបញ្ជាខ្ពស់ទៅឧបករណ៍បំពងសំឡេងការតភ្ជាប់សៀរៀល("បើកពន្លឺ"); // ការបញ្ជាក់សំឡេងនៃការប្រតិបត្តិពាក្យបញ្ជា) ផ្សេងទៀតប្រសិនបើ (លទ្ធផល. ស្មើ ("បិទពន្លឺ")) ( myPort.write("ទាប "); // ផ្ញើពាក្យបញ្ជាទាបទៅឧបករណ៍បំពងសំឡេងការតភ្ជាប់សៀរៀល ("ការបិទពន្លឺ"); // ការបញ្ជាក់ // ប្រតិបត្តិពាក្យបញ្ជានៅពេលដែលការប្រកួតត្រូវបានទទួល)) បន្ទះ Arduino. យើងត្រូវស្តាប់ Serial port ហើយនៅពេលយើងរកឃើញពាក្យបញ្ជាពីបញ្ជី សូមអនុវត្តសកម្មភាពដែលត្រូវការតាមពាក្យបញ្ជា។ គំនូរព្រាងគឺសាមញ្ញណាស់៖
    int led = 13; // ម្ជុល LED នៅលើ board void setup() ( Serial.begin(9600); // ចាប់ផ្តើមការតភ្ជាប់សៀរៀល pinMode(led, OUTPUT); // LED pin transmits data) void loop() ( int i=0; / / variable ដើម្បីដាក់ string ចូលទៅក្នុង buffer char buffer; // a buffer array to put a string into it if(Serial.available())( // ពិនិត្យច្រកសៀរៀលសម្រាប់វត្តមាននៃការពន្យាពេលទិន្នន័យ(100); // ដាក់​អ្វី​ដែល​បាន​អាន​ទៅ​ក្នុង​សតិបណ្ដោះ​អាសន្ន ខណៈ​ដែល (Serial.available () && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
    ទាំងអស់។ សូមពិនិត្យមើល។

    បញ្ហា និងផែនការ៖

    ដោយសារតែ ខ្ញុំ​មិន​បាន​ធ្វើ​កម្មវិធី​មុន​ពេល​នេះ​ទេ ខ្ញុំ​មិន​យល់​ច្បាស់​អំពី​រឿង​មួយ​ចំនួន​ក្នុង​ដំណើរ​ការ​បំបាត់​កំហុស។ ខ្ញុំនឹងដឹងគុណប្រសិនបើនរណាម្នាក់អាចប្រាប់ខ្ញុំពីរបៀបដោះស្រាយបញ្ហាដែលមានរាយខាងក្រោម៖

    បញ្ហាជាមូលដ្ឋានបំផុតគឺថាឃ្លាសំឡេងទាំងមូលមិនត្រូវបាននិយាយ។ អក្សរចុងក្រោយបាត់។ ទោះបីជាឯកសារសំឡេងមកជាមួយ ម៉ាស៊ីនមេ Googleទម្រង់ធម្មតា។. ដូចដែលខ្ញុំយល់ពីស្ថានភាព៖ មានបញ្ហាជាមួយឧបករណ៍ចាក់អូឌីយ៉ូ ប៉ុន្តែកន្លែងណាពិតប្រាកដមិនទាន់ច្បាស់នៅឡើយទេ។
    - ខ្ញុំបានសរសេររួចហើយថា Google Speech API មានដែនកំណត់ 50 សំណើក្នុងមួយថ្ងៃ ប៉ុន្តែតាមពិតវាប្រែចេញច្រើនជាង។ ក្នុងករណីណាក៏ដោយនេះមិនគ្រប់គ្រាន់ទេ។ ខ្ញុំមានគម្រោងចុះឈ្មោះការទទួលស្គាល់ក្នុងស្រុកនៃពាក្យបញ្ជាមេ ហើយបន្ទាប់ពីវាត្រូវបានទទួលស្គាល់ សូមផ្ញើអត្ថបទដែលនៅសល់សម្រាប់ដំណើរការដោយ Google ខ្ញុំកំពុងស្វែងរកដំណោះស្រាយ។
    - ខ្ញុំគិតថាវាមិនឈឺចាប់ទេក្នុងការផ្ញើពាក្យបញ្ជាទៅកាន់ Arduino Ethernet Shield ពីព្រោះ ... ប្រព័ន្ធមួយចំនួនអាចស្ថិតនៅចម្ងាយដ៏សន្ធឹកសន្ធាប់ពីកុំព្យូទ័រម៉ាស៊ីន ហើយការតភ្ជាប់សៀរៀលនឹងមិនដំណើរការនៅទីនេះទៀតទេ។ ខ្ញុំនឹងដោះស្រាយការសម្រេចចិត្តនេះនៅថ្ងៃណាមួយ ពីព្រោះ... ខ្ញុំមិនមានរ៉ោតទ័រដើម្បីភ្ជាប់ Arduino ជាមួយនឹង Ethernet Shield ទៅវាទេ។

    អស់ហើយ! សូម​កុំ​វិនិច្ឆ័យ​ដោយ​ផ្អែក​លើ​បន្ទាត់​កូដ​យ៉ាង​តឹងរ៉ឹង! ខ្ញុំទើបតែចាប់ផ្តើមសិក្សាក្តារបន្ទះនេះ ហើយខ្ញុំនឹងដឹងគុណជាខ្លាំង ប្រសិនបើអ្នកជូតច្រមុះរបស់ខ្ញុំពីរបៀបមិនធ្វើវា ហើយបង្ហាញខ្ញុំពីរបៀបធ្វើវា។ ខ្ញុំ​ក៏​នឹង​រីករាយ​ដែរ​ប្រសិន​បើ​អ្នក​ផ្សេង​ចូល​រួម​ក្នុង​គម្រោង​នេះ។ ភាគីចាប់អារម្មណ៍- តែងតែបើកចំហសម្រាប់ការទំនាក់ទំនង!

    ដូចដែលចំណងជើងបានបង្ហាញ អត្ថបទនេះនឹងផ្តោតលើការទទួលស្គាល់លេខនៅលើ microcontroller ។ ខ្ញុំចង់ធ្វើការកក់ទុកភ្លាមៗ ដែលអត្ថបទនេះនឹងមិនផ្តល់ជូន កូដប្រភពបច្ចេកវិទ្យា ឬក្បួនដោះស្រាយការទទួលស្គាល់ត្រូវបានពិចារណា ខ្ញុំនឹងនិយាយតែថាគំនិតត្រូវបានប្រើ វិធីសាស្រ្តជាប្រព័ន្ធ. ពួកវាខ្លះត្រូវបានរៀបរាប់នៅក្នុងអត្ថបទរបស់យើង (ហើយនៅទីនេះ)។ នេះគឺដោយសារតែការពិតដែលថាវិធីសាស្រ្តរបស់យើងខិតខំដើម្បីភាពដើមប៉ុន្តែទាមទារឱ្យមានការបំភ្លឺអំពីបញ្ហាមួយចំនួន។នរណាម្នាក់អាចនិយាយថា៖ "អត្ថបទមួយទៀតអំពី microcontrollers សរសេរកម្មវិធី។" មិនមែនទាល់តែសោះ ការស្វែងរកគម្រោងស្រដៀងគ្នានេះមិនបានផ្តល់លទ្ធផលច្បាស់លាស់ណាមួយឡើយ ដោយមានករណីលើកលែងនេះ។ វីដេអូ. ពីការពិភាក្សានៅលើវេទិការឿងមួយគឺច្បាស់: គំនិតនៃការទទួលបាន ឧបករណ៍ស្រដៀងគ្នា(កាមេរ៉ា + microcontroller = លទ្ធផល​ការ​ទទួល​ស្គាល់​លទ្ធផល មិន​មែន​គ្រាន់​តែ​ជា​រូបភាព​ដែល​បាន​ចាប់​យក) បាន​មក​ដល់​មនុស្ស​ជា​ច្រើន ប៉ុន្តែ​នៅ​តែ​គ្មាន​ការ​អនុវត្ត។ បាទ / ចាសហើយការទទួលស្គាល់ដោយ មតិទូទៅទាមទារធនធានកុំព្យូទ័រច្រើន ហើយឧបករណ៍បញ្ជា microcontroller មិនស័ក្តិសមសម្រាប់បញ្ហានេះ ជាពិសេសអំពី Arduino មានសេចក្តីថ្លែងការណ៍ថា ជាទូទៅវាមិនអាចទៅរួចនោះទេ។ ប្រសិនបើអ្នកចាប់អារម្មណ៍សូមមើលឆ្មា។

    ដើម្បី​ជៀស​វាង​សំណួរ​ជាក់​ស្តែង សូម​ឆ្លើយ​សំណួរ​ទាំង​នោះ៖

    • ទេ នេះមិនមែនជាសេវាកម្មសម្គាល់រូបភាពទេ។
    • ទេ នេះមិនមែនជា OpenCV ទេ។
    • ទេ ទាំងនេះមិនមែនជាបណ្តាញសរសៃប្រសាទទេ។
    • បាទ ការទទួលស្គាល់គឺធ្វើឡើងដោយ microcontroller!

    គំនិត

    សរុបមក វាទាំងអស់បានចាប់ផ្តើមជាមួយនឹងបំណងប្រាថ្នាដើម្បីសាកល្បងដៃរបស់ខ្ញុំ និងសាកល្បងគំនិតរបស់ខ្ញុំក្នុងការទទួលស្គាល់រូបភាព។ ក្នុង​អំឡុង​ពេល​នៃ​ការ​ពិភាក្សា​យើង​បាន​ឈាន​ដល់​ការ​សន្និដ្ឋាន​ថា​យើង​អាច​ទទួល​បាន​ដោយ​តូច​ ថាមពលកុំព្យូទ័រដើម្បីដោះស្រាយបញ្ហានេះ។ សម្រាប់ហេតុផលជាក់ស្តែង យើងនឹងមិនរៀបរាប់ពីព័ត៌មានលម្អិតនៃការពិភាក្សាទាំងនេះទេ។

    ការដំឡើង

    ដូច្នេះភារកិច្ចត្រូវបានកំណត់ ការអនុវត្តគឺចាំបាច់។ ដោយមិនងាកចេញពីគោលការណ៍ដែលបានកំណត់រួចហើយ
    យើងយកអ្វីដែលយើងមាននៅក្នុងដៃ។ ហើយខ្ញុំមាន Arduino Unos ពីរបីគ្រាប់ កណ្តុរអុបទិកចាស់ និងដ្រាយស៊ីឌីនៅនឹងដៃ។ និយាយអញ្ចឹងតើអ្នកនឹងប្រើឧបករណ៍ចាប់សញ្ញាសម្រាប់អ្វី? កណ្តុរអុបទិកក្នុងនាមជាកាមេរ៉ាសម្រាប់ការទទួលបានរូបភាពមួយ យើងត្រូវបានជំរុញដោយអ្វីមួយដែលយើងបានអានជាយូរមកហើយ ហើយតាមពិតទៅ សម្ភារៈ "កណ្ដុរ" ដែលនៅសល់ទាំងអស់។ រឿងតែមួយគត់ដែលយើងត្រូវធ្វើគឺដោះឧបករណ៍ចាប់សញ្ញា និងខ្សែទាំងមូលរបស់វា ដើម្បីភាពងាយស្រួលក្នុងការប្រើប្រាស់ ហើយថែមទាំងកាវបិទកញ្ចក់ទៅវាផងដែរ ដែលយើង "ហែកចេញ" ចេញពីដ្រាយស៊ីឌីដោយប្រុងប្រយ័ត្ន។ នេះជាការចាំបាច់ ដើម្បីបង្កើនចម្ងាយពីវត្ថុទៅកាមេរ៉ា បើមិនដូច្នេះទេ ចំនួននៃទំហំរបស់យើងនឹងមិនសមទេ ហើយមានតែ ផ្នែកតូច. ដោយវិធីនេះ យើងបានព្យាយាមភ្ជាប់អុបទិកពីកាមេរ៉ាបណ្ដាញនៅពីមុខកញ្ចក់ពីដ្រាយស៊ីឌី ប៉ុន្តែវាមិនដំណើរការទេ។


    ច្រើនទៀត



    បន្ទាប់មកសំណួរបានកើតឡើងអំពីរបៀបដាក់កាមេរ៉ានេះលើប្រធានបទ។ នៅទីនេះយើងត្រូវបានជួយយ៉ាងខ្លាំងដោយមីក្រូទស្សន៍ដែលខូចចាស់ដែលដេកនៅទំនេរ។ យើងបានដកយន្តការគ្រប់គ្រងដំណាក់កាលចេញពីវាដោយគោរព។ យន្តការនេះបានអនុញ្ញាតឱ្យយើងផ្លាស់ទីកាមេរ៉ាត្រឹមតែពីរអ័ក្ស គំនិតភ្លាមៗបានមកប្រើការណែនាំក្បាលឡាស៊ែរពីដ្រាយស៊ីឌី។ ទាំងអស់នេះត្រូវបានធានាសុវត្ថិភាពចំពោះករណីនៃដ្រាយស៊ីឌីដែលរងទុក្ខយូរ។ ជាលទ្ធផល យើងទទួលបានយន្តការកំណត់ទីតាំងកាមេរ៉ាដ៏ត្រជាក់។


    ច្រើនទៀត




    សរុប៖ យើង​មាន​អ្វី​ដែល​ហៅ​ថា​កាមេរ៉ា មាន​យន្តការ​កំណត់​ទីតាំង អ្វី​ដែល​នៅ​សល់​គឺ​ត្រូវ​ដាក់​ក្រដាស​មួយ​សន្លឹក​ជាមួយ​លេខ ហើយ​ទទួល​បាន​រូបភាព​ពី​កាមេរ៉ា។ នេះគឺជាកន្លែងដែល "បញ្ហា" បានចាប់ផ្តើម។ ដោយសារលក្ខណៈរបស់ឧបករណ៍ចាប់សញ្ញាអុបទិក "កណ្ដុរ" គឺអន់ណាស់សម្រាប់ការប្រើប្រាស់វាជាកាមេរ៉ា ពួកគេបានចាប់ផ្តើមបង្កើតអំពូល Backlighting ដោយភាពច្នៃប្រឌិត។


    ច្រើនទៀត




    វាច្បាស់ណាស់ថាវាមិនអាចគ្រាន់តែរំលេចអាំងតង់ស៊ីតេនៃទិសដៅនៃពន្លឺខាងក្រៅក៏ធ្វើការកែតម្រូវផងដែរ។ ខ្ញុំត្រូវបើក ​​Arduino មួយផ្សេងទៀតដើម្បីគ្រប់គ្រងអាំងតង់ស៊ីតេនៃអំពូល Backlight ( តាមធម្មជាតិ វាអាចគ្រប់គ្រងវាខុសគ្នា ប៉ុន្តែក្រោយមកមិនត្រឹមតែដោយអំពូល Backlight ប៉ុណ្ណោះទេ ថែមទាំងអាចប្តូរលេខនៅលើសូចនាករផងដែរ។) នៅ​ទី​បំផុត​វា​បាន​ប្រែ​ក្លាយ​ថា​ការ​បាញ់​នៅ​ក្នុង​ពន្លឺ​គឺ​ល្អ​ប្រសើរ​ជាង​មុន​។ ហើយប្រសិនបើឧទាហរណ៍ អ្នកប្រើសូចនករប្រាំពីរចម្រៀកភ្លឺជាគោលដៅ នោះឧបករណ៍ចាប់សញ្ញាមើលឃើញវាយ៉ាងល្អឥតខ្ចោះ។ ដូច្នេះ​ឥឡូវ​នេះ​យើង​មាន​សូចនាករ​មួយ​និង​ឆ្នូត​ដែល​មាន​លេខ​ពណ៌​ស​ដែល​ពោរពេញ​ដោយ​ផ្ទៃ​ខាង​ក្រោយ​ខ្មៅ​ជា​វត្ថុ​បាញ់។


    នៅខាងឆ្វេងគឺជារូបភាពមាត្រដ្ឋានប្រផេះដែលទទួលបានពីសូចនាករ (យើងទទួលបានរូបភាពបែបនេះពីឧបករណ៍ចាប់សញ្ញា) នៅខាងស្តាំត្រូវបានធ្វើជា binarized ។


    ច្រើនទៀត



    ទិដ្ឋភាពទូទៅនៃការដំឡើង



    ជម្រើសដំឡើងដំបូង





    ប្លុកការទទួលស្គាល់


    តួនាទីសំខាន់ក្នុងការដំឡើងរបស់យើងត្រូវបានលេងដោយអង្គភាពទទួលស្គាល់ (ក្នុងរូបភាពខាងលើ)។ ដូចដែលអ្នកអាចឃើញវាមាន Arduino Uno និងឧបករណ៍បញ្ជូន wifi ដ៏ល្បីល្បាញ ESP8266. ខ្ញុំសូមពន្យល់ យើងត្រូវការឧបករណ៍បញ្ជូនវ៉ាយហ្វាយ ដើម្បីមើលលទ្ធផលទទួលស្គាល់នៅលើកុំព្យូទ័របន្ទះ។ កម្មវិធីនៅលើកុំព្យូទ័របន្ទះផ្ញើសំណើមួយ Arduino នៅពេលទទួលបានសំណើ "ចាប់យក" រូបភាពពីឧបករណ៍ចាប់សញ្ញាកណ្ដុរបន្ទាប់មកធ្វើ binarize វា។ បន្ទាប់ពីការធ្វើ Binarization ការទទួលស្គាល់កើតឡើង ហើយបន្ទាប់ពីការបញ្ចប់របស់វា ការឆ្លើយតបមួយត្រូវបានបង្កើត។ នៅក្នុងការឆ្លើយតប យើងផ្ញើលទ្ធផលទទួលស្គាល់ និង 41 បៃដើម្បីបង្កើតរូបភាពគោលពីរនៅលើអេក្រង់កុំព្យូទ័របន្ទះ ដូច្នេះដើម្បីនិយាយ ដើម្បីភាពច្បាស់លាស់។

    ប្រសិនបើអ្នកក្រឡេកមើលទៅក្រោយ Arduino មានមុខងារល្អណាស់៖ ធ្វើការជាមួយកាមេរ៉ា ការទទួលស្គាល់ និងធ្វើការជាមួយ esp8266។ អ្វី​ដែល​មិន​អាច​ប៉ះពាល់​ដល់​ការងារ​នោះ​គឺ​យើង​ត្រូវ​ដោះស្រាយ​បញ្ហា​ខ្វះ​ការ​ចងចាំ។ ខ្ញុំ​មិន​ដែល​គិត​ថា​ខ្ញុំ​នឹង​ត្រូវ​យក​រាល់​បៃ​នៃ​ការ​ចងចាំ​ឡើង​វិញ​ទេ។

    ការបង្ហាញនៃដំណើរការទទួលស្គាល់

    ជំនួសឱ្យការសន្និដ្ឋាន

    នោះហើយជាទាំងអស់។ នៅមានការងារជាច្រើននៅខាងមុខ។ ហើយកិច្ចការទីមួយ៖ ការទទួលស្គាល់លេខ (ខ្សែអក្សរ) ដែលថតដោយកាមេរ៉ា "មនុស្ស" (និងមិនមែនជា "ឧបករណ៍ចាប់សញ្ញាកណ្ដុរ") និងការផ្ទេរបច្ចេកវិទ្យាដែលបានអភិវឌ្ឍទៅ ESP8266 និងកាត់បន្ថយអាំងតង់ស៊ីតេនៃការតស៊ូសម្រាប់រាល់បៃនៃការចងចាំ។

    យើងនឹងរីករាយក្នុងការឆ្លើយសំណួររបស់អ្នក។