|
GSM ជាមួយ Arduino |
ដើម្បីធ្វើទំនាក់ទំនងជាមួយគ្រឿងអេឡិចត្រូនិចបានដោយប្រើប្រាស់សារ SMS ឫ Call គេត្រូវការឧបករណ៍ជាចាំបាច់គឺ GSM (Global System for Mobile Communications) ដោយដាក់ Sim ឲ្យដំណើរការដូចទូរស័ព្ទដែលត្រូវការសេវាដើម្បីផ្ញើសារ ឫតេបានដូចជាទូរស័ព្ទដែរ។
|
GSM Module មានម៉ូដែលផ្សេងៗគ្នា |
GSM ដែលអាចប្រើបានជាមួយ Microcontroller ដូចជា Arduino ជាដើមភាគច្រើនត្រូវបានគេផ្គុំជា Module (រូបខាងលើ) មានតូចមានធំទៅតាមសមត្ថភាពនិងតម្រូវការប្រើប្រាស់ ដែលអាចទំនាក់ទំនងគ្នាបានជាមួយ UART Serial។
|
GSM SIM800 (ឆ្វេងសម្រាប់ PCB Design) រូបរាងផ្សេងៗគ្នា |
យើងនឹងលើកយក GSM SIM800L ជាឧទាហរណ៍ជាមួយ Arduino (GSM ម៉ូដែលនីមួយៗមានការប្រើប្រាស់ដូចៗគ្នា តែមួយចំនួនមាន Function បន្ថែមទៅតាមម៉ូដែល) ដោយអាចឲ្យយើងបញ្ជា Arduino បានដោយផ្ញើសារទៅបញ្ជា ឫឲ្យ Arduino ផ្ញើសារជាពត៌មានផ្សេងៗទៅកាន់ទូរស័ព្ទវិញ។
|
របៀបប្រើប្រុងប្រយ័ត្ពពេលតស្វៀគ្វី GSM៖ប្រាស់ SIM800L |
|
ជ្រើសរើសអង់តែនឲ្យ GSM
|
ការជ្រើសរើសអង់តែនពិតជាសំខាន់សម្រាប់ឲ្យ GSM ដំណើរការបានល្អិមិនរអាក់រអួល។ អង់តែនដែលត្រូវបានប្រើច្រើនមាន ២ ដូចរូបខាងលើ៖
- Helical GSM antenna ដែលភាគច្រើនភ្ជាប់មកជាមួយពេលទិញ ដែលវាមានសមត្ថភាពមធ្យម អាចឲ្យ GSM ដំណើរការធម្មតាដរាបណាវានៅក្រៅប្រអប់ ឫប្រើប្រអប់ជ័រស្តើងៗមិនខ័ណ្ឌសេវាទូរស័ព្ទ។ ក្នុងករណីប្រើប្រអប់អាល៊ុយមីញ៉ូមអាចមានបញ្ហាគ្មានសេវា។
- 3dBi GSM antenna ដែលវាមានសសៃខ្សែភ្ជាប់ទៅ GSM ហើយវាមានដំណើរការល្អជាងអង់តែនទីមួយបើសិនជានៅតំបន់មានសេវាខ្សោយ។ អង់តែនប្រភេទនេះល្អត្រង់ថា យើងអាចដាក់ GSM នៅក្នុងប្រអប់បែបណាក៏បាន ដោយគ្រាន់តែរករន្ធទុកចាប់ក្បាលអង់តែនឲ្យនៅក្រៅប្រអប់ជាការស្រេច។
|
ជើងរបស់ SIM800L |
1. NET ជើងសម្រាប់ផ្សារភ្ជាប់ទៅនឹងអង់តែន។
2. VCC ភ្លើងសម្រាប់ចិញ្ចឹម GSM អាចនៅចន្លោះ 3.4V - 4.4V និងផ្តល់ចរន្តយ៉ាងហោចណាស់ 2A។ ប្រើប្រាស់ 5V អាចធ្វើអោយឆេះ ឫ 3.3V មិនអាចឲ្យដំណើរការបានឡើយ។ គួរតែប្រើថ្ម Li-Po ឫ Buck converter តង់ស្យុងប្រហាក់ប្រហែល 3.7V និងចរន្ត 2A។
3. RST ជើងសម្រាប់ Reset GSM ដោយទាញឲ្យ Low រយៈពេល 100ms។
4. RXD ជើងសម្រាប់ទទួលពត៌មានជា Serial Communication។
5. TXD ជើងសម្រាប់បញ្ចេញពត៌មានជា Serial Communication។
6. GND ជាជើង Ground ដែលត្រូវតែភ្ជាប់ទៅ GND របស់ Arduino។
7. SPK- ជើងអវិជ្ជមានសម្រាប់តទៅ Speaker។
8. SPK+ ជើងវិជ្ជមានសម្រាប់តទៅ Speaker។
9. MIC- ជើងអវិជ្ជមានសម្រាប់តទៅ Microphone។
10. MIC+ ជើងវិជ្ជមានសម្រាប់តទៅ Microphone។
11. DTR ជើងសម្រាប់បញ្ជាឲ្យ GSM សម្រាក(sleep mode)។ HIGH ដើម្បីសម្រាក។
12. RING ជើងបង្ហាញពីការតេចូល។ ធម្មតាវា HIGH វានឹងភ្លិបភ្លែតពេលមានតេចូល។
|
គួរតែប្រើ Buck Converter ឫ ថ្ម Li-Po ចន្លោះ 3.7V |
ប្រុងប្រយ័ត្នពេលតស្វៀគ្វី GSM៖
មិនត្រូវភ្ជាប់ VCC មុន GND និងមិនត្រូវផ្តាច់ GND មុន VCC។ បើមិនប្រុងប្រយ័ត្ន Module គ្មាន Ground ហើយអាចឲ្យចរន្តទាំងអស់ហូរទៅតាមជើង Serial នឹងបណ្តាលឲ្យឆេះ GSM ដោយមិនដឹងមូលហេតុ។
Arduino ត្រូវទាក់ទងទៅ GSM ដោយប្រើ UART Serial ដែលសៀគ្វីដូចគម្រូខាងក្រោម។ ដោយលែក GSM មិនអាចដំណើរការដោយ 5V បាននោះទេ ដូននេះជើងទទួលទិន្ន័យរបស់ GSM (RXD) មិនអាចទទួលទិន្ន័យចូលដោយ 5V ដែលផ្តល់ដោយ Arduino បានឡើយ។ ដើម្បីជៀសវាងបញ្ហាឆេះខូច ឬបញ្ហាផ្សេង គួតែប្រើប្រាស់រេស៊ីស្តរពីរដែលមានតម្លៃ និងតដូចខាងក្រោម ដើម្បីទម្លាក់ឲ្យខ្សែនេះចូលទៅ GSM តែ 3.3V ប៉ុណ្ណោះ។
|
ការភ្ជាប់ជើង Arduino (Software Serial) និង GSM SIM800L |
|
សៀគ្វីគម្រូ Arduino និង GSM SIM800L |
Arduino ត្រូវប្រើប្រាស់ AT Command ដើម្បីប្រាប់ទៅ GSM ឲ្យធ្វើអ្វីមួយដូចជាដឹងពីទំនាក់ទំនងរវាង GSM និង Arduino ឬស្ថានភាពសេវាទូរស័ព្ទ ឬ ឲ្យGSMតេទៅលេខណាមួយ -ល-។ ដោយ Arduino ប្រើប្រាស់
Software Serial ដើម្បីបង្កើតជាខ្សែ Serail ថ្មីមួយជៀសវាងភ្ជាប់ទៅជើង Serail ដើម (RX0, TX0) ដែលនាំឲ្យពិបាកពេលបញ្ចូលកូដត្រូវផ្តាច់ខ្សែ។
ប្រើកូដនេះដើម្បីតេស្ត AT Command៖
#include <SoftwareSerial.h>
SoftwareSerial myGSM(3, 2);
void setup() {
Serial.begin(9600);
while (!Serial) {} ;
Serial.println("Started...");
myGSM.begin(9600);
myGSM.println("AT");
}
void loop() {
if (myGSM.available())
Serial.write(myGSM.read());
if (Serial.available())
myGSM.write(Serial.read());
}
AT Command មានដូចជា៖
- AT ប្រើតេស្តទំនាក់ទំនងរវាង Arduino និង GSM បើទាក់ទងគ្នាបានវានឹងឆ្លើយ OK។
- AT+CSQ ប្រើឲ្យ GSM មើលសេវាស៊ីមដែលវាបានប្រើ ជាតួលេខតំបូង មានតម្លៃប្រហែល 5dB ឫច្រើនជានេះបើសេវាខ្លាំង។
បន្ទាប់ពីបញ្ចូលកូដទៅក្នុង Arduino រួចមក ចុចបើក Serial Monitor ប្រើ Baud Rate 9600 និងជ្រើសយក Both NL & CR រួចសាកល្បងវាបញ្ចូល AT Command ខាងលើ៖
|
សាកល្បង Serial ជាមួយ GSM |
ដើម្បីផ្ញើសារ SMS បាន៖
- AT+CMGF=1 ឲ្យ GSM ដំនើរការក្នុងគោលការណ៍ SMS។
- AT+CMGS=\"+855XXXXXXXX\" ប្រាប់លេខទូរស័ព្ទដែលចង់ផ្ញើសារទៅ GSM។
- "SMS text message" ប្រាប់អក្សរសារដែលចង់ផ្ញើទៅ GSM។
- 26 ប្រាប់ GSM ឲ្យបញ្ចប់ការផ្ញើសារ SMS។
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("Initializing...");
delay(1000);
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CMGS=\"+855XXXXXXXX\"");
updateSerial();
mySerial.print("Hello, I am SIM800L.");
updateSerial();
mySerial.write(26);
}
void loop() {
}
void updateSerial() {
delay(500);
while (Serial.available()) {
mySerial.write(Serial.read());
}
while(mySerial.available()) {
Serial.write(mySerial.read());
}
}
ឲ្យ GSM ចាំទទួលសារពីអ្នកផ្សេងត្រូវប្រើ AT+CNMI=1,2,0,0,0 ដូចខាងក្រោម៖
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("Initializing...");
delay(1000);
mySerial.println("AT");
updateSerial();
mySerial.println("AT+CMGF=1");
updateSerial();
mySerial.println("AT+CNMI=1,2,0,0,0");
updateSerial();
}
void loop() {
updateSerial();
}
void updateSerial() {
delay(500);
while (Serial.available()) {
mySerial.write(Serial.read());
}
while(mySerial.available()) {
Serial.write(mySerial.read());
}
}
ឲ្យ GSM តេទៅលេខណាមួយ ប្រើត្រូវប្រើ ATD command៖
- ATD+ +855xxxxxxxxxx; ប្រាប់លេខទូរស័ព្ទដែលចង់ទេទៅ GSM។
- ATH បិទការតេ(Hangs up)។
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("Initializing...");
delay(1000);
mySerial.println("AT");
updateSerial();
mySerial.println("ATD+ +855xxxxxxxxx;");
updateSerial();
delay(20000);
mySerial.println("ATH");
updateSerial();
}
void loop() {
}
void updateSerial() {
delay(500);
while (Serial.available()){
mySerial.write(Serial.read());
}
while(mySerial.available()) {
Serial.write(mySerial.read());
}
}
ដើម្បីឲ្យ GSM រកចាំការ Call ចូល មិនចាំបាច់មាន AT command ឡើយ គ្រាន់តែពេលតេចូលមក៖
- ATA ដើម្បីលើកទូរស័ព្ទដែលបានតេចូលមក។
- ATH បិទការតេ(Hangs up)។
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("Initializing...");
}
void loop() {
updateSerial();
}
void updateSerial() {
delay(500);
while (Serial.available()) {
mySerial.write(Serial.read());
}
while(mySerial.available()) {
Serial.write(mySerial.read());
}
}
ការប្រើប្រាស់ GSM បានកាន់តែទូលំទូលាយ អាស្រ័យលើការសិក្សាលើ
AT Command ។ យល់ដឹងពី AT Command បានកាន់តែច្រើន កាន់តែងាយស្រួលប្រើប្រាស់ GSM។