ماژول درایور سرو موتور 16 کاناله 12 بیتی PWM با تراشه PCA9685
ماژول درایور سرو موتور 16 کاناله 12 بیتی PWM با تراشه PCA9685
PCA9685 یک ماژول کنترل کننده محبوب با 16 کانال PWM (عرض پالس) 12 بیتی و سروو میباشد. این ماژول به طور رایج در پروژهها و رباتیک برای کنترل چندین سروو، LED و یا سایر دستگاهها که به سیگنالهای PWM نیاز دارند، استفاده میشود. این ماژول 16 کانال مستقل را فراهم میکند که به شما امکان کنترل تا 16 خروجی PWM مختلف را میدهد. رزولوشن خروجی PWM 12 بیتی است که کنترل نرم و دقیقی از چرخه وظیفه (Duty Cycle) را فراهم میکند و این موضوع در کنترل سرووها یا شدت روشنایی LED مفید است. ماژول PCA9685 از طریق پروتکل I2C (مدار متداخلشده داخلی) با میکروکنترلر یا سایر دستگاهها ارتباط برقرار میکند. این امکان را به شما میدهد که به راحتی آن را با میکروکنترلرهای مختلف مانند آردوینو، رزبری پای و سایر پلتفرمها یکپارچه کنید.این ماژول از فرکانسهای قابل تنظیم PWM پشتیبانی میکند که در محدوده 24 هرتز تا 1526 هرتز قرار دارد. این انعطافپذیری به شما اجازه میدهد تا فرکانس PWM را به میزان نیاز برنامه خاص خود تطبیق دهید.
مشخصات فنی ماژول درایور سرو موتور 16 کاناله 12 بیتی PWM با تراشه PCA9685
- ولتاژ کاری: ماژول با ولتاژ 3.3 ولت یا 5 ولت کار میکند.
- تعداد کانالها: 16 کانال مستقل برای خروجی PWM.
- رزولوشن PWM: رزولوشن 12 بیتی که 4096 مرحلهی مختلف PWM را فراهم میکند.
- فرکانس PWM: فرکانس قابل تنظیم PWM که در محدوده 24 هرتز تا 1526 هرتز قرار دارد. محدوده دقیق ممکن است بین ماژولهای مختلف متفاوت باشد.
- رابط کنترل: پروتکل ارتباطی I2C (مدار متداخلشده داخلی) برای اتصال به میکروکنترلرها و سایر دستگاهها.
بررسی پایه های ماژول درایور سرو موتور 16 کاناله 12 بیتی PWM با تراشه PCA9685
- VCC: این پین را به ولتاژ مثبت تامین برق (3.3 ولت یا 5 ولت) برای تغذیه ماژول متصل کنید.
- GND: این پین را به مرجع زمین (0 ولت) متصل کنید.
- SCL: این پین برای ارتباط سریال ساعت I2C با میکروکنترلر استفاده میشود.
- SDA: این پین برای ارتباط سریال داده I2C با میکروکنترلر استفاده میشود.
به همراه ماژول درایور سرو موتور 16 کاناله 12 بیتی PWM با تراشه PCA9685 چه اقلامی باید خریداری شود؟
- سرو موتور Servo motor
- آردوینو Arduino
- کابل فلت
- برد بورد
راه اندازی ماژول PCA9685 با آردوینو
برای راه اندازی ماژول PCA9685 از برد آردوینو استفاده میکنیم.
کتابخانه Wire: این کتابخانه برای ارتباط I2C استفاده میشود.
کتابخانه Adafruit_PWMServoDriver: این کتابخانه برای کنترل ماژول PCA9685 و موتور سرووها استفاده میشود.
ثابت PCA9685_ADDR: آدرس I2C ماژول PCA9685 را تعیین میکند.
ثابت NUM_SERVOS: تعداد سرووهایی که میخواهید کنترل کنید را تعیین میکند.
تابع setup():
تنظیمات اولیه انجام میشود، شامل:
شروع ارتباط سریال با سرعت 9600 بیت بر ثانیه.
شروع ارتباط با ماژول PCA9685 و تنظیم فرکانس آن به 50 هرتز.
تابع loop():
حلقهای است که موتور سروو را به موقعیتهای مختلف حرکت میدهد.
ابتدا موتور سروو را به حداقل موقعیت (0 درجه) حرکت میدهد.
سپس به مدت 1 ثانیه صبر میکند.
سپس موتور سروو را به حداکثر موقعیت (180 درجه) حرکت میدهد.
دوباره به مدت 1 ثانیه صبر میکند.
تابع moveServo():
این تابع مسئول حرکت دادن موتور سروو به زاویه مشخص است.
زاویه (0 تا 180) از ورودی تابع گرفته میشود.
مقدار PWM مورد نیاز برای تنظیم زاویه محاسبه شده و با استفاده از تابع setPWM کتابخانه PCA9685 تنظیم میشود.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// آدرس I2C ماژول PCA9685 را تعیین کنید
#define PCA9685_ADDR 0x40
// تعداد سرووهایی که میخواهید کنترل کنید (تا 16 عدد)
#define NUM_SERVOS 1
// یک نمونه از کلاس Adafruit_PWMServoDriver ایجاد کنید
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(PCA9685_ADDR);
void setup() {
Serial.begin(9600);
// PCA9685 را با فرکانس پیشفرض (50 هرتز) مقداردهی اولیه کنید
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(50); // میتوانید این مقدار را بر اساس مشخصات سروو خود تنظیم کنید
}
void loop() {
// موتور سروو را به موقعیتهای مختلف حرکت دهید
moveServo(0, 0); // موتور سروو را به حداقل موقعیت (زاویه 0 درجه) حرکت دهید
delay(1000); // 1 ثانیه صبر کنید
moveServo(0, 180); // موتور سروو را به حداکثر موقعیت (زاویه 180 درجه) حرکت دهید
delay(1000); // 1 ثانیه صبر کنید
}
// تابعی برای حرکت دادن موتور سروو به زاویه مشخص
void moveServo(uint8_t channel, int angle) {
// زاویه (0-180) را به مقدار PWM (0-4095) تبدیل کنید
uint16_t pwmValue = map(angle, 0, 180, 102, 512); // این مقادیر را بر اساس مشخصات سروو خود تنظیم کنید
// مقدار PWM را برای کنترل موقعیت موتور سروو تنظیم کنید
pwm.setPWM(channel, 0, pwmValue);
}
راه اندازی ماژول PCA9685 با میکروپایتون
کد میکروپایتون برای کنترل موتور سروو با استفاده از ماژول PCA9685 از زبان Python استفاده میکند و با کتابخانهها و توابع موجود در میکروپایتون اجرا میشود.
machine: کتابخانهای برای کنترل و ارتباط با سختافزارها در میکروپایتون.
time: کتابخانهای برای انجام تاخیر و کنترل زمان در میکروپایتون.
آدرس I2C:مقدار ثابت PCA9685_ADDR تعیین کننده آدرس I2C ماژول PCA9685 است.
تعداد سرووها:مقدار ثابت NUM_SERVOS تعیین کننده تعداد سرووها که میخواهیم کنترل کنیم است.
ایجاد ارتباط I2C:از کتابخانه machine.I2C استفاده میکنیم تا ارتباط I2C را ایجاد کنیم.scl=machine.Pin(5) و sda=machine.Pin(4) پینهای SCL و SDA را بهترتیب تعیین میکنند.freq=100000 مشخص میکند که ارتباط I2C با چه فرکانسی صورت بگیرد.
تابع set_servo_pulse():این تابع مقدار PWM برای یک کانال سروو را تنظیم میکند.با توجه به مقدار زاویه و محدوده عملکرد سروو، مقدار PWM محاسبه شده و برای کانال مورد نظر به PCA9685 ارسال میشود.
تابع set_pwm_freq():این تابع فرکانس PWM را تنظیم میکند.با توجه به فرکانس مورد نظر و محاسبات ریاضی، مقدار مناسب برای فرکانس PWM به PCA9685 ارسال میشود.
مقداردهی اولیه به PCA9685:ابتدا با استفاده از تابع set_pwm_freq(50) فرکانس PWM به مقدار 50 هرتز تنظیم میشود.
تابع move_servo():این تابع موتور سروو را به زاویه مشخصی میبرد.زاویه از 0 تا 180 درجه به عنوان ورودی دریافت میشود و محاسباتی انجام میشود تا مقدار PWM مناسب برای رسیدن به زاویه مورد نظر به PCA9685 ارسال شود.
حلقه اصلی:حلقهای بینهایت است که بهصورت مداوم اجرا میشود.در این حلقه، موتور سروو به موقعیتهای مختلف حرکت داده میشود.ابتدا موتور سروو به حداقل موقعیت (زاویه 0 درجه) حرکت میکند و سپس 1 ثانیه صبر میکند.سپس موتور سروو به حداکثر موقعیت (زاویه 180 درجه) حرکت میکند و دوباره 1 ثانیه صبر میکند.این عملکرد بهصورت تکراری انجام میشود و موتور سروو بهطور مداوم بین دو موقعیت حرکت میکند.
import machine
import time
# آدرس I2C ماژول PCA9685 را تعیین کنید
PCA9685_ADDR = 0x40
# تعداد سرووهایی که میخواهید کنترل کنید (تا 16 عدد)
NUM_SERVOS = 1
# مقداردهی اولیه به I2C برای ارتباط
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4), freq=100000)
# تابعی برای تنظیم مقدار PWM برای یک کانال سروو
def set_servo_pulse(channel, pulse_value):
data = bytearray([0x06 + 4 * channel, 0x00, 0x00, pulse_value & 0xFF, pulse_value >> 8])
i2c.writeto(PCA9685_ADDR, data)
# تنظیم فرکانس PWM به 50 هرتز
def set_pwm_freq(freq_hz):
prescale_val = 25000000.0 / (4096 * freq_hz) - 1
prescale = int(prescale_val + 0.5)
oldmode = i2c.readfrom_mem(PCA9685_ADDR, 0x00, 1)[0]
newmode = (oldmode & 0x7F) | 0x10
i2c.writeto_mem(PCA9685_ADDR, 0x00, bytes([newmode]))
i2c.writeto_mem(PCA9685_ADDR, 0xFE, bytes([prescale]))
i2c.writeto_mem(PCA9685_ADDR, 0x00, bytes([oldmode]))
time.sleep_ms(5)
i2c.writeto_mem(PCA9685_ADDR, 0x00, bytes([oldmode | 0xA1]))
# مقداردهی اولیه به PCA9685
set_pwm_freq(50)
# تابعی برای حرکت دادن موتور سروو به زاویه مشخص
def move_servo(channel, angle):
pulse_value = int(102 + (409 - 102) / 180 * angle) # این مقادیر را بر اساس مشخصات سروو خود تنظیم کنید
set_servo_pulse(channel, pulse_value)
while True:
# حرکت دادن موتور سروو به موقعیتهای مختلف
move_servo(0, 0) # موتور سروو را به حداقل موقعیت (زاویه 0 درجه) حرکت دهید
time.sleep(1) # 1 ثانیه صبر کنید
move_servo(0, 180) # موتور سروو را به حداکثر موقعیت (زاویه 180 درجه) حرکت دهید
time.sleep(1) # 1 ثانیه صبر کنید
مشخصات
- کاربری
- مناسب برای استفاده شخصی
- نوع ماژول
- درایور
- سطح تجربه مورد نیاز
- پیشرفته
- ولتاژ مورد نياز
- 2.3 تا 5.5 ولت DC
- دمای کاری
- - 40 تا + 85 درجه سانتی گراد
- ترتیب پایه ها
- مطابق چاپ روی برد
- فرکانس
- فرکانس pwm 1.6kHz
- نوع کانکتور
- پین هدر
- پروتکل ارتباطی
- I2C
- پردازنده
- pca9685
- سایر توضیحات
- درایور سرو موتور
- کیفیت LCD
- 12 بیتی
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.