برد Esp32 میکروپایتون Micropython

پروژه کنترل موتور DC با درایور L298N و میکروپایتون در برد ESP32

نوشته شده توسط CiferTech

در پروژه میکروپایتون با ESP32، نحوه کنترل موتور DC با برد ESP32 در MicroPython با استفاده از درایور موتور L298N را یاد خواهیم گرفت. ابتدا درایور موتور L298N را به شما معرفی می کنیم و سپس از آن برای یادگیری برخی از روش های کنترل اولیه موتور dc از جمله حرکت شروع، توقف، راست گرد و چپ گرد از طریق بردهای ESP32 خود استفاده می کنیم. قبل از شروع این آموزش آخرین نسخه سیستم عامل MicroPython بر روی بردهای ESP خود نصب کنید، این مورد را در آموزش های پایه میکروپایتون بطور کامل پوشش داده‌ایم همچنین از آن در برنامه های ادیتوری مانند uPyCraft IDE یا Thonny IDE استفاده خواهیم کرد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

پروژه کنترل دور موتور با میکروپایتون و برد esp32 - دیجی اسپارک

 


درایور موتور L298


ماژول درایور موتور L298N از یک IC درایور موتور L298N، رگولاتور ۵ ولتی ۷۸M05، اکتیو کننده ۵ ولت، LED، هیت سینک حرارتی، مقاومت ها و خازن ها تشکیل شده است که همه در یک مدار مجتمع ترکیب شده اند. این درایور به طور گسترده ای در کنترل ربات ها استفاده می شود زیرا می توانیم تا چهار موتور را همزمان کنترل کنیم اما اگر بخواهیم سرعت و جهت را نیز کنترل کنیم این امکان را می دهد تا دو موتور به هم متصل شوند. بنابراین، برای روبات هایی که تا دو چرخ استفاده می‌کنند بسیار مناسب است. این ماژول عمدتا در رباتیک و در کنترل موتورهای dc و پله ای استفاده می شود.

درایور موتور L298 - دیجی اسپارک

 


تراشه ESP32


ESP32 می تواند به عنوان یک سیستم کامل مستقل یا به عنوان یک دستگاه MCU عمل کند و بار اضافی ارتباطات را در پردازنده اصلی برنامه کاهش دهد. ESP32 می تواند با سیستم های دیگر ارتباط برقرار کند تا از طریق SPI عملکرد Wi-Fi و بلوتوث را ارائه دهد. ESP32 با سوئیچ های آنتن داخلی، RF balun، تقویت کننده قدرت، تقویت کننده دریافت، فیلترها و ماژول های مدیریت توان یکپارچه شده است. ESP32 با حداقل الزامات برد مدار چاپی (PCB) ، عملکرد و تطبیق پذیری بی نظیری را به برنامه های شما اضافه می کند. برد ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش می‌باشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC می‌باشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی می‌باشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته می‌شود.

 


وسایل مورد نیاز


درایور موتور L298

برد ESP32

موتور DC

برنامه نویسی میکروپایتون با ESP32 و درایور موتور L298 - دیجی اسپارک

 


شرح پروژه میکروپایتون


در این آموزش با استفاده از برد ESP32 و همچنین میکروپایتون قصد داریم تا یک الی چند موتور DC را کنترل کنیم. من از ادیتور uPyCraft استفاده میکنم. کافیست کدهای توسعه داده شده‌ی میکروپایتون را به این محیط و یا هر محیط دیگری که با آن آشنایی دارید، اضافه کنید. به واسطه این درایور قادر خواهیم بود سرعت و جهت چرخش موتور DC خود را کنترل کنیم به شکل ساعتگرد و پادساعتگرد. ابتدا برای کار با این درایور در محیط کدنویسی باید یک کتابخانه برای معرفی و نحوه کنترل کامل این درایور بسازیم و در ادامه در یک فایل جداگانه سناریو مدنظر را اجرا کنیم.

درایور موتور و میکروپایتون ESP32 - دیجی اسپارک

 


اتصالات پروژه


در این پروژه ما از پین های خروجی A برای کنترل موتور استفاده خواهیم کرد. بنابراین ENA سرعت و IN1 و IN2 جهت چرخش موتور را تنظیم می کنند. برای ESP32، ما پین های GPIO13 به ENA متصل می‌کنیم. GPIO5 و GPIO4 به ترتیب با IN1 و IN2 متصل خواهند شد. هنگام اتصال برد ESP و ماژول درایور می توانید پین های مناسب GPIO را با توجه به کد خود انتخاب کنید. موتور dc دارای ولتاژ ۶ الی ۱۲ ولت است و برای راه اندازی به مقدار بالایی جریان نیاز دارد. به همین دلیل از یک منبع تغذیه خارجی برای موتور dc استفاده خواهیم کرد. از آنجایی که می‌توانیم از هر منبع از ۶ الی ۱۲ ولت استفاده کنیم، یک باتری ۹ ولتی برای این پروژه مناسب خواهد بود.

اتصالات پروژه درایور موتور L298 میکروپایتون با ESP32 - دیجی اسپارک

 


ساخت کتابخانه میکروپایتون


همانطور که پیش تر ذکر شد برای کد نویسی با میکروپایتون نیاز به ایجاد کتابخانه مد نظر متناسب با ماژول و سنسور مورد استفاده نیاز داریم. در این پروژه نیز ابتدا از کد زیر به عنوان کتابخانه اصلی برای کنترل کامل L298 استفاده خواهیم کرد. در ادیتور خور یک فایل با پسوند .py ایجاد کنید نام آن را dcmotor قرار دهید. در ادامه پروژه و کد اصلی با استفاده از این ماژول ساخته شده اقدام به اجرای سناریوی مدنظر خواهیم کرد.

class DCMotor:      
  def __init__(self, pin1, pin2, enable_pin, min_duty=750, max_duty=1023):
        self.pin1=pin1
        self.pin2=pin2
        self.enable_pin=enable_pin
        self.min_duty = min_duty
        self.max_duty = max_duty

  def forward(self,speed):
    self.speed = speed
    self.enable_pin.duty(self.duty_cycle(self.speed))
    self.pin1.value(1)
    self.pin2.value(0)
    
  def backwards(self, speed):
        self.speed = speed
        self.enable_pin.duty(self.duty_cycle(self.speed))
        self.pin1.value(0)
        self.pin2.value(1)

  def stop(self):
    self.enable_pin.duty(0)
    self.pin1.value(0)
    self.pin2.value(0)
    
  def duty_cycle(self, speed):
   if self.speed <= 0 or self.speed > 100:
        duty_cycle = 0
   else:
    duty_cycle = int(self.min_duty + (self.max_duty - self.min_duty)*((self.speed-1)/(100-1)))
    return duty_cycle

 

در این کد هر بخش یک تابع برای انجام تسک های مورد نیاز و قابل اجرا بوسیله درایور L298 است. برای مثال کد زیر که در توابع بالا نیز قابل مشاهده است برای کنترل موتور به شکل پادساعتگرد می‌باشد که در کد اصلی تنها با فراخوانی این تابع قادر به اجرایی کردن آن خواهیم بود.

def backwards(self, speed):
        self.speed = speed
        self.enable_pin.duty(self.duty_cycle(self.speed))
        self.pin1.value(0)
        self.pin2.value(1)

 


بررسی و آپلود کد اصلی


برای اجرای سناریوی مدنظر یک فایل جدید ایجاد می‌کنیم با اسم main.py که این فایل شامل تمام کدهای اصلی ما است که با وارد کردن کتابخانه dcmotor و فراخوانی توابع مدنظر، به روش های متفاوتی قادر به کنترل موتور DC خواهیم بود. مطمئن شوید که هر دو dcmotor.py و main.py را در یک بخش ذخیره کردید. در کد اصلی با وارد کردن ماژول dcmotor که قبلا ایجاد کردیم، به جای نوشتن دستورات تکراری، با یک دستور قادر به کنترل موتور خواهیم بود. همچنین کلاس‌های pin و pwm را از ماژول ماشین وارد می‌کنیم تا موارد ذکر شده قابل فهم برای کد ما باشند. همچنین از کلاس sleep برای ایجاد تاخیر بین هر دستور اجرایی استفاده می‌کنیم.

from dcmotor import DCMotor       
from machine import Pin, PWM 
from time import sleep  

frequency = 15000      

pin1 = Pin(5, Pin.OUT)    
pin2 = Pin(4, Pin.OUT)     

enable = PWM(Pin(13), frequency)  

dc_motor = DCMotor(pin1, pin2, enable)      
dc_motor = DCMotor(pin1, pin2, enable, 350, 1023)
dc_motor.forward(50)    

sleep(10)        

dc_motor.stop()  
sleep(10)    

dc_motor.backwards(100)  
sleep(10)     

dc_motor.forward(60)
sleep(10)

dc_motor.stop()

 

در این کد ما پین ۱ و پین ۲ را به عنوان پایه های خروجی که هر کدام به ترتیب با GPIO5 و GPIO4 متصل هستند، مقداردهی اولیه می کنیم. پین ENA، پایه PWM در GPIO13 با فرکانس تنظیم شده ۱۵۰۰۰ مشخص شده است. در مرحله بعد، آبجکت DCMotor به نام “dc_motor” را مقداردهی اولیه می کنیم و به آن دسترسی به IN1، IN2 و ENA می دهیم. برای حرکت دادن موتور به جلو و عقب ما از روش های مربوط به آنها استفاده می کنیم که قبلا در ماژول dcmotor تعریف کرده ایم. همچنین مقادیر مختلف سرعت را بین ۰ الی ۱۰۰ مشخص می کنیم و این را به عنوان پارامتر داخل متدها ارسال می کنیم.

 


نتیجه نهایی


در نهایت پس از آپلود کد های ذکر های شده مانند کتابخانه درایور مدنظر و همچنین کد مربوط به سناریو اصلی، موتور DC متصل شده به درایور l298 با توجه به مقادیر از قبل مشخص شده در کد برنامه یعنی فایل main.py تغییرات در جهت مدنظر را انجام خواهد داد. در کد برنامه با توجه توضیحاتی که در پروسه اجرای قادر خواهیم بود بصورت سخت افزاری جهت چرخش و بصورت نرم افزاری سرعت موتور را تغییر دهیم.

 


کلام آخر با سایفر


در این آموزش موفق به راه‌اندازی یک موتور DC به کمک درایور موتور L298 شدیم، که با استفاده از میکروپایتون در محیط uPyCraft دستورات لازم را کدنویسی و اجرا کردیم. کد اجرا شده بطور کامل متناسب با نیاز شما قابل تغییر است همچنین قادر خواهید بود فابل کتابخانه ساخته شده را نیر ویرایش و سفارشی سازی کنید.
کنترل دور موتور با L298 و برد ESP32 میکروپایتون - دیجی اسپارک

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه