Πίνακας περιεχομένων:

Δημιουργία τάσης με ποδήλατο Ergometer: 9 βήματα (με εικόνες)
Δημιουργία τάσης με ποδήλατο Ergometer: 9 βήματα (με εικόνες)

Βίντεο: Δημιουργία τάσης με ποδήλατο Ergometer: 9 βήματα (με εικόνες)

Βίντεο: Δημιουργία τάσης με ποδήλατο Ergometer: 9 βήματα (με εικόνες)
Βίντεο: Ο πιο απλός τρόπος να ρυθμίσετε τις ταχύτητες του ποδηλάτου 2024, Ιούλιος
Anonim
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου
Δημιουργία Τάσης Με Ποδήλατο Εργομέτρου

Η επεξεργασία του έργου συνίστατο στη συναρμολόγηση ενός "παιχνιδιού" με στόχο να πετάξει σε ένα ποδήλατο εργομέτρου που συνδέεται με μια γεννήτρια και έναν πύργο λαμπτήρων που ενεργοποιούνται καθώς αυξάνεται η ταχύτητα του κινητήρα - που συμβαίνει ανάλογα με το πετάλι του ποδηλάτου. Το σύστημα βασίστηκε στην ανάγνωση-μέσω μιας αναλογικής θύρας ενός Arduino Mega-της στιγμιαίας τάσης που παράγεται, μετά τη μετάδοση αυτών των δεδομένων σε ένα Raspberry Pi 3 μέσω σειριακής επικοινωνίας RX-TX και την επακόλουθη ενεργοποίηση των λαμπτήρων μέσω ρελέ.

Βήμα 1: Υλικά:

  • 1 Raspberry Pi 3;
  • 1 Arduino Mega 2560;
  • 1 ασπίδα ρελέ με 10 ρελέ 12 V
  • 10 λαμπτήρες πυρακτώσεως 127 V
  • 1 Ergometer Bike;
  • 1 Ηλεκτρική Μηχανή (Γεννήτρια) 12 V
  • Αντιστάσεις (1x1kΩ, 2x10kΩ).
  • 1 ηλεκτρολυτικός πυκνωτής 10 μF;
  • 1 δίοδος Zener 5,3 V
  • Καλώδιο 1,5 mm (κόκκινο, μαύρο, καφέ).
  • 1 πύργος MDF με υποστήριξη για 10 λάμπες.

Βήμα 2: Διάγραμμα μπλοκ συστήματος:

Διάγραμμα μπλοκ συστήματος
Διάγραμμα μπλοκ συστήματος

Βήμα 3: Λειτουργία συστήματος:

Το σύστημα βασίζεται στον μετασχηματισμό της κινητικής ενέργειας που παράγεται κατά την ποδηλασία του ποδηλάτου σε ηλεκτρική ενέργεια υπεύθυνη για την ενεργοποίηση των ρελέ που θα ανάψουν τους λαμπτήρες.

Η τάση που παράγεται από τη γεννήτρια διαβάζεται από έναν αναλογικό πείρο του Arduino και αποστέλλεται μέσω RX-TX στο Raspberry Pi. Η ενεργοποίηση των ρελέ είναι ανάλογη με την παραγόμενη τάση - όσο μεγαλύτερη είναι η τάση, τόσο περισσότερα ρελέ θα ενεργοποιηθούν και θα ανάψουν περισσότεροι λαμπτήρες.

Βήμα 4: Μηχανικές πτυχές

Μηχανικές όψεις
Μηχανικές όψεις

Προκειμένου να συνδεθεί μηχανικά η γεννήτρια DC με το ποδήλατο, το σύστημα ζώνης έπρεπε να αντικατασταθεί από το σύστημα που χρησιμοποιείται στα κοινά ποδήλατα (αποτελούμενο από κορώνα, αλυσίδα και πείρο). Μια μεταλλική πλάκα συγκολλήθηκε στο πλαίσιο του ποδηλάτου έτσι ώστε ο κινητήρας να μπορεί να στερεωθεί με βίδες. Μετά από αυτό, το πείρο συγκολλήθηκε στον άξονα της γεννήτριας έτσι ώστε να μπορεί να τοποθετηθεί η αλυσίδα, συνδέοντας το σύστημα πεντάλ στη γεννήτρια.

Βήμα 5: Ανάγνωση τάσης:

Για να διαβάσετε την τάση της γεννήτριας χρησιμοποιώντας το Arduino, είναι απαραίτητο να συνδέσετε τον θετικό πόλο της ηλεκτρικής μηχανής στον ακροδέκτη A0 του ελεγκτή και τον αρνητικό πόλο στο GND - για να αποφύγετε ότι η μέγιστη τάση της γεννήτριας είναι μεγαλύτερη από τα 5 V της Κατασκευάστηκαν και συνδέθηκαν μεταξύ του ελεγκτή και της γεννήτριας καρφίτσες Arduino, ένα φίλτρο τάσης με πυκνωτή 10 μF, αντίσταση 1 kΩ και δίοδο Zener 5,3 V. Το υλικολογισμικό που είναι φορτωμένο στο Arduino είναι πολύ απλό και αποτελείται μόνο από ανάγνωση μιας αναλογικής θύρας, πολλαπλασιάζει την τιμή που διαβάζεται με τη σταθερά 0.0048828125 (5/1024, δηλαδή η τάση GPU του Arduino διαιρούμενη με τον αριθμό των δυαδικών ψηφίων της αναλογικής του θύρας) και την αποστολή μεταβλητή στο Serial - ο κωδικός θα είναι διαθέσιμος στο άρθρο.

Η διαδικασία ενεργοποίησης της επικοινωνίας RX-TX στο Raspberry Pi είναι λίγο πιο περίπλοκη και πρέπει να ακολουθήσετε τη διαδικασία που περιγράφεται στο σύνδεσμο. Εν συντομία, πρέπει να επεξεργαστείτε ένα αρχείο που ονομάζεται "inittab" -βρίσκεται στο "/etc/inittab" -, σχολιάστε τη γραμμή "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (εάν το αρχείο δεν είναι που ιδρύθηκε στο λειτουργικό σύστημα Raspberry, πρέπει να εισαγάγετε την εντολή: "sudo leafpad /boot/config.txt" και να προσθέσετε τη γραμμή "enable_uart = 1" στο τέλος του αρχείου). Μόλις γίνει αυτό, πρέπει να ανοίξετε ξανά το τερματικό LX και να απενεργοποιήσετε το σειριακό με τις εντολές "sudo systemctl stop [email protected]" και "sudo systemctl απενεργοποίηση [email protected]". Στη συνέχεια, πρέπει να εκτελέσετε την εντολή "sudo leafpad /boot/cmdline.txt", να διαγράψετε τη γραμμή "console = serial0, 115200", να αποθηκεύσετε το αρχείο και να επανεκκινήσετε τη συσκευή. Για να είναι δυνατή η επικοινωνία RX-TX, η σειριακή βιβλιοθήκη πρέπει να εγκατασταθεί στο Raspberry Pi με την εντολή "sudo apt-get install -f python-serial" και να εισαγάγει τη βιβλιοθήκη στον κώδικα εισάγοντας τη γραμμή "εισαγωγή σειρών", αρχικοποιώντας το σειριακό με την εισαγωγή της γραμμής "ser = serial. Serial (" / dev / ttyS0 ", 9600)" και την ανάγνωση της τάσης που στέλνει το Arduino χρησιμοποιώντας την εντολή "ser.readline ()" - ο πλήρης κωδικός που χρησιμοποιείται στο Raspberry θα είναι διαθέσιμη στο τέλος του άρθρου.

Ακολουθώντας τη διαδικασία που περιγράφεται παραπάνω, το βήμα ανάγνωσης και αποστολής τάσης έχει ολοκληρωθεί.

Βήμα 6: Προγραμματισμός Arduino:

Όπως αναφέρθηκε προηγουμένως, ο κώδικας που είναι υπεύθυνος για την ανάγνωση της τάσης που δημιουργείται κατά την ποδηλασία είναι πολύ απλός.

Πρώτον, είναι απαραίτητο να επιλέξετε τον ακροδέκτη A0 ως υπεύθυνο για την ανάγνωση της τάσης.

Στη λειτουργία "void setup ()", πρέπει να ορίσετε τον ακροδέκτη A0 σε INPUT με την εντολή "pinMode (sensor, INPUT)" και να επιλέξετε την ταχύτητα μετάδοσης σειριακής θύρας χρησιμοποιώντας την εντολή "Serial.begin (9600)".

Στον "κενό βρόχο ()", η συνάρτηση "Serial.flush ()" χρησιμοποιείται για να καθαρίσει το buffer κάθε φορά που τερματίζει την αποστολή πληροφοριών μέσω σειριακής. η ανάγνωση τάσης πραγματοποιείται με τη συνάρτηση "analogRead (αισθητήρας)" - θυμόμαστε ότι είναι απαραίτητο να μετατρέψουμε την τιμή που διαβάζεται από την αναλογική θύρα σε Volts - διαδικασία που αναφέρεται στην ενότητα "τάση ανάγνωσης" του άρθρου.

Επίσης, στη συνάρτηση "void loop ()", είναι απαραίτητο να μετατρέψετε τη μεταβλητή x από float σε συμβολοσειρά, αφού αυτός είναι ο μόνος τρόπος για να στείλετε τη μεταβλητή μέσω RX-TX. Το τελευταίο βήμα στη λειτουργία βρόχου είναι η εκτύπωση της συμβολοσειράς στη σειριακή θύρα, ώστε να μπορεί να σταλεί στο Raspberry - για αυτό πρέπει να χρησιμοποιήσετε τη συνάρτηση "Serial.println (y)". Η γραμμή "καθυστέρηση (100)" έχει προστεθεί στον κώδικα μόνο έτσι ώστε η μεταβλητή να αποστέλλεται σε διαστήματα 100 ms - αν δεν τηρηθεί αυτός ο χρόνος, θα προκύψει η Σειριακή υπερφόρτωση, δημιουργώντας πιθανά σφάλματα στο πρόγραμμα.

tension_read.ino

αισθητήρας πλωτήρα = A0;
voidsetup () {
pinMode (αισθητήρας, ΕΙΣΟΔΟΣ);
Serial.begin (9600);
}
voidloop () {
Serial.flush ();
float x = analogRead (αισθητήρας)*0.0048828125*16.67;
Χορδή y = "";
y+= x;
Serial.println (y);
καθυστέρηση (100)?
}

προβολή rawvoltage_read.ino που φιλοξενείται με ❤ από το GitHub

Βήμα 7: Προγραμματισμός Raspberry Pi 3:

lamp_bike.py

εισαγωγή os #εισαγωγή της βιβλιοθήκης os (χρησιμοποιείται για την εκκαθάριση της οθόνης όταν είναι απαραίτητο)
εισαγωγή RPi. GPIOas gpio #import Library που χρησιμοποιείται για τον έλεγχο του GPIO του Raspnerry
εισαγωγή σειριακής #εισαγωγής βιβλιοθήκης υπεύθυνης για τη σειριακή επικοινωνία
εισαγωγή χρόνου βιβλιοθήκης #εισαγωγής που καθιστά δυνατή τη χρήση της λειτουργίας καθυστέρησης
import subprocess #import Library υπεύθυνη για την αναπαραγωγή των τραγουδιών
σίριαλ #start
ser = serial. Serial ("/dev/ttyS0", 9600) #καθορίστε το όνομα της συσκευής και τον ρυθμό baud
#καθαρή οθόνη
clear = lambda: os.system ('clear')
#καθορίστε καρφίτσες για έλεγχο ρελέ
gpio.setmode (gpio. BOARD)
gpio.setup (11, gpio. OUT) #λαμπτήρας 10
gpio.setup (12, gpio. OUT) #λαμπτήρας 9
gpio.setup (13, gpio. OUT) #λαμπτήρας 8
gpio.setup (15, gpio. OUT) #λαμπτήρας 7
gpio.setup (16, gpio. OUT) #λαμπτήρας 6
gpio.setup (18, gpio. OUT) #λαμπτήρας 5
gpio.setup (19, gpio. OUT) #λαμπτήρας 4
gpio.setup (21, gpio. OUT) #λαμπτήρας 3
gpio.setup (22, gpio. OUT) #λαμπτήρας 2
gpio.setup (23, gpio. OUT) #λαμπτήρας 1
#ξεκινήστε τις εγγραφές
όνομα = ["Κανένα"]*10
τάση = [0,00]*10
#διαβάστε το αρχείο εγγραφών
f = άνοιγμα ("εγγραφές", "r")
for i inrange (10): #οι 10 καλύτερες βαθμολογίες εμφανίζονται στη λίστα
όνομα = f.readline ()
όνομα = όνομα [: len (όνομα )-1]
τάση = f.διαβάθμιση ()
τάση = float (τάση [: len (τάση )-1])
στ. κλείσιμο ()
Σαφή()
#ρυθμίστε τη μέγιστη τάση
μέγ. = 50,00
#σβήστε τις λάμπες
για i inrange (11, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. HIGH) #set to HIGH, τα ρελέ είναι απενεργοποιημένα
#αρχή
ενώ Αλήθεια:
#αρχική οθόνη
εκτύπωση "Εγγραφές: / n"
για i inrange (10):
όνομα εκτύπωσης , ":", τάση , "V"
current_name = raw_input ("Γράψτε το όνομά σας για να ξεκινήσετε:")
Σαφή()
#Αλλαγή μέγιστης τιμής
εάν current_name == "max":
max = είσοδος ("Γράψτε τη μέγιστη τάση: (2 δεκαδικά ψηφία)")
Σαφή()
αλλού:
#προειδοποίηση έναρξης
για i inrange (11, 24, 1): #ο βρόχος ξεκινά στο PIN 11 και σταματά στο PIN 24
αν i! = 14και i! = 17και i! = 20: #PIN 14 και 20 είναι ακίδες GND και 20 είναι καρφίτσα 3,3 V
gpio.output (i, gpio. LOW) #ανάψτε τις λάμπες
ώρα. ύπνος (0,5)
k = 10
για i inrange (23, 10, -1):
Σαφή()
αν i! = 14και i! = 17και i! = 20:
subprocess. Popen (['aplay', 'Audios/'+str (k)+'. wav'])
ώρα. ύπνος (0,03)
Σαφή()
εκτύπωση "Προετοιμασία! / n", κ
ώρα. ύπνος (1)
k- = 1
gpio.output (i, gpio. HIGH) #σβήστε τις λάμπες (μία προς μία)
subprocess. Popen (['aplay', 'Audios/go.wav']) #παίζει τη μουσική έναρξης
ώρα. ύπνος (0,03)
Σαφή()
εκτύπωση "GO!"
ώρα. ύπνος (1)
Σαφή()
#τάση διαβάστηκε
τρέχουσα_ τάση = 0,00
τάση1 = 0,00
για i inrange (200):
ser.flushInput ()
προηγούμενο = τάση1
tension1 = float (ser.readline ()) #συλλέγει τα δεδομένα του Arduino που μεταφέρονται από το RX-TX
Σαφή()
τάση εκτύπωσης 1, "V"
εάν τάση1> τρέχουσα_ τάση:
current_voltage = τάση1
# ανάλογα με την παραγόμενη τάση, ανάβουν περισσότεροι λαμπτήρες.
εάν τάση1 <max/10:
για i inrange (11, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = max/10:
gpio.output (11, gpio. LOW)
για i inrange (12, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 2*max/10:
για i inrange (11, 13, 1):
gpio.output (i, gpio. LOW)
για i inrange (13, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 3*max/10:
για i inrange (11, 14, 1):
gpio.output (i, gpio. LOW)
για i inrange (15, 24, 1):
αν i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 4*max/10:
για i inrange (11, 16, 1):
αν i! = 14:
gpio.output (i, gpio. LOW)
για i inrange (16, 24, 1):
αν i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 5*max/10:
για i inrange (11, 17, 1):
αν i! = 14:
gpio.output (i, gpio. LOW)
για i inrange (18, 24, 1):
αν είμαι! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 6*max/10:
για i inrange (11, 19, 1):
αν i! = 14και i! = 17:
gpio.output (i, gpio. LOW)
για i inrange (19, 24, 1):
αν είμαι! = 20:
gpio.output (i, gpio. HIGH)
εάν τάση1> = 7*max/10:
για i inrange (11, 20, 1):
αν i! = 14και i! = 17:
gpio.output (i, gpio. LOW)
για i inrange (21, 24, 1):
gpio.output (i, gpio. HIGH)
εάν τάση1> = 8*max/10:
για i inrange (11, 22, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. LOW)
για i inrange (22, 24, 1):
gpio.output (i, gpio. HIGH)
εάν τάση1> = 9*max/10:
για i inrange (11, 23, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. LOW)
gpio.output (23, gpio. HIGHT)
εάν τάση1> = μέγ.
για i inrange (11, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. LOW)

εάν τάση 1

Διακοπή
#σβήστε τις λάμπες
για i inrange (11, 24, 1):
αν i! = 14και i! = 17και i! = 20:
gpio.output (i, gpio. HIGH)
#νικητική μουσική
εάν current_voltage> = max:
subprocess. Popen (['aplay', 'Audios/rocky.wav'])
ώρα. ύπνος (0,03)
Σαφή()
εκτύπωση "ΠΟΛΥ ΚΑΛΟ, ΝΙΚΗΣΑΤΕ!"% (u '\u00c9', u '\u00ca', u '\u00c2')
για i inrange (10):
για j inrange (11, 24, 1):
αν j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. LOW)
ώρα. ύπνος (0,05)
για j inrange (11, 24, 1):
αν j! = 14and j! = 17and j! = 20:
gpio.output (j, gpio. HIGH)
ώρα. ύπνος (0,05)
ώρα. ύπνος (0,5)
subprocess. Popen (['aplay', 'Audios/end.wav'])
ώρα. ύπνος (0,03)
Σαφή()
εκτύπωση "Τέλος παιχνιδιού … / n", τρέχουσα_τάση, "V"
#εγγραφές
ώρα. ύπνος (1.2)
έφτασε = 0
για i inrange (10):
εάν current_voltage> τάση :
έφτασε+= 1
temp_voltage = τάση
τάση = τρέχουσα_ τάση
current_voltage = temp_voltage
temp_name = όνομα
όνομα = τρέχον_όνομα
current_name = temp_name
αν φτάσει> 0:
subprocess. Popen (['aplay', 'Audios/record.wav'])
ώρα. ύπνος (0,03)
Σαφή()
f = άνοιγμα ("εγγραφές", "w")
για i inrange (10):
f.write (όνομα )
f.write ("\ n")
f.write (str (τάση ))
f.write ("\ n")
στ. κλείσιμο ()
Σαφή()

προβολή rawlamps_bike.py που φιλοξενείται με ❤ από το GitHub

Βήμα 8: Ηλεκτρικό σχήμα:

Ηλεκτρικό σχήμα
Ηλεκτρικό σχήμα
Ηλεκτρικό σχήμα
Ηλεκτρικό σχήμα
Ηλεκτρικό σχήμα
Ηλεκτρικό σχήμα

Το Arduino και το Raspberry Pi 3 τροφοδοτούνται από μια πηγή 5V με ρεύμα 3Α.

Το ηλεκτρικό κύκλωμα ξεκινά με τη σύνδεση της γεννήτριας DC (συζευγμένη με το ποδήλατο) με το Arduino μέσω φίλτρου τάσης που αποτελείται από δίοδο Zener 5,3V, πυκνωτή 10μF και αντίσταση 1kΩ - η είσοδος φίλτρου συνδέεται με το ακροδέκτες γεννήτριας και η έξοδος συνδέεται στη θύρα A0 και στο GND του ελεγκτή.

Το Arduino συνδέεται με το Raspberry μέσω επικοινωνίας RX-TX-πραγματοποιείται μέσω διαχωριστικού αντίστασης χρησιμοποιώντας αντιστάσεις 10kΩ (απαιτούνται από τις θύρες των ελεγκτών που λειτουργούν σε διαφορετικές τάσεις).

Τα GPIO του Raspberry Pi συνδέονται με τα ρελέ που είναι υπεύθυνα για την ενεργοποίηση των λαμπτήρων. Το "COM" όλων των ρελέ ήταν διασυνδεδεμένο και συνδεδεμένο με τη φάση (δίκτυο AC) και το "N. O" (κανονικά ανοιχτό) κάθε ρελέ συνδεδεμένο με κάθε λαμπτήρα και το ουδέτερο του δικτύου εναλλασσόμενου ρεύματος διασυνδέθηκε με όλους τους λαμπτήρες. Έτσι, όταν ενεργοποιηθεί το GPIO που είναι υπεύθυνο για κάθε ρελέ, το ρελέ μεταβαίνει στη φάση του δικτύου AC και ανάβει την αντίστοιχη λάμπα.

Βήμα 9: Αποτελέσματα:

Image
Image

Μετά την τελική συναρμολόγηση του έργου, επαληθεύτηκε ότι λειτούργησε όπως αναμενόταν - σύμφωνα με την ταχύτητα που ο χρήστης κάνει πεντάλ στο ποδήλατο, παράγεται περισσότερη τάση και ανάβουν περισσότεροι λαμπτήρες.

Συνιστάται: