ارتباط سریال بین آردوینو و رزبری پای با Rs-485
محتویات
- برقراری اتصال سریال RS-485 بین Raspberry pi و Arduino
- ارتباط سریال RS-485
- روش انتقال سیگنال دیفرانسیل چیست؟
- ماژول سریال RS-485
- توضیحات پین های RS-485
- ویژگی های ماژول RS485 :
- توضیحات مدار پروژه ارتباط سریال Arduino و Raspberry pi
- اتصال مدار بین یک RS-485 و Raspberry Pi 3 B +
- اتصال مدار بین یک RS-485 و Arduino UNO
- اتصالات آردوینو UNO با سروو موتور SG-90
- اتصال مدار بین LCD و Arduino UNO
- برنامه نویسی رزبری پای با پایتون برای ارتباط سریال
- فعال کردن UART در رزبری پای
- برنامه نویسی آردوینو برای ارتباط سریال
سلام. ارتباط سریال بین آردوینو و رزبری پای با Rs-485 را آماده کردیم.
برقراری اتصال سریال RS-485 بین Raspberry pi و Arduino
انتخاب پروتکل ارتباطی برای برقراری ارتباط بین میکروکنترلرها و دستگاههای جانبی بخش مهمی از الکترونیک است. استفاده از پروتکل ارتباطی باعث تغییر در بسیاری از مسائل مثل هزینه، سرعت، محدوده انتقال و … میشود. در این پروژه رزبری پای و آردوینو، ما موقعیت شافت یک سروو موتور متصل به آردوینو را از طریق برد رزبری پای کنترل کنیم. همچنین درجه ارسال شده از رزبری پای در ال سی دی کاراکتری متصل به آردوینو نمایش داده میشود.
ارتباط سریال RS-485
RS-485 یک پروتکل ارتباط سریال ناهمزمان است که به ساعت نیاز ندارد. این پروتکل از یک تکنیک به نام سیگنال دیفرانسیل برای انتقال داده های باینری از یک دستگاه به دستگاه دیگر استفاده می کند.
روش انتقال سیگنال دیفرانسیل چیست؟
روش سیگنال دیفرانسیل با ایجاد ولتاژ دیفرانسیل با استفاده از 5 ولت مثبت و منفی کار می کند. و با استفاده از دو سیم ، ارتباطات Half-Duplex را برقرار می کند.
با استفاده از این روش:
- RS-485 حداکثر سرعت انتقال داده بالاتر از 30Mbps را پشتیبانی می کند.
- این داده ها حداکثر 1200 متر را انتقال می دهد.
- مهمترین مزیت RS-485 نسبت به RS-232 این است که میتواند از یک برد با چندین برد ارتباط داشته باشد.
- حداکثر 32 دستگاه می توانند متصل به پروتکل RS-485 باشد.
- یکی دیگر از مزایای RS-485 ، مصون بودن از نویز است/
- RS-485 نسبت به پروتکل I2C سریعتر است.
ماژول سریال RS-485
ماژول RS-485 می تواند به هر میکروکنترلر دارای درگاه سریال متصل شود. برای استفاده از ماژول RS-485 با میکروکنترلرها ، ما به MAX485 TTL RS485 که مبتنی بر Maxim MAX485 IC است نیاز داریم زیرا ارتباط سریال را در مسافت های طولانی 1200 متری انجام می دهد و بصورت دو طرفه و Half-Duplex دارای سرعت انتقال داده 2.5 مگابایت بر ثانیه است. است.این ماژول نیاز به 5 ولت نیاز دارد.
توضیحات پین های RS-485
نام پین | توضیحات |
VCC | 5V |
A | خروجی درایور غیر معکوس گیرنده ورودی |
B | وارسی ورودی گیرنده معکوس خروجی درایور |
GND | GND (0V) |
R0 | Receiver Out (RX pin) |
RE | Receiver Output (LOW-Enable) |
DE | Driver Output (HIGH-Enable) |
DI | Driver Input (TX pin) |
ویژگی های ماژول RS485 :
- ولتاژ 5 ولت
- تراشه MAX485 روی صفحه
- مصرف برق کم برای ارتباطات RS485
- گیرنده محدود به سرعت
- پایانه 2P قدم 5.08 میلی متری
- سیم کشی ارتباطی راحت RS-485
- تمام پین های تراشه منجر به کنترل از طریق میکروکنترلر می شوند
- اندازه: 14*44 میلی متر
توضیحات مدار پروژه ارتباط سریال Arduino و Raspberry pi
برای اتصال MAX485 TTL RS-485 به Raspberry Pi از پین های UART رزبری پای استفاده می شود (GPIO14، GPIO15). برای اتصال MAX485 TTL RS-485 به آردوینو UNO از پین های UART برد آردوینو استفاده می شود (1 و 0)
اتصال مدار بین یک RS-485 و Raspberry Pi 3 B +
RS-485 | Raspberry Pi 3 B+ |
DI | GPIO14 (TX) |
DE RE | GPIO4 |
R0 | GPIO15(RX) |
VCC | 5V |
GND | GND |
A | To A of RS-485 |
B | To B of RS-485 |
اتصال مدار بین یک RS-485 و Arduino UNO
RS-485 | Arduino UNO |
DI | 1 (TX) |
DE RE | 2 |
R0 | 0 (RX) |
VCC | 5V |
GND | GND |
A | To A of RS-485 |
B | To B of RS-485 |
اتصالات آردوینو UNO با سروو موتور SG-90
Servo Motor (SG-90) | Arduino UNO |
RED | +5V |
ORANGE (PWM) | 3 |
BROWN | GND |
اتصال مدار بین LCD و Arduino UNO
16×2 LCD | Arduino UNO |
VSS | GND |
VDD | +5V |
V0 | پتاسیومتر |
RS | 8 |
RW | GND |
E | 9 |
D4 | 10 |
D5 | 11 |
D6 | 12 |
D7 | 13 |
A | +5V |
K | GND |
برنامه نویسی رزبری پای با پایتون برای ارتباط سریال
در Raspberry Pi مقدار (0،10،45،90،135،180،135،90،45،10،0) از طریق پورت سریال رزبری پای به Arduino UNO ارسال می شود. برای استفاده از درگاه سریال در رزبری پای باید پورت سریال UART فعال شود.
فعال کردن UART در رزبری پای
قبل از استفاده از پین های UART در Raspberry Pi ، لازم است که فعال شوند. برای فعال کردن پین های UART (Serial)
در برد Raspberry Pi مراحل زیر را دنبال کنید.
1. ترمینال را باز کنید و sudo raspi-config
را تایپ کنید.
2. گزینه Interfacing را انتخاب کنید.
3. و سپس سریال را انتخاب کنید.
4. سپس بر روی “No” کلیک کنید (برای غیرفعال کردن کنسول لینوکس UART استفاده می شود).
5. سپس از raspi-config خارج شوید.
6. سپس رزبری پای را ریستارت کنید.
اکنون پورت سریال آماده استفاده است.
مهم: قبل از نوشتن مقادیر برای ماژول RS-485 ، پین های DE و RE باید High شوند.
بنابراین ، اکنون می خواهیم جزئیات مربوط به برنامه نویسی پایتون را در سمت رزبری پای ببینیم.
در ابتدا ، تمام كتابخانه های مورد استفاده فراخوانی می شوند. کتابخانه هایی که در اینجا مهم هستند عبارتند از time، Serial (برای ارتباط سریال) ، GPIO برای دسترسی به GPIO و Sleep.
import time import serial import RPi.GPIO as GPIO from time import sleep
در زیر ، GPIO.BOARD مشخص می کند که شما پین ها را با شماره پین های روی برد مشخص میکنید.
GPIO.setmode(GPIO.BOARD)
پین GPIO 7 در رزبری پای High میشود به دلیل اینکه پین 7 به DE و RE از RS-485 وصل شده است و باعث می شود رزبری پای مقادیر را ارسال کند.
GPIO.setup(7, GPIO.OUT, initial=GPIO.HIGH)
کلاس سریال را در پین های GPIO14 و GPIO 15 (درگاه Serial0) با اطلاعات مختلفی مانند پورت سریال ، نرخ baud ، میزان parity و Stop پیکربندی میکنیم.
send = serial.Serial( port='/dev/serial0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 )
متغیر “i” آرایه ای با مقادیر زاویه های است ، این مقادیر از طریق ارتباط سریال ارسال می شوند.
i = [0,10,45,90,135,180,135,90,45,10,0]
تابع send.write (str (x))
مقادیر را در while به صورت پی در پی به RS-485 ارسال می کند.
while True: for x in i: send.write(str(x)) print(x) time.sleep(1.5)
برنامه نویسی آردوینو برای ارتباط سریال
در طرف گیرنده که Arduino UNO است ، مقادیر از رزبری پای دریافت می شود. سروو موتور متصل به آردوینو با توجه به مقدار دریافت شده چرخانده می شود و همچنین مقدار آن در LCD نشان داده می شود. بنابراین ، در برنامه Arduino از کتابخانه نمایشگر LCD و کتابخانه موتور Servo استفاده شده است. Arduino IDE برای برنامه نویسی Arduino UNO استفاده می شود.
مهم : از آنجایی که Arduino UNO از RS-485 اطلاعات را دریافت می کند ، پین های DE و RE باید Low شوند.
دقیقاً مثل رزبری پای ما چندین لوازم جانبی داریم و باید کتابخانه های مورد نیاز مثل سروو موتور و ال سی دی کاراکتری را فراخوانی کنیم. بنابراین کد را با انجام این قسمت شروع میکنیم.
#include <LiquidCrystal.h> #include <Servo.h>
سپس پین های نمایشگر LCD 16X2 که قرار است به Arduino UNO متصل شوند و پین کنترل سروو موتور نیز تعیین میشود.
LiquidCrystal lcd(8,9,10,11,12,13); Servo servo;
در ابتدا یک پیام نمایش داده می شود که می تواند با توجه به پروژه تغییر کند و سپس برای پیام بعدی پاک می شود.
lcd.begin(16,2); lcd.print("Irenx.ir"); lcd.setCursor(0,1); lcd.print("RS_485"); delay(3000); lcd.clear();
ارتباط سریال با نرخ baud 9600 آغاز می شود.
Serial.begin(9600);
همانطور که گفتیم آردوینو اطلاعات را از RS-485 متصل به آردوینو بنابراین پین
همانطور که Arduino RS-485 مقدار را از رزبری پای دریافت می کند ، بنابراین پین 2 (EnablePin) برای قرار دادن آن در حالت گیرنده، Low میشود. همچنین باعث میشود که پین DE و RE از RS-485 برای دریافت اطلاعات Low باشند.
digitalWrite(enablePin, LOW);
پین PWM سروو موتور به پین 3 PWM آردوینو وصل می شود.
servo.attach(3);
while loop جایی است که مقادیر از سمت رزبری پای دریافت میشوند.
از عملکرد Serial.paseInt () برای دریافت مقدار عدد صحیح (زاویه) از درگاه سریال استفاده می شود.
int angle = Serial.parseInt();
مقدار چرخش زاویه دریافت شده برای سرو موتور به منظور چرخش شافت موتور سروو از (0 تا 180) نوشته میشود.
servo.write(angle);
و در آخر ، مقدار زاویه در نمایشگر LCD با استفاده از توابع LCD مربوطه نمایش داده می شود.
lcd.setCursor(0,0); lcd.print("Angle From RPi "); lcd.setCursor(0,1); lcd.print(angle);
از ترمینال برای اجرای کد پایتون در Raspberry Pi استفاده کنید. مقدار زاویه از رزبری پای به آردوینو ارسال می شود تا زاویه Servo Motor را از طریق ارتباط سریال RS-485 کنترل کند.
موارد موجود در فایل : سورس کامل ، شماتیک
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود