Dùng RPi đóng/ngắt mạch điện

1. Connector P1  (Các cổng GPIO trên RPi model A, B và B+, Rpi 2)

bplus

Raspberry-Pi-GPIO-pinouts

 

2. Relay dùng cho RPi

relay

RPi dùng relay 5VDC (dòng 5 volt một chiều), có nhiều loại phân biệt bởi số chân cắm (5, 8, 14). Các relay này cần một đế cắm tương thích.

decamCấu tạo của relay gồm một mạch điều khiển (5VDC) đóng mở mạch ngoài (DC hay AC).

Các cổng GPIO của RPi cung cấp các dòng rất nhỏ ở 3.3V nên có thể không điều khiển được relay. Vì vậy thông thường cần một IC và một điện trở để làm mạch khuếch đại.

GPIO-Output-Circuit

Để tiện dùng, người ta lắp sẵn các board relay bao gồm relay và mạch khuếch đại (chợ Nhật Tảo tpHCM có bán nhiều).

 

relay1relay2arelay-4

relay8

 

3. Đấu nối RPi và relay

Mạch điều khiển được kết nối qua các chân cắm, bao gồm VCC (hay VCC+), GND (hay VCC-) và một hay nhiều IN. Chân VCC nối với chân 5V của RPi (PIN 2 hay PIN 4), chân GND nối với GND của RPi (PIN 6, 9, 14, 20, 25, 30, 34 hay PIN 39), các chân IN nối với các chân GPIO của RPi tùy nhu cầu.

Kết nối với mạch ngoài gồm các vít NC (normally close – thường đóng), CommonNO (normally open – thường mở). NC + Common / NO + Common được nối thông tùy vào trạng thái đóng/mở của relay (NC thông thì NO ngắt và ngược lại).

Với đa số board relay, điện thế 0-0.25V được xem là mức LOW, điện thế 2.5-5V được xem là mức HIGH.

 

4. Lập trình đóng/ngắt relay

Cài đặt wiringpi2 để lập trình trên các chân điều khiển GPIO của RPi.

apt-get install python-dev python-pip
sudo pip install wiringpi2

4.1 wiringPi định nghĩa 28 chân cắm

Dùng lệnh gpio readall để xem sơ đồ chân cắm

Screenshot 2015-07-07 07.22.42

Raspberry+Pi+GPIO+Pins

  • wPi 0, 2-6 (BMC 17, 27, 22, 23, 24, 25): sử dụng an toàn trong mọi trường hợp
  • wPi 7 (BMC 4): có thể sử dụng, tuy đã dùng bởi 1-Wire kernel driver
  • PWM (BMC 18): nếu dùng có audio qua jack 3.5mm, một kênh âm thanh sử dụng pin này
  • wPi 8, 9, 30, 31 (BMC 2, 3, 0, 1): pin I2C. Nếu không dùng I2C drivers thì có thể sử dụng các pin này, không có sẵn điện trờ 1.8Kohm trên board nên phải thêm vào mạch ngoài.
  • wPi 10-14 (BMC 8, 7, 10, 9, 11): SPI interface. Tương tự như I2C
  • wPi 15, 16 (BMC 14, 15): dùng bới UART cho Tx và Rx. Muốn dùng các pin này, phải disable serial console khi khởi động (xem /boot/cmdline.txt)
  • wPi 17-20 (BMC 28-31): các pin GPIO bổ sung trên model B.
  • wPi 21-29 (BMC 5, 6, 13, 19, 26, 12, 16, 20, 21): các pin bổ sung trên model B+

Chú ý là RPi là thiết bị 3.3V, nối một thành phần của RPi với 5V có thể gây hư hỏng.

4.2 wiringPi dùng với python

Gần đầu Python script cần khai báo dòng import wiringPi

import wiringpi2 as wiringpi

Đánh số các chân cắm, có 3 cách

  1. WiringPi pin mode
  2. GPIO mode
  3. Physical pin numbers (header P1 only)

tương ứng với 3 cách khai báo

wiringpi.wiringPiSetup()
wiringpi.wiringPiSetupGpio()
wiringpi.wiringPiSetupPhys()

Cài đặt port

wiringpi.pinMode(port_or_pin_number, X)

trong đó port_number là số GPIO port (hoặc pin)
X = 0 dùng cho input,
X = 1 dùng cho output,
X = 2 dùng cho chức năng thay thế (e.g. PWM trên port 18)

Thí dụ

# GPIO port numbers
import wiringpi2 as wiringpi
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(250) # sets GPIO 25 to input
wiringpi.pinMode(241) # sets GPIO 24 to output
wiringpi.pinMode(182) # sets GPIO 18 to PWM mode
# wiringpi numbers
import wiringpi2 as wiringpi
wiringpi.wiringPiSetup()
wiringpi.pinMode(60# sets WP pin 6 to input
wiringpi.pinMode(51# sets WP pin 5 to output
wiringpi.pinMode(12# sets WP pin 1 to PWM mode
# Physical P1 header pin numbers
import wiringpi2 as wiringpi
wiringPiSetupPhys()
wiringpi.pinMode(220# sets P1 pin 22 to input
wiringpi.pinMode(181# sets P1 pin 18 to output
wiringpi.pinMode(122# sets P1 pin 12 to PWM mode

Đọc từ input

my_input = wiringpi.digitalRead(port_or_pin_number)
if my_input:
    print "Input on Port port_or_pin_number is 1"
    # then you'd code what you want to happen when port port_or_pin_number is HIGH
else:
    print "Input on Port port_or_pin_number is 0"
    # then you'd code what you want to happen when port port_or_pin_number is LOW

Ghi ra output

#GPIO port numbers
import wiringpi2 as wiringpi
from time import sleep
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(241)      # sets GPIO 24 to output
wiringpi.digitalWrite(240# sets port 24 to 0 (0V, off)
sleep(10)                    # wait 10s
wiringpi.digitalWrite(241# sets port 24 to 1 (3V3, on)
sleep(10)                    # wait 10s
wiringpi.digitalWrite(240# sets port 24 to 0 (0V, off)

Clean up khi xong việc

Trong đoạn mã trên, script kết thúc với port 24 ở mode output, ở lần truy cập sau chúng ta có thể gặp lỗi “port is already in use by another program”. Tốt nhất là đặt lại port ở mode input

wiringpi.digitalWrite(24, 0) # sets port 24 to 0 (0V, off) – may be unnecessary, but I prefer to do it
wiringpi.pinMode(24, 0)      # sets GPIO 24 to input Mode

4.3 Minh họa

Vật dụng

  • RPi model B+
  • Board mạch relay
  • Cáp nối
  • Máy đo ohm

_DSC2204

Đấu nối

  • Dây đỏ nối pin 2 (5VDC) trên RPi với pin VCC trên board relay
  • Dây đen nối pin 6 (GND) trên RPi với pin GND trên board relay
  • Dây tím nối pin 11 trên RPi với pin IN1 trên board relay
  • Dây trắng nối pin 12 trên RPi với pin IN2 trên board relay

Thực nghiệm

  • Dùng wiringPi để thay đổi trạng thái của các pin 11 và 12, qua đó đóng/mở các relay.
  • Dùng đồng hồ đo ohm để đo điện trở giữa vít Common – NO/NC để biết trạng thái đóng/mở của relay.

Mã lệnh

import wiringpi2 as wiringpi
from time import sleep
wiringpi.wiringPiSetupPhys()
wiringpi.pinMode(11, 1# sets pin 11 to output
wiringpi.pinMode(121# sets pin 12 to output

#pin 11 off/on
wiringpi.digitalWrite(110# sets pin 11 to 0 (0V, off)
sleep(20)                    # wait 20s
wiringpi.digitalWrite(111# sets pin 11 to 1 (3V3, on)
sleep(20)

#pin 12 off/on
wiringpi.digitalWrite(120# sets pin 12 to 0 (0V, off)
sleep(20)                    # wait 20s
wiringpi.digitalWrite(121# sets pin 12 to 1 (3V3, on)
sleep(20)

#clean up
wiringpi.pinMode(11, 0)      # sets P1 pin 11 to input
wiringpi.pinMode(12, 0)      # sets P1 pin 12 to input

Kết quả

Bình thường NC đóng,

  • gởi điện áp thấp ra pin 11/pin 12 sẽ làm NC mở/NO đóng
  • gởi điện áp cao ra pin 11/pin 12 sẽ làm NC đóng/NO mở

Leave a Comment

Filed under Hardware, Software

Leave a Reply