Monday, February 24, 2020

Arduino: មូលដ្ខានគ្រឹះការបញ្ជារម៉ូទ័រដោយប្រើ L298N Driver


ការប្រើប្រាស់ Arduino នៅក្នុងវិស័យមនុស្សយន្ត (Robotics) ឫប្រព័ន្ធបញ្ជារផ្សេងៗតែងតែផ្តោតលើការបញ្ចារទៅលើម៉ូទ័រទាំងខ្នាតតូច និងខ្នាតធំ។

នៅក្នុងអត្ថបទនេះ យើងនឹងទៅសិក្សារពីមូលដ្ឋានគ្រឹះនៅក្នុងការបញ្ជារម៉ូទ័រទាំងទិសដៅ(Direction) និងល្បឿន(Speed) ដោយផ្នែកទៅលើការប្រើប្រាស់ PWM

ឧបករណ៍ប្រើប្រាស់៖


- Arduino UNO ប្រើប្រាស់ជាអ្នកគ្រប់គ្រងបញ្ជារ។
- L298N ប្រើប្រាស់ក្នុងការបញ្ជារមូទ័រ អាចប្រើម៉ូទ័របាន២ដាច់ដោយលែកពីគ្នាក្នុងពេលតែមួយ។
- 9V Battery ជាថាមពលសម្រាប់ផ្គត់ផ្គង់ម៉ូទ័រ។
- Mini DC Motor សម្រាប់សាកល្បង។
- Jumper Wire សម្រាប់ភ្ជាប់សៀគ្វី។

ការប្រើប្រាស់ L298N៖
ESP32 with DC Motor - Control Speed and Direction | Motor ...

L298N ជាប្រភេទ Driver ដែលមាន​ពីរផ្នែក(2 channels)អាចអោយបញ្ជារម៉ូទ័របាន២ដាច់ដោយលែកពីរគ្នានៅលើ Driver តែមួយ។ តង់ស្យុងសម្រាប់បញ្ជារម៉ូទ័រប្រើបានចន្លោះ 5V-35V និងចរន្តអិបរមា 2A។

L298N Block Diagram Current Flow How It Works
Image credit to howtomechatronics.com

ជាទូទៅយើងប្រើប្រាស់ជើងបញ្ជារដូចខាងក្រោម៖
- ENA: ជាសញ្ញា PWM សម្រាប់ល្បឿនម៉ូទូ័រ A (OUT1, OUT2)។
- IN1: ជាជើងបញ្ជារទិសដៅរង្វិលរបស់ម៉ូទ័រ A។
- IN2: ជាជើងបញ្ជារទិសដៅរង្វិលរបស់ម៉ូទ័រ A។

- ENB: ជាសញ្ញា PWM សម្រាប់ល្បឿនម៉ូទូ័រ B (OUT3, OUT4)។
- IN3: ជាជើងបញ្ជារទិសដៅរង្វិលរបស់ម៉ូទ័រ B។
- IN4: ជាជើងបញ្ជារទិសដៅរង្វិលរបស់ម៉ូទ័រ B។


ការរៀបសៀគ្វី៖


ការសរសេរកូដ៖
កូដខាងក្រោមនឹងធ្វើការបញ្ជារម៉ូទ័រទៅមុខ ទៅក្រោយ និងឈប់ដើម្បីសាកល្បងក្នុងការប្រើប្រាស់ L298N ជាមួយ Arduino។ កូដខាងក្រោមមាន២ ដោយទី១ ជាការសរសេរដោយមិនប្រើ Library (ការសរសរផ្ទាល់) និងទី២ប្រើប្រាស់ Library មួយដើម្បីអោយកូដសរសេរតិចជាងមុននិងងាយស្រួលមើល។

១. សរសេរមិនប្រើ Library

  1. #define ENA 9  
  2. #define IN1 7  
  3. #define IN2 6  
  4.   
  5.   
  6. void setup() {  
  7.   pinMode(ENA, OUTPUT);  
  8.   pinMode(IN1, OUTPUT);  
  9.   pinMode(IN2, OUTPUT);  
  10. }  
  11.   
  12. void loop() {  
  13.   //Forward for 100pwm  
  14.   analogWrite(ENA, 100);  
  15.   digitalWrite(IN1, 1);  
  16.   digitalWrite(IN2, 0);  
  17.   delay(3000);  
  18.     
  19.   //Stop motor  
  20.   analogWrite(ENA, 0);  
  21.   digitalWrite(IN1, 0);  
  22.   digitalWrite(IN2, 0);  
  23.   delay(3000);  
  24.   
  25.   //Backward for 100pwm  
  26.   analogWrite(ENA, 100);  
  27.   digitalWrite(IN1, 0);  
  28.   digitalWrite(IN2, 1);  
  29.   delay(3000);  
  30.   
  31. }  

២.ប្រើប្រាស់ ​Library

Download Library: https://github.com/eTRONICSKH/L298N-Driver-Arduino-Library

  1. /*   
  2.  *  L298N Dual Channel driver library 
  3.  *  Version : 1.0 
  4.  *  Status  : Simple Library 
  5.  *  web: https://www.etronicskh.com/ 
  6.  *   
  7.  */  
  8.   
  9. #include <L298N.h>  
  10.   
  11. #define ENA 9  
  12. #define IN1 7  
  13. #define IN2 6  
  14.   
  15. L298N motorA(IN1, IN2, ENA);  
  16.   
  17. void setup() {  
  18.   motorA.init();  
  19. }  
  20.   
  21. void loop() {  
  22.   motorA.setPWM(150); //Rotate forward with 150 PWM value  
  23.   delay(5000);  

  24.   motorA.setPWM(0);   //Stop  
  25.   delay(3000);  

  26.   motorA.setPWM(-200);   //Rotate backward with 200 PWM value  
  27.   delay(3000);  
  28. }