Mục lục:

Tạo điện áp với xe đạp đo điện: 9 bước (có hình ảnh)
Tạo điện áp với xe đạp đo điện: 9 bước (có hình ảnh)

Video: Tạo điện áp với xe đạp đo điện: 9 bước (có hình ảnh)

Video: Tạo điện áp với xe đạp đo điện: 9 bước (có hình ảnh)
Video: Bị ô tô tông nguy kịch vì chạy xe đạp lạng lách, đánh võng giữa ngã tư 2024, Tháng bảy
Anonim
Tạo ra điện áp với một chiếc xe đạp Ergometer
Tạo ra điện áp với một chiếc xe đạp Ergometer
Tạo ra điện áp bằng xe đạp đo điện tử
Tạo ra điện áp bằng xe đạp đo điện tử
Tạo ra điện áp với một chiếc xe đạp Ergometer
Tạo ra điện áp với một chiếc xe đạp Ergometer

Dự án xây dựng công phu bao gồm việc lắp ráp một “trò chơi” với mục tiêu là đạp trong một chiếc xe đạp có công suất kế được kết nối với máy phát điện và một tháp đèn được kích hoạt khi tốc độ động cơ tăng lên - điều này xảy ra đối với hoạt động đạp của xe đạp. Hệ thống dựa trên việc đọc - thông qua một cổng tương tự của Arduino Mega - điện áp tức thời được tạo ra, sau đó truyền dữ liệu này đến Raspberry Pi 3 thông qua giao tiếp RX-TX nối tiếp và kích hoạt đèn sau đó thông qua rơ le.

Bước 1: Vật liệu:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 1 Tấm chắn Rơle với 10 Rơle 12 V;
  • 10 Đèn sợi đốt 127 V;
  • 1 Xe đạp Ergometer;
  • 1 Máy điện (Máy phát điện) 12 V;
  • Điện trở (1x1kΩ, 2x10kΩ);
  • 1 Tụ điện 10 µF;
  • 1 Diode Zener 5.3 V;
  • Cáp 1,5 mm (đỏ, đen, nâu);
  • 1 tháp MDF hỗ trợ 10 đèn.

Bước 2: Sơ đồ khối hệ thống:

Sơ đồ khối hệ thống
Sơ đồ khối hệ thống

Bước 3: Vận hành hệ thống:

Hệ thống này dựa trên sự biến đổi của động năng sinh ra khi đạp xe thành năng lượng điện chịu trách nhiệm kích hoạt các rơ le làm bật đèn.

Điện áp do máy phát tạo ra được đọc bởi một chân tương tự của Arduino và được gửi qua RX-TX đến Raspberry Pi. Sự kích hoạt của rơle tỷ lệ thuận với điện áp được tạo ra - điện áp càng cao, càng nhiều rơle sẽ được kích hoạt và nhiều đèn sẽ sáng hơn.

Bước 4: Các khía cạnh cơ học

Các khía cạnh cơ học
Các khía cạnh cơ học

Để ghép nối máy phát điện một chiều với xe đạp một cách cơ học, hệ thống dây đai phải được thay thế bằng hệ thống được sử dụng trên xe đạp thông thường (bao gồm núm vặn, xích và bánh răng). Một tấm kim loại được hàn vào khung xe đạp để động cơ có thể được giữ chặt bằng vít. Sau đó, bánh răng được hàn vào trục máy phát điện để có thể đặt dây xích, liên kết hệ thống bàn đạp với máy phát điện.

Bước 5: Đọc điện áp:

Để đọc điện áp của máy phát điện bằng Arduino, cần kết nối cực dương của máy điện với chân A0 của bộ điều khiển và cực âm với GND - để tránh điện áp tối đa của máy phát điện lớn hơn 5 V của Các chân Arduino, bộ lọc điện áp sử dụng tụ điện 10 µF, điện trở 1 kΩ và diode Zener 5,3 V được chế tạo và kết nối giữa bộ điều khiển và máy phát điện. Phần mềm được tải trong Arduino rất đơn giản và chỉ bao gồm việc đọc một cổng tương tự, nhân giá trị đọc được với hằng số 0,0048828125 (5/1024, đó là điện áp GPIO của Arduino chia cho số bit của cổng tương tự của nó) và gửi biến thành Serial - mã sẽ có sẵn trong bài viết.

Quy trình bật giao tiếp RX-TX trong Raspberry Pi phức tạp hơn một chút và bạn phải làm theo quy trình được mô tả trong liên kết. Tóm lại, bạn cần chỉnh sửa một tệp có tên “inittab” - nằm trong “/ etc / inittab” -, ghi chú dòng “T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100” (nếu tệp không được thành lập trong Hệ điều hành của Raspberry, bạn phải nhập lệnh: “sudo leafpad /boot/config.txt” và thêm dòng “enable_uart = 1” vào cuối tệp). Sau khi thực hiện xong, bạn phải mở lại LX Terminal và vô hiệu hóa Serial bằng các lệnh "sudo systemctl stop [email protected]" và "sudo systemctl disable [email protected]". Sau đó bạn phải thực hiện lệnh "sudo leafpad /boot/cmdline.txt", xóa dòng "console = serial0, 115200", lưu tệp và khởi động lại thiết bị. Để có thể giao tiếp RX-TX, thư viện Serial phải được cài đặt trên Raspberry Pi bằng lệnh "sudo apt-get install -f python-serial" và nhập thư viện vào mã bằng cách chèn dòng "nhập nối tiếp", khởi tạo nối tiếp bằng cách chèn dòng "ser = serial. Serial (" / dev / ttyS0 ", 9600)" và đọc điện áp được gửi bởi Arduino bằng cách sử dụng lệnh "ser.readline ()" - mã đầy đủ được sử dụng trong Raspberry sẽ có ở cuối bài viết.

Làm theo quy trình được mô tả ở trên, bước đọc và gửi điện áp đã hoàn tất.

Bước 6: Lập trình Arduino:

Như đã nói trước đây, mã chịu trách nhiệm đọc điện áp được tạo ra khi đạp xe rất đơn giản.

Đầu tiên, cần chọn chân A0 làm chân cắm chịu trách nhiệm đọc điện áp.

Trong hàm "void setup ()", bạn cần đặt chân A0 thành INPUT bằng lệnh "pinMode (sensor, INPUT)" và chọn tốc độ truyền cổng nối tiếp bằng lệnh "Serial.begin (9600)".

Trong "void loop ()", hàm "Serial.flush ()" được sử dụng để xóa bộ đệm mỗi khi nó kết thúc gửi thông tin qua nối tiếp; việc đọc điện áp được thực hiện bởi chức năng "analogRead (cảm biến)" - hãy nhớ rằng cần phải chuyển đổi giá trị được đọc bởi cổng analog thành Volts - quá trình được trích dẫn trong phần "đọc điện áp" của bài báo.

Ngoài ra, trong hàm "void loop ()", cần chuyển biến x từ float thành string, vì đây là cách duy nhất để gửi biến qua RX-TX. Bước cuối cùng trong hàm vòng lặp là in chuỗi trong cổng nối tiếp để nó có thể được gửi đến Raspberry - đối với điều này, bạn phải sử dụng hàm "Serial.println (y)". Dòng "delay (100)" chỉ được thêm vào mã để biến được gửi trong khoảng thời gian 100 ms - nếu thời gian này không được tuân thủ, quá tải nối tiếp sẽ xảy ra, tạo ra sự cố có thể xảy ra trong chương trình.

tage_read.ino

cảm biến phao = A0;
voidsetup () {
pinMode (cảm biến, NGÕ VÀO);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (cảm biến) * 0,0048828125 * 16,67;
Chuỗi y = "";
y + = x;
Serial.println (y);
chậm trễ (100);
}

xem rawvoltage_read.ino được lưu trữ với ❤ bởi GitHub

Bước 7: Lập trình Raspberry Pi 3:

lights_bike.py

nhập hệ điều hành # nhập thư viện hệ điều hành (được sử dụng để xóa màn hình khi cần thiết)
nhập thư viện RPi. GPIOas gpio #import được sử dụng để điều khiển GPIO của Raspnerry
nhập thư viện nối tiếp #import chịu trách nhiệm về giao tiếp nối tiếp
thư viện thời gian nhập #import để có thể sử dụng hàm trì hoãn
import subprocess #import library chịu trách nhiệm phát các bài hát
#start serial
ser = serial. Serial ("/ dev / ttyS0", 9600) # xác định tên thiết bị và tốc độ truyền
#clear screen
clear = lambda: os.system ('clear')
# bộ chân để điều khiển rơ le
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #lamp 10
gpio.setup (12, gpio. OUT) #lamp 9
gpio.setup (13, gpio. OUT) #lamp 8
gpio.setup (15, gpio. OUT) #lamp 7
gpio.setup (16, gpio. OUT) #lamp 6
gpio.setup (18, gpio. OUT) #lamp 5
gpio.setup (19, gpio. OUT) #lamp 4
gpio.setup (21, gpio. OUT) #lamp 3
gpio.setup (22, gpio. OUT) #lamp 2
gpio.setup (23, gpio. OUT) #lamp 1
#start record
name = ["Không có"] * 10
điện áp = [0,00] * 10
#read tệp bản ghi
f = open ('bản ghi', 'r')
for i inrange (10): # 10 điểm tốt nhất xuất hiện trong danh sách
name = f.readline ()
name = name [: len (name ) - 1]
điện áp = f.readline ()
điện áp = float (điện áp [: len (điện áp ) - 1])
f.close ()
sạch()
# đặt điện áp tối đa
tối đa = 50,00
# tắt đèn
cho tôi inrange (11, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH) # đặt thành CAO, các rơ le bị tắt
#bắt đầu
whileTrue:
#Màn hình lúc đầu
in "Bản ghi: / n"
cho tôi inrange (10):
tên in , ":", điện áp , "V"
current_name = raw_input ("Viết tên của bạn để bắt đầu:")
sạch()
# Thay đổi giá trị tối đa
nếu current_name == "max":
max = input ("Viết điện áp tối đa: (2 chữ số thập phân)")
sạch()
khác:
#start cảnh báo
for i inrange (11, 24, 1): # vòng lặp bắt đầu ở mã PIN 11 và dừng ở mã PIN 24
nếu i! = 14 và i! = 17 và i! = 20: #PIN 14 và 20 là chân GND và 20 là chân 3,3 V
gpio.output (i, gpio. LOW) # bật đèn
time.sleep (0,5)
k = 10
cho tôi inrange (23, 10, -1):
sạch()
nếu i! = 14 và i! = 17 và i! = 20:
subprocess. Popen (['aplay', 'Audios /' + str (k) + '. wav'])
time.sleep (0,03)
sạch()
in "Chuẩn bị! / n", k
time.sleep (1)
k- = 1
gpio.output (i, gpio. HIGH) # tắt đèn (từng cái một)
subprocess. Popen (['aplay', 'Audios / go.wav']) # phát nhạc bắt đầu
time.sleep (0,03)
sạch()
in "ĐI!"
time.sleep (1)
sạch()
# điện áp đã đọc
current_voltage = 0,00
điện áp1 = 0,00
cho tôi inrange (200):
ser.flushInput ()
trước = điện áp1
tage1 = float (ser.readline ()) #collects Dữ liệu của Arduino được truyền bởi RX-TX
sạch()
in điện áp1, "V"
nếutage1> current_voltage:
current_voltage = điện áp1
# tùy thuộc vào điện áp được tạo ra, nhiều đèn sáng hơn.
nếu điện áp1 <max / 10:
cho tôi inrange (11, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = max / 10:
gpio.output (11, gpio. LOW)
cho tôi inrange (12, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 2 * max / 10:
cho tôi inrange (11, 13, 1):
gpio.output (i, gpio. LOW)
cho tôi inrange (13, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 3 * max / 10:
cho tôi inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
cho tôi inrange (15, 24, 1):
nếu i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 4 * max / 10:
cho tôi inrange (11, 16, 1):
nếu tôi! = 14:
gpio.output (i, gpio. LOW)
cho tôi inrange (16, 24, 1):
nếu i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 5 * max / 10:
cho tôi inrange (11, 17, 1):
nếu tôi! = 14:
gpio.output (i, gpio. LOW)
cho tôi inrange (18, 24, 1):
nếu tôi! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 6 * max / 10:
cho tôi inrange (11, 19, 1):
nếu i! = 14 và i! = 17:
gpio.output (i, gpio. LOW)
cho tôi inrange (19, 24, 1):
nếu tôi! = 20:
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 7 * max / 10:
cho tôi inrange (11, 20, 1):
nếu i! = 14 và i! = 17:
gpio.output (i, gpio. LOW)
cho tôi inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 8 * max / 10:
cho tôi inrange (11, 22, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. LOW)
cho tôi inrange (22, 24, 1):
gpio.output (i, gpio. HIGH)
nếu điện áp1> = 9 * max / 10:
cho tôi inrange (11, 23, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGH)
nếu điện áp1> = max:
cho tôi inrange (11, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. LOW)
nếu điện áp1
nghỉ
# tắt đèn
cho tôi inrange (11, 24, 1):
nếu i! = 14 và i! = 17 và i! = 20:
gpio.output (i, gpio. HIGH)
# nhạc chế
nếu current_voltage> = max:
subprocess. Popen (['aplay', 'Audios / Rock.wav'])
time.sleep (0,03)
sạch()
in "RẤT TỐT, BẠN WON!"% (u '\u00c9', u '\u00ca', u '\u00c2')
cho tôi inrange (10):
cho j inrange (11, 24, 1):
nếu j! = 14 và j! = 17 và j! = 20:
gpio.output (j, gpio. LOW)
time.sleep (0,05)
cho j inrange (11, 24, 1):
nếu j! = 14 và j! = 17 và j! = 20:
gpio.output (j, gpio. HIGH)
time.sleep (0,05)
time.sleep (0,5)
subprocess. Popen (['aplay', 'Audios / end.wav'])
time.sleep (0,03)
sạch()
in "Kết thúc trò chơi… / n", current_voltage, "V"
#Hồ sơ
time.sleep (1.2)
đạt = 0
cho tôi inrange (10):
nếu current_voltage> áp :
đạt + = 1
temp_voltage = điện áp
áp = current_voltage
current_voltage = temp_voltage
temp_name = name
name = current_name
current_name = temp_name
nếu đạt> 0:
subprocess. Popen (['aplay', 'Audios / record.wav'])
time.sleep (0,03)
sạch()
f = open ('bản ghi', 'w')
cho tôi inrange (10):
f.write (tên )
f.write ("\ n")
f.write (str (điện áp ))
f.write ("\ n")
f.close ()
sạch()

xem rawlamps_bike.py được lưu trữ với ❤ bởi GitHub

Bước 8: Sơ đồ điện:

Sơ đồ điện
Sơ đồ điện
Sơ đồ điện
Sơ đồ điện
Sơ đồ điện
Sơ đồ điện

Arduino và Raspberry Pi 3 được cung cấp bởi nguồn 5V với dòng điện 3A.

Mạch điện bắt đầu với kết nối của máy phát điện một chiều (được kết nối với xe đạp) với Arduino thông qua bộ lọc điện áp bao gồm một diode Zener 5,3V, tụ điện 10μF và điện trở 1kΩ - đầu vào bộ lọc được kết nối với đầu cuối của máy phát và đầu ra được kết nối với cổng A0 và GND của bộ điều khiển.

Arduino được kết nối với Raspberry thông qua giao tiếp RX-TX - được thực hiện thông qua bộ chia điện trở sử dụng điện trở 10kΩ (được yêu cầu bởi các cổng của bộ điều khiển hoạt động ở các điện áp khác nhau).

Các GPIO của Raspberry Pi được kết nối với các rơ le chịu trách nhiệm bật đèn. “COM” của tất cả các rơ le được kết nối với nhau và kết nối với pha (lưới điện xoay chiều) và “N. O” (thường mở) của mỗi rơ le được kết nối với mỗi đèn và trung tính của lưới điện xoay chiều được kết nối với tất cả các bóng đèn. Do đó, khi GPIO chịu trách nhiệm cho mỗi rơle được kích hoạt, rơle được chuyển sang pha của mạng AC và bật đèn tương ứng.

Bước 9: Kết quả:

Image
Image

Sau quá trình lắp ráp cuối cùng của dự án, người ta đã xác minh rằng nó hoạt động như mong đợi - theo tốc độ mà người dùng đạp trên xe đạp, nhiều điện áp hơn được tạo ra và nhiều đèn sáng hơn.

Đề xuất: