Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Κωδικοποίηση ως επίλυση προβλημάτων
- Βήμα 2: Κωδικοποίηση: Λήψη δεδομένων καιρού
- Βήμα 3: Κωδικοποίηση: Χρήση αυτών των δεδομένων
- Βήμα 4: Κωδικοποίηση: Χρήση διόδων RPi.GPIO και LED
- Βήμα 5: Κωδικοποίηση: Λήψη φωτεινότητας LED
- Βήμα 6: Κωδικοποίηση: Τελικά βήματα
- Βήμα 7: Χτίσιμο και καλωδίωση
- Βήμα 8: Επίδειξη και συμπέρασμα
Βίντεο: Μετεωρολογικός σταθμός Raspberry PI LED: 8 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Δημιουργήσαμε ένα Raspberry PI Weather LED Station. Λέει στο χρήστη πόσο ζεστή και κρύα είναι μια πόλη φωτίζοντας και μειώνοντας τα led. Έχει επίσης ένα οδηγό να τους πει αν βρέχει ή όχι στην πόλη που πληκτρολόγησαν.
Δημιουργήθηκε από τους Michael Andrews και Tio Marello.
Προμήθειες
Εργαλεία
- Συγκολλητικό σίδερο
- Ντρέμελ
- Είδε
Υλικά
- Raspberry Pi 3 B+ 40 δολάρια ~ 30 δολάρια
- Σύρματα από Jumper to Male Jumper 7 ~
- 3 μπλε και 2 κόκκινες δίοδοι LED 11 δολάρια
- Αντίσταση 100 Ohm 13 δολάρια
- 4 x 4 x 1/4 Ξύλινη σανίδα ~ 5 δολάρια
- Συγκολλητής 10 δολάρια
- Χάλκινο σύρμα 5 δολάρια
Βήμα 1: Κωδικοποίηση ως επίλυση προβλημάτων
Η κωδικοποίηση είναι λύση προβλημάτων
Λοιπόν, στο πρόγραμμά μας, ποιο είναι το πρόβλημά μας; Το πρόβλημά μας είναι να λάβουμε δεδομένα καιρού και στη συνέχεια να χρησιμοποιήσουμε αυτά τα δεδομένα για να ενημερώσουμε τα LEDS μας εάν είναι σβηστά ή αναμμένα. Αυτό λοιπόν χωρίζει το πρόβλημά μας σε τρεις τομείς.
1. Λήψη δεδομένων καιρού
2. Χρήση αυτών των δεδομένων
3. Χρήση LEDS
Ωστόσο, η γλώσσα που χρησιμοποιήσαμε για αυτό το έργο, η Python και το υλικό με το οποίο λειτουργεί, η Python, μας δίνουν έναν εύκολο τρόπο για την επίτευξη αυτών των στόχων.
Έτσι, ας ξεκινήσουμε με το πρώτο πρόβλημα, τη λήψη δεδομένων καιρού.
Βήμα 2: Κωδικοποίηση: Λήψη δεδομένων καιρού
Η Python από μόνη της δεν μπορεί να λάβει δεδομένα καιρού. Πρέπει να εισαγάγουμε δύο εργαλεία, καθώς και μια εξωτερική υπηρεσία, για να λάβουμε δεδομένα καιρού. Για να γίνει αυτό, χρησιμοποιούμε τρία εργαλεία.
1. Αιτήματα, μια ενότητα python που επιτρέπει την περιήγηση σε ιστό
2. Json, μια ενότητα python που μας επιτρέπει να χρησιμοποιούμε τη μορφή αρχείου JSON
3. OpenWeather, ένας ιστότοπος που μπορεί να μας δώσει δεδομένα καιρού
Έτσι, φέρνουμε τις δύο ενότητες γράφοντας αυτόν τον κώδικα στην κορυφή του σεναρίου python μας.
αιτήματα εισαγωγής
εισαγωγή json
Ωστόσο, πριν χρησιμοποιήσουμε αυτά τα εργαλεία, πρέπει να χρησιμοποιήσουμε το Openweather. Για αυτό, πρέπει να δημιουργήσουμε έναν λογαριασμό στον ιστότοπό τους και να λάβουμε ένα κλειδί API. Ακολουθήστε τις οδηγίες στον ιστότοπό τους και θα λάβετε μια σειρά από γράμματα και αριθμούς που θα μας επιτρέψουν να χρησιμοποιήσουμε την υπηρεσία τους. Πως?
openweather_api_key = "260a23f27f5324ef2ae763c779c32d7e" #Το κλειδί μας API (Δεν είναι πραγματικό)
base_call = "https://api.openweathermap.org/data/2.5/weather?q=" #OpenWeather Call #Εδώ λαμβάνουμε την πόλη του χρήστη με τη μορφή εκτύπωσης κειμένου ("Πληκτρολογήστε μια πόλη!") city_name = input () #Εδώ συγκεντρώσαμε τη διεύθυνση που θα συνδέσουμε στα request.get για να λάβουμε δεδομένα καιρού full_call = base_call+city_name+"& appid ="+openweather_api_key #Τέλος καλούμε το request.get με τη διεύθυνσή μας και στη συνέχεια τη μετατρέπουμε σε αρχείο json Response = Requires.get (full_call) WeatherData = Response.json () Τα αρχεία #JSON περιέχουν διαφορετικές μεταβλητές στις οποίες μπορούμε να έχουμε πρόσβαση χρησιμοποιώντας αυτήν τη σύνταξη ["weather"] [0] ["id"] City_TemperatureK = WeatherData ["main"] ["temp"]
Εδώ έχουμε τον κωδικό που μας δίνει τα δεδομένα καιρού. Τα αιτήματα, με τη μορφή request.get, λαμβάνουν μια διεύθυνση ιστότοπου και μας επιστρέφουν ένα αρχείο από αυτόν τον ιστότοπο. Το OpenWeather μας δίνει μια διεύθυνση για να καλέσουμε για να μας δώσει δεδομένα καιρού με τη μορφή json. Συγκεντρώνουμε μια διεύθυνση την οποία συνδέουμε στα αιτήματα και επιστρέφουμε ένα αρχείο json. Στη συνέχεια, δημιουργούμε δύο μεταβλητές και τις αντιστοιχίζουμε στη θερμοκρασία και τις καιρικές συνθήκες της πόλης του χρήστη.
Έτσι, τώρα, με αυτόν τον κωδικό, έχουμε δύο μεταβλητές. Έχουμε ένα weatherID και μια θερμοκρασία στο Kelvin
Βήμα 3: Κωδικοποίηση: Χρήση αυτών των δεδομένων
Τώρα που έχουμε αυτές τις δύο μεταβλητές, πρέπει να τις προετοιμάσουμε για χρήση για τα LEDS μας. Για αυτήν την πτυχή, δεν χρειάζεται να εισαγάγουμε ενότητες για αυτό.
Αρχικά, μετατρέπουμε το kelvin σε Fahrenheit.
Το κάνουμε αυτό δημιουργώντας μια μεταβλητή με αυτήν τη σύνταξη
City_TemperatureF = (City_TemperatureK - 273)*1.8 + 32
που μετατρέπεται από Κέλβιν σε Φαρενάιτ (που πραγματικά μετατρέπεται από Κ -> Γ -> Φ)
Ακολουθεί το weatherID μας. Το weatherID είναι ένα αναγνωριστικό που παρέχει το Openweather και μας λέει για τις καιρικές συνθήκες μιας πόλης.
openweathermap.org/weather-conditions Εδώ είναι μια λίστα με αυτά.
Παρατηρήσαμε ότι όλα κάτω από τον αριθμό 700 ήταν κάποιου είδους βροχόπτωση, οπότε μόλις ελέγξαμε αν ο κωδικός ήταν κάτω από 700 για να δούμε αν έβρεχε.
def CheckRain (IdCode): εάν IdCode <700: return True else: return False
Με αυτό, έχουμε τις δύο μεταβλητές μας προετοιμασμένες για χρήση με τις ακίδες Raspberry PI και τις δίοδοι LED.
Βήμα 4: Κωδικοποίηση: Χρήση διόδων RPi. GPIO και LED
Το RaspberryPi έρχεται με ένα σύνολο αρσενικών ακίδων που μπορούμε να χρησιμοποιήσουμε για να επικοινωνήσουμε με μια σειρά από ηλεκτρικά εξαρτήματα, τα οποία σε αυτή την περίπτωση είναι οι δίοδοι LED. είναι παρόμοιο με το Arduino και το σύστημά του. Ωστόσο, το Raspberry PI είναι ένας υπολογιστής γενικής χρήσης, σε αντίθεση με έναν μικροελεγκτή όπως το Arduino. Επομένως, πρέπει να κάνουμε λίγο περισσότερη δουλειά για να τα χρησιμοποιήσουμε. Αυτό συνίσταται στη ρύθμιση των ακίδων στο Raspberry Pi. Το κάνουμε αυτό χρησιμοποιώντας αυτόν τον κωδικό.
εισαγωγή RPi. GPIO ως GPIO #Εισάγουμε τη μονάδα ώστε να μπορούμε να τη χρησιμοποιήσουμε
#Ρυθμίστε τις καρφίτσεςGPIO.setmode (GPIO. BCM) GPIO.setwarnings (False)
#Οι ακίδες που είναι συνδεδεμένες οι λυχνίες LED. Αυτά μπορεί να είναι διαφορετικά αν το φτιάξετε, οπότε φροντίστε να συγκρίνετε και να αλλάξετε όταν είναι απαραίτητο
Extreme_Hot_LED_PIN = 26 Hot_LED_PIN = 16
Extreme_Cold_LED_PIN = 5
Cold_LED_PIN = 6
Βροχή_LED_PIN = 23
#Περνάμε κάθε καρφίτσα, χρησιμοποιώντας την εντολή.setup, βάζοντας τον αριθμό του και ορίζοντάς τον ως ακίδα εξαγωγής
GPIO.setup (Rain_LED_PIN, GPIO. OUT) GPIO.setup (Extreme_Cold_LED_PIN, GPIO. OUT) GPIO.setup (Cold_LED_PIN, GPIO. OUT) GPIO.
Ωστόσο, αυτός ο κώδικας θα μας επέτρεπε να χρησιμοποιήσουμε μόνο δύο καταστάσεις με το led, δηλαδή, on και off. Ωστόσο, το χρειαζόμαστε για να μπορούμε να σβήνουμε τα φώτα. Για να γίνει αυτό, χρησιμοποιούμε Pulse Width Modulation.
Χρήση διαμόρφωσης πλάτους παλμού
Η διαμόρφωση πλάτους παλμού μας επιτρέπει να εξάγουμε ένα αναλογικό σήμα χρησιμοποιώντας ένα ψηφιακό pin. Ουσιαστικά, ενεργοποιεί και απενεργοποιεί την πηγή σήματος σε υψηλό ρυθμό, ο οποίος κατά μέσο όρο εκπέμπει σε ορισμένη τάση. Το RPi. GPIO μας επιτρέπει να το χρησιμοποιήσουμε, αν και με κάποιο επιπλέον κώδικα.
#Δημιουργούμε τέσσερα αντικείμενα pin χρησιμοποιώντας την εντολή GPIO. PWM, η οποία λαμβάνει έναν αριθμό καναλιού
#Ο δεύτερος αριθμός είναι ο αριθμός των ενημερώσεων ανά δευτερόλεπτο
ExtremeHotLED = GPIO. PWM (Extreme_Hot_LED_PIN, 100) HotLED = GPIO. PWM (Hot_LED_PIN, 100)
ExtremeColdLED = GPIO. PWM (Extreme_Cold_LED_PIN, 100)
ColdLED = GPIO. PWM (Cold_LED_PIN, 100)
Για το επόμενο βήμα, θα πρέπει να γνωρίζετε τον τρόπο με τον οποίο ενημερώνουμε αυτές τις καρφίτσες.
Ενημερώνουμε τις καρφίτσες χρησιμοποιώντας την εντολή
ExtremeColdLED.start (x) ColdLED.start (x)
ExtremeHotLED.start (x)
HotLED.start (x)
x σε αυτή την περίπτωση θα ήταν ο κύκλος εργασίας, ο οποίος καθορίζει πόσο παλμούς θα κάνει. Κυμαίνεται από 0-100, οπότε πρέπει να βασίσουμε τον επόμενο κωδικό μας σε αυτό το γεγονός.
Βήμα 5: Κωδικοποίηση: Λήψη φωτεινότητας LED
Επειδή έχουμε τέσσερα διαφορετικά led, θέλουμε να τα φωτίσουμε ανάλογα με το πώς. κρύο ή ζεστό είναι στην πόλη του χρήστη. Αποφασίσαμε να έχουμε τέσσερα στάδια για το led.
#Λειτουργίες
def getmiddleleftledintensity (TemperatureinF): #Αριστερή εξίσωση: y = -(50/20) x + 175 #Σωστή εξίσωση: y = (50/20) x -75 επιστροφή -(50/20)*ΘερμοκρασίαF + 175
def getmiddlerightledintensity (TemperatureinF):
#Αριστερή εξίσωση: y = - (50/20) x + 175 #Δεξιά εξίσωση: y = (50/20) x - 75 επιστροφή (50/20)*Θερμοκρασία σε F - 75
def getextremeleftledintensity (TemperatureinF):
#LeftEquation: y = - (100/30) x + 200 #RightEquation: y = (100/30) x - (400/3)
επιστροφή -(100/30)*Θερμοκρασία σε F + 200
def getextremerightledintensity (TemperatureinF):
# LeftEquation: y = - (100/30) x + 200 # RightEquation: y = (100/30) x - (400/3)
επιστροφή (100/30)*Θερμοκρασία σε F - (400/3)
#Ρύθμιση των φώτων LED
def GetLEDBrightness (θερμοκρασία):
εάν θερμοκρασία <= 0: extremecoldled = 100 coldled = 100 hotled = 0 extremehotled = 0
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif temp> = 100: extremecoldled = 0 coldled = 0 hotled = 100 extremehotled = 100
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif 0 <temp <= 30: extremecoldled = getextremeleftledintensity (temp) - 100 coldled = 100 hotled = 0 extremehotled = 0
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif 100> temp> = 70: extremecoldled = 0 coldled = 0 hotled = 100 extremehotled = getextremerightledintensity (temp) - 100
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif 30 <temp <50: extremecoldled = 0 coldled = getmiddleleftledintensity (temp) hotled = 100 - coldled extremehotled = 0
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif 50 <temp <70: hotled = getmiddlerightledintensity (temp) extremehotled = 0
κρυωμένος = 100 - ζεστός
extremecoldled = 0
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (hotled) elif temp == 50: extremecoldled = 0 coldled = 50 hotled = 50 extremehotled = 0
εκτύπωση ("Extreme cold led:" + str (extremecoldled))
εκτύπωση ("Cold led:" + str (coldled)) print ("Extreme hot led" + str (extremehotled)) print ("Hot led:" + str (hotled))
ExtremeColdLED.start (extremecoldled)
ColdLED.start (ψυχρό)
ExtremeHotLED.start (extremehotled)
HotLED.start (ζεστό)
Εντάξει, αυτό το τμήμα κώδικα είναι πολύ μεγάλο. Είναι επίσης αρκετά δύσκολο να εξηγηθεί. Ουσιαστικά, ο παραπάνω κώδικας εξετάζει τη θερμοκρασία σε Φαρενάιτ και καθορίζει εάν βρίσκεται σε ένα σύνολο εύρους. Ανάλογα με τα εύρη, δίνει έναν αριθμό για κάθε led και τη φωτεινότητά του και στη συνέχεια ορίζει τη φωτεινότητα καλώντας την εντολή start (). Αυτή είναι η γρήγορη εξήγηση. Εάν αρκεί, σας συνιστώ να προχωρήσετε στο επόμενο βήμα, αλλά αν θέλετε να δείτε τη μακρά και κουραστική εξήγηση, συνεχίστε να διαβάζετε.
Όταν προγραμματίσαμε, αποφασίσαμε ότι ο ευκολότερος τρόπος για να λάβουμε μια τιμή από μια θερμοκρασία ήταν με τη μορφή μιας μαθηματικής συνάρτησης. Έτσι, δημιουργήσαμε ένα γράφημα στο GeoGebra για να αναπαραστήσουμε τη σχέση μεταξύ της θερμοκρασίας μας και της φωτεινότητάς μας. ο λόγος που πηγαίνει πάνω από 100 είναι ότι το επιπλέον θα πήγαινε στο δεύτερο led. Ωστόσο, αντιμετωπίσαμε το ζήτημα της απόκτησης μιας μόνο συνάρτησης για τη χαρτογράφηση όλων αυτών των σημείων σε μια ενιαία συνάρτηση. Πιστεύαμε ότι μπορούσαμε να χρησιμοποιήσουμε μια παραβολή, αλλά αποφασίσαμε να αρκεστούμε στη χρήση μιας σειράς προτάσεων if. Ουσιαστικά, ολόκληρος αυτός ο κώδικας είναι μια συναρτησιακή συνάρτηση.
Οι συναρτήσεις στο επάνω μέρος είναι η αντίστοιχη εξίσωση γραμμών. Μόλις καθορίσουμε πού βρίσκεται η θερμοκρασία στο γράφημα, το περνάμε μέσω αυτής της συνάρτησης, παίρνουμε τη φωτεινότητα και την περνάμε στα led.
Βήμα 6: Κωδικοποίηση: Τελικά βήματα
Τέλος, προσθέτουμε αυτή τη δήλωση στο τέλος.
προσπαθήστε:
while (True): GetLEDBrightness (City_TemperatureF) GetRainLED (WeatherID) time.sleep (10) εκτός KeyboardIntrupt: quit ()
Οι προτάσεις try and only μας επιτρέπουν να βγούμε από τον κώδικα χρησιμοποιώντας μια συντόμευση πληκτρολογίου. ούτως ή άλλως, θα πρέπει να κλείσουμε το Raspberry Pi για επανεκκίνηση του κώδικα. Τότε έχουμε έναν βρόχο while που τρέχει για πάντα. Ενημερώνουμε τα led, καθώς και ενημερώνουμε το LED βροχής. Κάνουμε παύση για δέκα δευτερόλεπτα. Το OpenWeather επιτρέπει μόνο 60 κλήσεις για δεδομένα ανά λεπτό και 10 δευτερόλεπτα είναι πολλές ενημερώσεις.
Και με αυτό, ο κωδικός μας έχει τελειώσει. Παρακάτω είναι ο τελειωμένος κώδικας.
RaspberryPIWeatherStation.py
εισαγωγικά αιτήματα |
importRPi. GPIOasGPIO |
importjson |
ώρα εισαγωγής |
Κωδικοί #Openweather id κάτω από 700 είναι όλες βροχοπτώσεις |
defCheckRain (IdCode): |
ifIdCode <700: |
returnTrue |
αλλού: |
returnFalse |
defgetmiddleleftledintensity (TemperatureinF): |
#Αριστερή εξίσωση: y =-(50/20) x + 175 |
#Σωστή εξίσωση: y = (50/20) x - 75 |
επιστροφή- (50/20)*Θερμοκρασία σε F+175 |
defgetmiddlerightledintensity (TemperatureinF): |
#Αριστερή εξίσωση: y =-(50/20) x + 175 |
#Σωστή εξίσωση: y = (50/20) x - 75 |
επιστροφή (50/20)*Θερμοκρασία σε F-75 |
defgetextremeleftledintensity (TemperatureinF): |
#LeftEquation: y = -(100/30) x + 200 |
#RightEquation: y = (100/30) x - (400/3) |
επιστροφή- (100/30)*Θερμοκρασία σε F+200 |
defgetextremerightledintensity (TemperatureinF): |
# LeftEquation: y = -(100/30) x + 200 |
# ΔεξιάΕξίσωση: y = (100/30) x - (400/3) |
επιστροφή (100/30)*Θερμοκρασία σε F- (400/3) |
#GPIO Setup |
GPIO.setmode (GPIO. BCM) |
GPIO.setwarnings (False) |
#Καρφίτσες |
Extreme_Hot_LED_PIN = 26 |
Hot_LED_PIN = 16 |
Extreme_Cold_LED_PIN = 5 |
Cold_LED_PIN = 6 |
Βροχή_LED_PIN = 23 |
#Ρύθμιση καρφιτσών |
GPIO.setup (Rain_LED_PIN, GPIO. OUT) |
GPIO.setup (Extreme_Cold_LED_PIN, GPIO. OUT) |
GPIO.setup (Cold_LED_PIN, GPIO. OUT) |
GPIO.setup (Hot_LED_PIN, GPIO. OUT) |
GPIO.setup (Extreme_Hot_LED_PIN, GPIO. OUT) |
ExtremeHotLED = GPIO. PWM (Extreme_Hot_LED_PIN, 100) |
HotLED = GPIO. PWM (Hot_LED_PIN, 100) |
ExtremeColdLED = GPIO. PWM (Extreme_Cold_LED_PIN, 100) |
ColdLED = GPIO. PWM (Cold_LED_PIN, 100) |
defGetLEDBrightness (θερμοκρασία): |
iftemp <= 0: |
extremecoldled = 100 |
κρυωμένο = 100 |
ζεσταμένο = 0 |
extremehotled = 0 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
eliftemp> = 100: |
extremecoldled = 0 |
κρυωμένο = 0 |
ζεσταμένο = 100 |
extremehotled = 100 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
elif0 <temp <= 30: |
extremecoldled = getextremeleftledintensity (temp) -100 |
κρυωμένο = 100 |
ζεσταμένο = 0 |
extremehotled = 0 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
elif100> temp> = 70: |
extremecoldled = 0 |
κρυωμένο = 0 |
ζεσταμένο = 100 |
extremehotled = getextremerightledintensity (temp) -100 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
elif30 <θερμοκρασία <50: |
extremecoldled = 0 |
coldled = getmiddleleftledintensity (temp) |
ζεσταμένος = 100-ψυχρός |
extremehotled = 0 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
elif50 <θερμοκρασία <70: |
hotled = getmiddlerightledintensity (temp) |
extremehotled = 0 |
κρυωμένος = 100-ζεστός |
extremecoldled = 0 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
eliftemp == 50: |
extremecoldled = 0 |
κρυωμένος = 50 |
ζεσταμένο = 50 |
extremehotled = 0 |
εκτύπωση ("Extreme cold led:"+str (extremecoldled)) |
εκτύπωση ("Cold led:"+str (coldled)) |
εκτύπωση ("Extreme hot led"+str (extremehotled)) |
εκτύπωση ("Hot led:"+str (hotled)) |
ExtremeColdLED.start (extremecoldled) |
ColdLED.start (ψυχρό) |
ExtremeHotLED.start (extremehotled) |
HotLED.start (ζεστό) |
defGetRainLED (idCode): |
ifCheckRain (idCode): |
GPIO.output (Rain_LED_PIN, GPIO. HIGH) |
αλλού: |
GPIO.output (Rain_LED_PIN, GPIO. LOW) |
Πληροφορίες #Api: Αντικατάσταση κλειδιού API με το κλειδί apiweather |
openweather_api_key = "460a23f27ff324ef9ae743c7e9c32d7e" |
base_call = "https://api.openweathermap.org/data/2.5/weather?q=" |
εκτύπωση ("Πληκτρολογήστε μια πόλη!") |
city_name = input () |
full_call = base_call+city_name+"& appid ="+openweather_api_key |
#Λήψη δεδομένων καιρού |
Απάντηση = request.get (full_call) |
WeatherData = Response.json () |
WeatherID = WeatherData ["weather"] [0] ["id"] |
City_TemperatureK = WeatherData ["main"] ["temp"] |
City_TemperatureF = (City_TemperatureK-273)*1.8+32#Μετατροπή σε Φαρενάιτ |
#LED/GPIO Stuff |
εκτύπωση ("K:"+str (City_TemperatureK)) |
εκτύπωση ("F:"+str (City_TemperatureF)) |
εκτύπωση (WeatherID) |
προσπαθήστε: |
ενώ (True): |
GetLEDBrightness (City_TemperatureF) |
GetRainLED (WeatherID) |
ώρα. ύπνος (10) |
εκτόςKeyboardIntruptrupt: |
εγκαταλείπω() |
προβολή rawRaspberryPIWeatherStation.py που φιλοξενείται με ❤ από το GitHub
Βήμα 7: Χτίσιμο και καλωδίωση
Μπά! Μετά από όλη αυτή την κωδικοποίηση, φτάνουμε στο κτίριο, το οποίο είναι σημαντικά πιο εύκολο. Λόγω των παραγγελιών για παραμονή στο σπίτι, δεν μπορούσαμε να φτάσουμε σε πολλά από τα εργαλεία που περιμέναμε να έχουμε στο σχολείο. Έτσι, αυτό το μέρος είναι λίγο πιο απλό από αυτό που θέλαμε. Τα ίδια τα χαρακτηριστικά είναι επίσης ευέλικτα. Αρχικά σχεδιάσαμε ένα ορθογώνιο σε μια σανίδα ξύλου. Το συγκεκριμένο μέγεθος δεν έχει πραγματικά μεγάλη σημασία, καθώς απλώς χρησιμεύει ως πλατφόρμα για να τοποθετήσετε led και ηλεκτρονικά.
Στη συνέχεια ανοίξαμε πέντε 1/8 σε τρύπες στο ξύλο μας.
Στη συνέχεια κόβουμε το ορθογώνιο από τη σανίδα για να το χρησιμοποιήσουμε ως πλατφόρμα για τα ηλεκτρονικά μας.
(Αυτό ήταν όταν ξεκινήσαμε, βρήκαμε ένα μεγαλύτερο πριόνι!)
Στη συνέχεια σπρώχνουμε τις ακίδες της ανόδου και της καθόδου του led μέσα στις οπές. Τα led πρέπει να είναι τοποθετημένα στην κορυφή, με τους βολβούς τους να ξεκολλούν. παρακολουθείτε ποιο πόδι είναι μεγαλύτερο και μικρότερο. Στη συνέχεια, ξεκινήσαμε να κολλάμε μαζί καλώδια. Πρώτα συγκολλήσαμε τις αντιστάσεις στο πόδι ανόδου του LED (το μεγαλύτερο πόδι).
Στη συνέχεια, κολλήσαμε τα πόδια της καθόδου των LED σε ένα μόνο σύρμα χαλκού το οποίο θα χρησιμοποιήσουμε ως γείωση. Θα πρέπει να μοιάζει με αυτό.
Αφού το κάνουμε αυτό, κολλάμε τα αρσενικά άκρα καλωδίων γυναικών-ανδρών στα άκρα κάθε αντίστασης και του χάλκινου καλωδίου γείωσης. Μόλις το κάνουμε αυτό, μπορούμε να αρχίσουμε να συνδέουμε τα καλώδια στις ακίδες PI GPIO βατόμουρου. Εδώ είναι ένα διάγραμμα! Ωστόσο, σημειώστε, οι καρφίτσες είναι αυτές στον κώδικα που είχαμε αγγίξει προηγουμένως.
Μόλις τα έχετε όλα ενωμένα, τώρα το μόνο που πρέπει να κάνετε είναι να μεταφέρετε το αρχείο Python στο βατόμουρο Pi και να ανοίξετε το τερματικό. εκτελέστε το "python3 RaspberryPIWeatherStation.py" και στη συνέχεια κάντε το όπως δείχνει.
Βήμα 8: Επίδειξη και συμπέρασμα
Ευχαριστώ που διαβάσατε σε όλη τη διαδρομή! Επισυνάπτω το σενάριο python παρακάτω! Αν υπήρχαν πράγματα που θα μπορούσαμε να προσθέσουμε, πιθανότατα θα ήταν…
1. Υποστήριξη για διαφορετικούς τύπους εισαγωγής (πόλεις, γεωγραφικά σημεία κ.λπ.)
2. Υποστήριξη για περισσότερες πληροφορίες για τον καιρό
3. Προσθέστε μια μικρή οθόνη για να εμφανίσετε πληροφορίες
Πείτε μας τις σκέψεις σας! Αυτό ήταν ένα διασκεδαστικό έργο για κατασκευή. Μάθαμε πολλά για αιτήματα και λήψη εγγράφων στο Διαδίκτυο χρησιμοποιώντας python και επίσης μάθαμε πολλά για τη χρήση συγκόλλησης.
Συνιστάται:
Μετεωρολογικός σταθμός Raspberry Pi Internet: 5 βήματα (με εικόνες)
Μετεωρολογικός σταθμός Raspberry Pi Internet: *** Update *** This Instructable έχει ξεπεραστεί. Οι υπηρεσίες καιρού για τα δεδομένα καιρού, που χρησιμοποιούνται σε αυτό το Instructable, δεν λειτουργούν πλέον. ΠΑΝΤΩΣ, υπάρχει ένα εναλλακτικό έργο που κάνει βασικά το ίδιο πράγμα (μόνο καλύτερα - αυτή η Οδηγία
Προσωπικός μετεωρολογικός σταθμός χρησιμοποιώντας Raspberry Pi με BME280 σε Java: 6 βήματα
Προσωπικός μετεωρολογικός σταθμός με χρήση Raspberry Pi με BME280 σε Java: Ο κακός καιρός φαίνεται πάντα χειρότερος από ένα παράθυρο. Πάντα μας ενδιέφερε να παρακολουθούμε τον τοπικό καιρό μας και τι βλέπουμε από το παράθυρο. Θέλαμε επίσης καλύτερο έλεγχο του συστήματος θέρμανσης και κλιματισμού. Η κατασκευή προσωπικού μετεωρολογικού σταθμού είναι μια
Μετεωρολογικός σταθμός NaTaLia: Μετεωρολογικός σταθμός Arduino Solar Powered Done the Right Way: 8 βήματα (με εικόνες)
Μετεωρολογικός Σταθμός NaTaLia: Ο Μετεωρολογικός Σταθμός Arduino έγινε με τον σωστό τρόπο: Μετά από 1 χρόνο επιτυχούς λειτουργίας σε 2 διαφορετικές τοποθεσίες, μοιράζομαι τα σχέδια έργων μου με ηλιακή ενέργεια και εξηγώ πώς εξελίχθηκε σε ένα σύστημα που μπορεί πραγματικά να επιβιώσει για μεγάλο χρονικό διάστημα περιόδους από την ηλιακή ενέργεια. Αν ακολουθείτε
Μετεωρολογικός σταθμός DIY & Σταθμός αισθητήρα WiFi: 7 βήματα (με εικόνες)
Μετεωρολογικός Σταθμός DIY & WiFi Sensor Station: Σε αυτό το έργο θα σας δείξω πώς να δημιουργήσετε έναν μετεωρολογικό σταθμό μαζί με έναν σταθμό αισθητήρα WiFi. Ο σταθμός αισθητήρων μετρά τα τοπικά δεδομένα θερμοκρασίας και υγρασίας και τα στέλνει, μέσω WiFi, στον μετεωρολογικό σταθμό. Ο μετεωρολογικός σταθμός εμφανίζει τότε
Μετεωρολογικός σταθμός WiFi μετεωρολογικός σταθμός V1.0: 19 βήματα (με εικόνες)
Solar Powered WiFi Weather Station V1.0: Σε αυτό το Εκπαιδευτικό, θα σας δείξω πώς να φτιάξετε έναν Μετεωρολογικό σταθμό με ηλιακή ενέργεια με έναν πίνακα Wemos. Το Wemos D1 Mini Pro διαθέτει έναν μικρό παράγοντα μορφής και μια μεγάλη γκάμα ασπίδων plug-and-play το καθιστούν ιδανική λύση για γρήγορη απόκτηση