راه اندازی موتور dc به کمک ماژول L298 با رزبری پای

مقدمه

سلام امیدوارم حالتون خوب باشه و تا امروز مطالب ما براتون مفید واقع شده باشه.

در این جلسه ازآموزش قصد داریم راه اندازی موتور dc به کمک ماژول L298 با رزبری پای رو باهم یاد بگیریم

کسانی که علاقه مند هستن تا  آموزش راه اندازی موتور dcبا آردوینو را یاد بگیرن روی لینک کلید کنند

 

وسایل مورد نیاز برای راه اندازی موتور dc به کمک ماژول L298 با رزبری پای:

 

[icon name=”check-circle” class=”” unprefixed_class=””] یک عدد ماژول L298

[icon name=”check-circle” class=”” unprefixed_class=””] یک عدد آداپتور5v ولت 3A آمپر

[icon name=”check-circle” class=”” unprefixed_class=””] یک عدد برد برد

[icon name=”check-circle” class=”” unprefixed_class=””] یک عدد برد رزبری پای 3

[icon name=”check-circle” class=”” unprefixed_class=””] یک عدد کابل Lan

[icon name=”check-circle” class=”” unprefixed_class=””] یک عددmicro sd

[icon name=”check-circle” class=”” unprefixed_class=””] دو عدد موتور DC 12V

[icon name=”check-circle” class=”” unprefixed_class=””] تعدادی سیم برد برد برای اتصالات

 

خب ما امروز قصد داریم با راه اندازی موتور dc به کمک ماژول L298 بنویسیم.

[icon name=”star-half-o” class=”” unprefixed_class=””] دقت کنید که با استفاده از رابط کاربری (Tkinter) یک نوار لغزنده گرافیکی ایجاد می کنیم

که با تغییر این لغزنده دور موتور DC را تنظیم می کنیم ایجاد و پیکربندی PWM همانند آموزش روشنایی LED می باشد.

[icon name=”star-half-o” class=”” unprefixed_class=””] اما دقت داشته باشید که مقدار اولیه دیوتی سایکل باید صفر باشه

 

شمای فنی ماژول (L298):

راه اندازی موتور Dc به کمک ماژول L298 با رزبری پای

در تصویر بالا با شمای فنی ماژول L298 آشنا شدیم اما در تصویر پایین با نحوه اتصال پایه ها به رزبری پای آشنا خواهیم شد.

 

 

راه اندازی موتور Dc به کمک ماژول L298 با رزبری پای (2)

 

در تصویر بالا با نحوه متصل کردن پایه ها به رزبری پای آشنا شدیم اما در جدول زیر به صورت تک به تک اتصالات را توضیح داده ایم.

جدول پایه ماژول L298 به رزبری پای

[su_table responsive=”yes”]

پایه ماژول پایه های رزبری
IN1 17
IN2 27
IN3 23
IN4 24
5V 5V
GND GROUND

 

**توجه داشته باشید که باید V 12ماژول را به منبع تغذیه متصل می کنیم و منفی آن را به GND ماژول**

[/su_table]

 آشنایی با دستورات راه اندازی

 

[icon name=”circle-o” class=”” unprefixed_class=””] from Tkinter import:

این دستور برای معرفی کل کتابخانه Tkinter به برنامه ما باشد

مانند کد زیر:

from tkinter import *

[icon name=”circle-o” class=”” unprefixed_class=””]  Import RPi.GPIO as GPIO:

این دستور به معنای معرفی اسم برای برنامه می باشد.

مانند کد زیر:

import RPi.GPIO as GPIO

[icon name=”circle-o” class=”” unprefixed_class=””] Import time:

این دستور به معنای معرفی کتابخانه time به برنامه می باشد.

مانند کد زیر:

import time

 [icon name=”circle-o” class=”” unprefixed_class=””] (GPIO.setmode (GPIO.BCM:

این دستور برای وارد کردن کتابخانه مورد نظرمان می باشد.

مانند کد زیر:

GPIO.setmode(GPIO.BCM)

[icon name=”circle-o” class=”” unprefixed_class=””] (GPIO.setup(17, GPIO.OUT:

این دستور برای توابع ما می باشد که پایه 27 را به عنوان خروجی در نظر گرفته ایم و برای پایه های دیگر هم به همین صورت می باشد .

مانند کد زیر:

GPIO.setup(17,GPIO.OUT)

[icon name=”circle-o” class=”” unprefixed_class=””] ( Pwm RB = GPIO.PWM(17, 500:

این دستور برای pwm چرخ سمت راست به سمت عقب ما می باشد که زمان pwm پایه 17 مارا معین می کند.

مانند کد زیر:

pwmRB = GPIO.PWM(17, 500)

[icon name=”circle-o” class=”” unprefixed_class=””] ( PwmRB.start(0:

این دستور مربوط به  pwm چرخ راست به سمت عقب است که استارت آن از صفر می باشد.

مانند کد زیر:

pwmRB.start(0)

[icon name=”circle-o” class=”” unprefixed_class=””](pwmRF = GPIO.PWM(27, 500

این دستور برای pwm چرخ سمت راست مابه سمت جلو می باشد که زمان pwm پایه 27 ما را معین می کند.

مانند کد زیر:

pwmRF = GPIO.PWM(27, 500)

[icon name=”circle-o” class=”” unprefixed_class=””] ( PwmRF.start(0:

این دستور مربوط به  pwm چرخ راست به سمت جلو است که استارت آن از صفر می باشد.

مانند کد زیر:

pwmRF.start(0)

[icon name=”circle-o” class=”” unprefixed_class=””] ( Pwm LB = GPIO.PWM(23, 500:

این دستور برای pwm چرخ سمت چپ مابه سمت عقب می باشد که زمان pwm پایه 23 ما را معین می کند.

مانند کد زیر:

pwmLB = GPIO.PWM(23, 500)

[icon name=”circle-o” class=”” unprefixed_class=””] ( PwmLB.start(0:

این دستور مربوط به  pwm چرخ چپ به سمت عقب است که استارت آن از صفر می باشد.

مانندکد زیر:

pwmLB.start(0)

[icon name=”circle-o” class=”” unprefixed_class=””] ( Pwm LF = GPIO.PWM(24, 500:

این دستور برای pwm چرخ سمت چپ مابه سمت جلو می باشد که زمان pwm پایه24 ما را معین می کند.

مانند کد زیر:

pwmLF = GPIO.PWM(24, 500)

[icon name=”circle-o” class=”” unprefixed_class=””] ( PwmLF.start(0:

این دستور مربوط به  pwm چرخ چپ به سمت جلو است که استارت آن از صفر می باشد.

مانند کد زیر:

pwmLF.start(0)

[icon name=”circle-o” class=”” unprefixed_class=””]  Class APP:

این دستور مربوط به کلاس توابعی می باشد که ما توابع را در آن نوشته ایم.

مانند کد زیر:

class App:

[icon name=”circle-o” class=”” unprefixed_class=””] (Def __init__(self, master:

در این دستور ما توابعی را تعریف می کنیم.

مانند کد زیر:

  def __init__(self, master):

[icon name=”circle-o” class=”” unprefixed_class=””] ( Frame = Frame(master:

در این خط ما یک محیط گرافیکی به نام frame ایجاد کرده ایم که مساوی محیط گرافیکی master قرار داده ایم.

مانند کد زیر:

 frame = Frame(master)

[icon name=”circle-o” class=”” unprefixed_class=””] ()Frame.pack:

این دستور یک پنل گرافیکی برای ما ایجاد می کند.

مانند کد زیر:

 frame.pack()

[icon name=”circle-o” class=”” unprefixed_class=””](Label(frame, text=’RB’).grid(row=0, column=0

[icon name=”circle-o” class=”” unprefixed_class=””](Label(frame, text=’RF’).grid(row=1, column=0

در این خط ما کلید های گرافیکی کنترل موتور ها به سمت راست(به سمت عقب وجلو)را در جدول گرافیکی

تعریف و موقعیت مکانی نوشته را در آن مشخص تعریف کرده ایم

مانند کد زیر:

  Label(frame, text='RB').grid(row=0, column=0)
  Label(frame, text='RF').grid(row=1, column=0)

[icon name=”circle-o” class=”” unprefixed_class=””](Label(frame, text=’LB’).grid(row=0, column=2
[icon name=”circle-o” class=”” unprefixed_class=””](Label(frame, text=’LB’).grid(row=1, column=2

در این خط ما کلید های گرافیکی کنترل موتور ها به سمت چپ(به سمت عقب وجلو)را در جدول گرافیکی

تعریف و موقعیت مکانی نوشته را در آن مشخصکرده ایم

مانند کد زیر:

 Label(frame, text='LB').grid(row=0, column=2)
 Label(frame, text='LF').grid(row=1, column=2)

[icon name=”circle-o” class=”” unprefixed_class=””](Label(frame, text=’Robotafzar GUI Motor Controller’).grid(row=5, column=1

در این خط ما اسم مورد نظر خودمان را نوشته ایم و موقعیت مکانی نوشته را در آن مشخص کرده ایم

مانند کد زیر:

 

 Label(frame, text='Robotafzar GUI Motor Controller').grid(row=5, column=1)

[icon name=”circle-o” class=”” unprefixed_class=””] (Scale RB = Scale(frame, from_=0, to=100,orient=HORIZONTAL,command=self.updateRB

این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم

که مربوط به موتور سمت  راست به سمت عقب می باشد.

مانند کد زیر:

  scaleRB = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateRB)

 [icon name=”circle-o” class=”” unprefixed_class=””](scaleRB.grid(row=0, column=1

این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت عقب را مشخص می کند.

مانند کد زیر:

 scaleRB.grid(row=0, column=1)

[icon name=”circle-o” class=”” unprefixed_class=””](Scale RF = ScaleRF(frame, from_=0, to=100,orient=HORIZONTAL,command=self.update RF

این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم

که مربوط به موتور سمت راست به سمت جلومی باشد.

مانند کد زیر:

 scaleRF = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateRF)

[icon name=”circle-o” class=”” unprefixed_class=””] (ScaleRF.grid(row=0:

این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت جلو را مشخص می کند.

مانند کد زیر:

 scaleRF.grid(row=1, column=1)

[icon name=”circle-o” class=”” unprefixed_class=””](scaleLB= Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLB)

این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم

که مربوط به موتور سمت چپ به سمت عقب باشد.

مانند کد زیر:

  scaleLB= Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLB)

[icon name=”circle-o” class=”” unprefixed_class=””](scaleLB.grid(row=0, column=3

این دستور برای مختصات دیوتی سایکل موتور سمت چپ به سمت عقب را مشخص می کند.

مانند کد زیر:

 scaleLB.grid(row=0, column=3)

[icon name=”circle-o” class=”” unprefixed_class=””](scaleLF = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLF)

این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم

که مربوط به موتور سمت چپ به سمت جلو باشد.

مانند کد زیر:

 scaleLF = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLF)

[icon name=”circle-o” class=”” unprefixed_class=””](scaleLF.grid(row=1, column=3

این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت جلو را مشخص می کند.

مانند کد زیر:

 scaleLF.grid(row=1, column=3)

[icon name=”circle-o” class=”” unprefixed_class=””] (Def update RB (self, duty:

این دستور مربوط به بروزرسانی تابع موتور سمت راست به سمت عقب می باشد.

مانند کد زیر:

 def updateRB(self, duty):

[icon name=”circle-o” class=”” unprefixed_class=””]  (Pwm RB .ChangeDutyCycle(float(duty

این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت راست به سمت عقب می باشد.

مانند کد زیر:

  pwmRB.ChangeDutyCycle(float(duty))

[icon name=”circle-o” class=”” unprefixed_class=””] ( Def update RF (self, duty

این دستور مربوط به بروزرسانی تابع موتور سمت راست به سمت جلو می باشد.

مانند کد زیر:

 def updateRF(self, duty):

[icon name=”circle-o” class=”” unprefixed_class=””] (Pwm RF .ChangeDutyCycle(float(duty

این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت راست به سمت جلو می باشد.

مانند کد زیر:

  pwmRF.ChangeDutyCycle(float(duty))

[icon name=”circle-o” class=”” unprefixed_class=””] (def updateLB(self, duty:

این دستور مربوط به بروزرسانی تابع موتور سمت چپ به سمت عقب می باشد.

مانند کد زیر:

 def updateLB(self, duty):

pwmLB.ChangeDutyCycle(float(duty)) [icon name=”circle-o” class=”” unprefixed_class=””]

این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت چپ به سمت عقب می باشد.

مانند کد زیر:

 pwmLB.ChangeDutyCycle(float(duty)) 

[icon name=”circle-o” class=”” unprefixed_class=””]  (def updateLF(self, duty

این دستور مربوط به بروزرسانی تابع موتور سمت چپ به سمت جلو می باشد.

مانند کد زیر:

 def updateLF(self, duty): 

[icon name=”circle-o” class=”” unprefixed_class=””]((pwmLF.ChangeDutyCycle(float(duty

این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت چپ به سمت جلو می باشد.

مانند کد زیر:

  pwmLF.ChangeDutyCycle(float(duty))

[icon name=”circle-o” class=”” unprefixed_class=””] ()Root = Tk

در این دستور ما تابع هایی که در Tk  نوشته ایم مساوی root  قرار داده ایم که تابع ها

در root  ریخته می شود

مانند کد زیر:

root=Tk()

 

root.wm_title(‘کنترل کننده ربات افزار’)[icon name=”circle-o” class=”” unprefixed_class=””]

در این دستور میزان جریان pwm را کنترل می نماییم.

مانند کد زیر:

root.wm_title('کنترل کننده ربات افزار')

[icon name=”circle-o” class=”” unprefixed_class=””] ( App = App(root

در این دستور ما app را مساوی کلاسی که معرفی کرده ایم قرار داده ایم.

مانند کد زیر:

app=App(root)

[icon name=”circle-o” class=”” unprefixed_class=””]  (“root.geometry(“500×400+0+0

در این دستور ما شکل و اندازه جدول محیط گرافیکی را تعریف کرده ایم.

مانند کد زیر:

root.geometry("500x400+0+0")

[icon name=”circle-o” class=”” unprefixed_class=””] () Root.mainloop

این دستور تابعی را برایمان فراخوانی می کند.

مانند کد زیر:

root.mainloop()

 

**توجه داشته باشید که در قسمت geometry در پرانتز بعد از عدد 200 ما حرف ایکس را گذاشته ایم **

 

راه اندازی موتور Dc به کمک ماژول L298 با رزبری پای (3)

 

 

 

سورس کامل برنامه:

#این دستور برای معرفی کل کتابخانه تکینتر به برنامه ما باشد
from tkinter import *
#این دستور به معنای معرفی اسم برای برنامه می باشد.
import RPi.GPIO as GPIO
#این دستور به معنای معرفی کتابخانه تایم به برنامه می باشد.
import time
#این دستور برای وارد کردن کتابخانه مورد نظرمان می باشد.
GPIO.setmode(GPIO.BCM)
#این دستور برای توابع ما می باشد که پایه 17را به عنوان خروجی در نظر گرفته ایم و برای پایه های دیگر هم به همین صورت می باشد .
GPIO.setup(17,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
#این دستور برای پی دبلیو ام چرخ سمت راست به سمت عقب ما می باشد که زمان پی دبلیو ام پایه 17 مارا معین می کند.
pwmRB = GPIO.PWM(17, 500)
#این دستور مربوط به  پی دبلیو ام چرخ راست به سمت عقب است که استارت آن از صفر می باشد.
pwmRB.start(0)
#این دستور برای پی دبلیوام چرخ سمت راست مابه سمت جلو می باشد که زمان پی دبلیو ام پایه 27 ما را معین می کند.
pwmRF = GPIO.PWM(27, 500)
#این دستور مربوط به  پی دبلیو ام چرخ راست به سمت جلو است که استارت آن از صفر می باشد.
pwmRF.start(0)
#این دستور برای پی دبلیو ام چرخ سمت چپ مابه سمت عقب می باشد که زمان پی دبلیو ام پایه 23 ما را معین می کند.
pwmLB = GPIO.PWM(23, 500)
#این دستور مربوط به  پی دبلیو ام چرخ چپ به سمت عقب است که استارت آن از صفر می باشد.
pwmLB.start(0)
#این دستور برای پی دبلیو ام چرخ سمت چپ مابه سمت جلو می باشد که زمان پی دبلیو ام پایه24 ما را معین می کند.
pwmLF = GPIO.PWM(24, 500)
#این دستور مربوط به  پی دبلیو ام چرخ چپ به سمت جلو است که استارت آن از صفر می باشد.
pwmLF.start(0)
#این دستور مربوط به کلاس توابعی می باشد که ما توابع را در آن نوشته ایم.
class App:
	#در این دستور ما توابعی را تعریف می کنیم.
    def __init__(self, master):
        #در این خط ما یک محیط گرافیکی به نام فریم ایجاد کرده ایم که مساوی محیط گرافیکی مستر قرار داده ایم.
        frame = Frame(master)
        #این دستور یک پنل گرافیکی برای ما ایجاد می کند.
        frame.pack()
  #در این خط ما کلید های گرافیکی کنترل موتور ها به سمت راست(به سمت عقب وجلو)را در جدول گرافیکی
        # تعریف و موقعیت مکانی نوشته را در آن مشخص تعریف کرده ایم
        Label(frame, text='RB').grid(row=0, column=0)
        Label(frame, text='RF').grid(row=1, column=0)
#در این خط ما کلید های گرافیکی کنترل موتور ها به سمت چپ(به سمت عقب وجلو)را در جدول گرافیکی
        # تعریف و موقعیت مکانی نوشته را در آن مشخصکرده ایم
        Label(frame, text='LB').grid(row=0, column=2)
        Label(frame, text='LF').grid(row=1, column=2)
        #در این خط ما اسم مورد نظر خودمان را نوشته ایم و موقعیت مکانی نوشته را در آن مشخص کرده ایم
        Label(frame, text='Robotafzar GUI Motor Controller').grid(row=5, column=1)
        #این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم
        # که مربوط به موتور سمت  راست به سمت عقب می باشد.
        scaleRB = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateRB)
        #این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت عقب را مشخص می کند.
        scaleRB.grid(row=0, column=1)
#این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم
        # که مربوط به موتور سمت راست به سمت جلومی باشد.
        scaleRF = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateRF)
        #این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت جلو را مشخص می کند.
        scaleRF.grid(row=1, column=1)
#این دستور برای تابع به روزرسانی مربوط به مقدار دیوتی سایکل می باشد از این تابع استفاده می کنیم
        # که مربوط به موتور سمت چپ به سمت عقب باشد.
        scaleLB= Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLB)
        #این دستور برای مختصات دیوتی سایکل موتور سمت چپ به سمت عقب را مشخص می کند.
        scaleLB.grid(row=0, column=3)
        #این دستور برای مختصات دیوتی سایکل موتور سمت چپ به سمت عقب را مشخص می کند.که مربوط به موتور سمت چپ به سمت جلو باشد.
        scaleLF = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateLF)
        #این دستور برای مختصات دیوتی سایکل موتور سمت راست به سمت جلو را مشخص می کند.
        scaleLF.grid(row=1, column=3)

#این دستور مربوط به بروزرسانی تابع موتور سمت راست به سمت عقب می باشد.
    def updateRB(self, duty):
        #این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت راست به سمت عقب می باشد.
        pwmRB.ChangeDutyCycle(float(duty))
	#این دستور مربوط به بروزرسانی تابع موتور سمت راست به سمت جلو می باشد.
    def updateRF(self, duty):
        #این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت راست به سمت جلو می باشد.
        pwmRF.ChangeDutyCycle(float(duty))
#این دستور مربوط به بروزرسانی تابع موتور سمت چپ به سمت عقب می باشد.
    def updateLB(self, duty):
        #این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت چپ به سمت عقب می باشد.
        pwmLB.ChangeDutyCycle(float(duty))
	#این دستور مربوط به بروزرسانی تابع موتور سمت چپ به سمت جلو می باشد.
    def updateLF(self, duty):
        #این دستوربرای نشان دادن تغییرات دیوتی سایکل موتور سمت چپ به سمت جلو می باشد.
        pwmLF.ChangeDutyCycle(float(duty))
	    #در این دستور ما تابع هایی که در Tk  نوشته ایم مساوی root  قرار داده ایم که تابع هادر root  ریخته می شود
root=Tk()
#در این دستور میزان جریان پی دبیلو ام را کنترل می نماییم.
root.wm_title('کنترل کننده ربات افزار')
#در این دستور ما اپ را مساوی کلاسی که معرفی کرده ایم قرار داده ایم.
app=App(root)
#در این دستور ما شکل و اندازه جدول محیط گرافیکی را تعریف کرده ایم.
root.geometry("500x400+0+0")
#این دستور تابعی را برایمان فراخوانی می کند.
root.mainloop()


 

ویدیو راه اندازی پروژه:

نتیجه:

با استفاده از راه اندازی موتور dc به کمک ماژول L298 با رزبری پای می توانیم برای کنترل محور هایی

مانند چرخ-ربات-ماشین های کنترلی و… استفاده نمود

می توان میزان چرخش مته های بزرگ در پروژه های بزرگ زیر زمینی را کنترل کرد

 

[su_box title=”لینک دانلود” box_color=”#9f1313″ radius=”15″] فایلZIP

حجم نرم افزار(      )

رمز فایلZIP:robotafzar.ir[/su_box]

موفق پیروز باشید

امیدوارم از مطلب لذت برده باشید حتما سر به اینستاگرام و کانال ما بزنید

 

[wp_ulike]
اگر می‌خواهید از آخرین و محبوب‌ترین مقالات ما در ایمیل خود مطلع شوید، همین الان ایمیل و شماره موبایل خود را در کادر زیر وارد کنید:
تعداد علاقه مندانی که تاکنون عضو خبرنامه ما شده اند: 0 نفر
دیدگاه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *