Mục lục:
- Bước 1: Vật liệu:
- Bước 2: Sơ đồ khối hệ thống:
- Bước 3: Vận hành hệ thống:
- Bước 4: Các khía cạnh cơ học
- Bước 5: Đọc điện áp:
- Bước 6: Lập trình Arduino:
- Bước 7: Lập trình Raspberry Pi 3:
- Bước 8: Sơ đồ điện:
- Bước 9: Kết quả:
Video: Tạo điện áp với xe đạp đo điện: 9 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
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:
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
Để 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:
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ả:
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:
Cách tôi chế tạo máy phát điện cho xe đạp điện: 10 bước
Cách tôi chế tạo máy phát điện cho xe đạp điện: Paul Fleck
Tạo âm thanh điện tử với thạch cao dẫn điện: 9 bước (có hình ảnh)
Tạo âm thanh điện tử bằng thạch cao dẫn điện: Sau dự án của blorgggg về mạch silicone dẫn điện, tôi quyết định mạo hiểm thử nghiệm của riêng mình với sợi carbon. Hóa ra, một hình dạng đúc từ thạch cao tẩm sợi carbon cũng có thể được sử dụng như một biến trở! Với một vài thanh đồng và
Hệ thống theo dõi xe đạp với cảnh báo người chết với Sigfox: 7 bước (có hình ảnh)
Hệ thống theo dõi xe đạp với cảnh báo người chết với Sigfox: Hệ thống an ninh cho người đi xe đạp với các tính năng theo dõi và gửi cảnh báo. Trong trường hợp xảy ra tai nạn, một cảnh báo sẽ được gửi kèm theo vị trí GPS. Đảm bảo an toàn cho người đi xe đạp là điều bắt buộc, khi xảy ra tai nạn xe đạp đường bộ hoặc xe đạp leo núi và cấp cứu càng sớm càng tốt cho mỗi
PixelOrgan: Dải đèn LED DotStar đáp ứng âm thanh (với MicroView): 3 bước (với Hình ảnh)
PixelOrgan: Dải đèn LED DotStar đáp ứng âm thanh (với MicroView): Đây là một bộ phận cơ quan ánh sáng trong đó đầu vào của micrô tích hợp được hiển thị trên dải LED DotStar 72 để đèn LED trên cùng biểu thị mức cao / trung bình / thấp hiện tại là R / G / B và phần còn lại của các đèn LED đại diện cho các giá trị trước đó (để chúng tôi nhận được
Tạo hình ảnh liền mạch theo chiều ngang hoặc chiều dọc (đối với "GIMP").: 11 bước (với hình ảnh)
Tạo hình ảnh liền mạch theo chiều ngang hoặc chỉ theo chiều dọc (đối với "GIMP"): Nếu bạn dùng thử plugin "Tạo liền mạch" trong GIMP, nó sẽ giúp hình ảnh liền mạch theo cả chiều ngang và chiều dọc cùng một lúc. Nó sẽ không cho phép bạn làm cho nó liền mạch chỉ trong một chiều. Hướng dẫn này sẽ giúp bạn làm cho