Πορεία υλοποίησης του έργου:
Προσδιορισμός του προβλήματος Καταιγισμός Ιδεών Σχεδίαση Κατασκευή Κοινοποίηση της λύσης
"Προγραμματισμός του LED"

Α. Περιγραφή
Θα πρέπει να προγραμματίσετε ένα LED να αναβοσβήνει π.χ. ανά 1 δευτερόλεπτο.
Β. Γενικές πληροφορίες
Τι είναι το ψηφιακό σήμα
Ψηφιακό σήμα: Το ψηφιακό σήμα αναφέρεται στην τιμή του πλάτους είναι διακριτή, το πλάτος είναι περιορίζεται σε πεπερασμένο αριθμό τιμών. Στον ελεγκτή μας, το ψηφιακό σήμα έχει δύο καταστάσεις: LOW(0V) για 0; HIGH(5V) για 1. Έτσι, η αποστολή ενός σήματος HIGH στο LED μπορεί να το ανάψει.

Γ. Κώδικας λογισμικού
- Ανοίξτε το Arduino IDE.
- Αντιγράψτε τον ακόλουθο κώδικα, κάντε κλικ στην επιλογή Επαλήθευση για να ελέγξετε για σφάλματα σύνταξης. Βεβαιωθείτε ότι δεν υπάρχουν σφάλματα και μπορείτε να ανεβάσετε τον κώδικα.
//LED Blink
//The LED will turn on for one second and then turn off for one second
int ledPin = 4;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Δ. Ανάλυση κώδικα
setup(){
}
Η συνάρτηση setup() καλείται όταν ξεκινά ένα σκίτσο. Χρησιμοποιήστε το για να αρχικοποιήσετε μεταβλητές, λειτουργίες καρφιτσώματος, να αρχίσετε να χρησιμοποιείτε βιβλιοθήκες κ.λπ. Η λειτουργία setup() θα εκτελείται μόνο μία φορά, μετά από κάθε ενεργοποίηση ή επαναφορά της πλακέτας Arduino.
loop(){
}
Μετά τη δημιουργία μιας συνάρτησης setup(), η οποία αρχικοποιεί και ορίζει τις αρχικές τιμές, η συνάρτηση loop() κάνει ακριβώς αυτό που υποδηλώνει το όνομά της και επαναλαμβάνεται διαδοχικά, επιτρέποντας στο πρόγραμμά σας να αλλάξει και να ανταποκριθεί. Χρησιμοποιήστε το για να ελέγξετε ενεργά την πλακέτα Arduino.
int ledPin = 4;
Περιγραφή:
Μετατρέπει μια τιμή στον τύπο δεδομένων int.
Σύνταξη:
int(x) ή (int)x (μετατροπή τύπου C)
Παράμετροι:
x: μια τιμή. Επιτρεπόμενοι τύποι δεδομένων: οποιοσδήποτε τύπος. Αντιστοιχίστηκε ένας τύπος int 4 στη μεταβλητή ledPin.
pinMode(ledPin, OUTPUT);
Περιγραφή:
Ρυθμίζει τις παραμέτρους του καθορισμένου πείρου ώστε να συμπεριφέρεται είτε ως είσοδος είτε ως έξοδος. Ανατρέξτε στη σελίδα Ψηφιακά pin για λεπτομέρειες σχετικά με τη λειτουργικότητά τους. Από το Arduino 1.0.1, είναι δυνατή η ενεργοποίηση των εσωτερικών αντιστάσεων έλξης με τη λειτουργία INPUT_PULLUP . Επιπλέον, η λειτουργία INPUT απενεργοποιεί ρητά τα εσωτερικά pullups.
Σύνταξη:
pinMode (pin; λειτουργία)
Παράμετροι:
- pin: ο αριθμός καρφίτσας Arduino για να ρυθμίσετε τη λειτουργία του
- mode: INPUT , OUTPUT ή INPUT_PULLUP
- Ρύθμιση ledPin στη λειτουργία εξόδου.
digitalWrite(ledPin, HIGH);
Περιγραφή:
Γράψτε μια τιμή HIGH ή LOW σε ένα ψηφιακό pin. Εάν ο ακροδέκτης έχει ρυθμιστεί ως OUTPUT με pinMode(), η τάση του θα ρυθμιστεί στην αντίστοιχη τιμή: 5V (ή 3.3V σε πλακέτες 3.3V) για HIGH , 0V (γείωση) για LOW. Εάν ο ακροδέκτης έχει ρυθμιστεί ως INPUT, το digitalWrite() θα ενεργοποιήσει (HIGH) ή θα απενεργοποιήσει (LOW) το εσωτερικό pullup στον πείρο εισόδου. Συνιστάται να ρυθμίσετε το pinMode() σε INPUT_PULLUP για να ενεργοποιήσετε την εσωτερική αντίσταση έλξης. Ανατρέξτε στον οδηγό για τα ψηφιακά pin για περισσότερες πληροφορίες. Εάν δεν ρυθμίσετε το pinMode() σε OUTPUT και συνδέσετε μια λυχνία LED σε μια ακίδα, όταν καλείτε το digitalWrite(HIGH), η λυχνία LED ενδέχεται να εμφανίζεται αχνή. Χωρίς ρητή ρύθμιση pinMode(), η digitalWrite() θα έχει ενεργοποιήσει την εσωτερική αντίσταση έλξης, η οποία λειτουργεί ως μεγάλη αντίσταση περιορισμού ρεύματος.
Σύνταξη:
digitalWrite (pin; τιμή)
Παράμετροι:
- pin: ο αριθμός PIN Arduino.
- τιμή: ΥΨΗΛΗ ή ΧΑΜΗΛΗ.
Όταν ορίζουμε το ledPin ως έξοδο, HIGH σημαίνει αποστολή υψηλού επιπέδου στον πείρο, ανάβει το LED.
digitalWrite(ledPin, LOW);
Όταν ορίζουμε το led ως έξοδο, το χαμηλό σημαίνει αποστολή χαμηλού επιπέδου στο pin, το LED σβήνει.
delay(1000);
Περιγραφή:
Θέτει σε παύση το πρόγραμμα για το χρονικό διάστημα (σε χιλιοστά του δευτερολέπτου) που καθορίζεται ως παράμετρος. (Υπάρχουν 1000 χιλιοστά του δευτερολέπτου σε ένα δευτερόλεπτο.)
Σύνταξη:
καθυστέρηση(ms)
Παράμετροι:
ms: Ο αριθμός των χιλιοστών του δευτερολέπτου για παύση. Επιτρεπόμενοι τύποι δεδομένων: ανυπόγραφο μεγάλο. Καθυστέρηση του προγράμματος κατά 1000ms(1s).
Εφέ επίδειξης και σειριακό αποτέλεσμα εκτύπωσης:
Η μονάδα LED θα είναι 1 δευτερόλεπτο ενεργοποιημένο και 1 δευτερόλεπτο απενεργοποιημένο.
Αφού μελετήσετε με προσοχή τον παραπάνω κώδικα και κατανοήσατε τη λειτουργία του, δοκιμάστε να τον επικυρώσετε και να τον ανεβάσετε. Τι παρατηρείτε;
Μεταφέρτε τον κώδικα στο Wokwi και εκτελέστε τον ξανά.
"Προγραμματισμός του αισθητήρα φωτός"

A. Τρόπος λειτουργίας
Ο αισθητήρας φωτός περιέχει μια φωτοευαίσθητη αντίσταση για τη μέτρηση της έντασης του φωτός. Η αντίσταση της φωτοευαίσθητης αντίστασης μειώνεται με την αύξηση της έντασης του φωτός. Το σήμα εξόδου είναι η αναλογική τιμή, όσο πιο φωτεινή είναι η πηγή φωτός, τόσο μεγαλύτερη είναι η αναλογική τιμή. Με βάση αυτήν την ιδιότητα, μπορείτε να τη χρησιμοποιήσετε για να κάνετε έναν διακόπτη φωτός.
B. Γενικές πληροφορίες
Τι είναι το Serial Monitor
Το Serial Monitor είναι ένα χρήσιμο εργαλείο για την παρατήρηση αποτελεσμάτων στο Arduino, μπορεί να είναι πολύ χρήσιμο όσον αφορά την εκτύπωση αποτελεσμάτων από τους αισθητήρες ή τον εντοπισμό σφαλμάτων γενικά. Μπορείτε επίσης να στείλετε δεδομένα πίσω στον ελεγκτή μέσω της σειριακής οθόνης για να κάνετε ορισμένες εργασίες! Σημείωση: Βεβαιωθείτε ότι η σειριακή μεταφορά δεδομένων ταιριάζει με τον κωδικό.
Μπορείτε να ανοίξετε το Serial Plotter κάνοντας κλικ στο Tools Serial Monitor.

Καθώς το περιβάλλον φωτίζεται αργά, τα φώτα LED θα ανάψουν. Καθώς το φως χαμήλωνε αργά, η λυχνία LED χαμήλωνε. Το LED θα πάει από το σκοτάδι στο φως ή από το φως στο σκοτάδι. Για να επιτευχθεί αυτό, θα χρησιμοποιήσουμε διαμόρφωση πλάτους παλμού (PWM).
Γ. Κώδικας λογισμικού
- Ανοίξτε το Arduino IDE.
- Αντιγράψτε τον ακόλουθο κώδικα, κάντε κλικ στην επιλογή Επαλήθευση για να ελέγξετε για σφάλματα σύνταξης. Βεβαιωθείτε ότι δεν υπάρχουν σφάλματα και μπορείτε να ανεβάσετε τον κώδικα.
// Light Switch
int sensorpin = A6; // Analog input pin that the sensor is attached to
int ledPin = 4; // LED port
int sensorValue = 0; // value read from the port
int outputValue = 0; // value output to the PWM (analog out)
void setup() {
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(sensorpin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
Serial.println(sensorValue);
// change the analog out value:
analogWrite(ledPin, outputValue);
delay(1000);
}
Μπορείτε επίσης να δείτε τις μετρήσεις έντασης φωτός από τη σειριακή οθόνη, να πλοηγηθείτε στα Εργαλεία Σειριακή οθόνη.
Δ. Ανάλυση κώδικα
Serial.begin(9600);
Περιγραφή:
Ορίζει το ρυθμό δεδομένων σε bit ανά δευτερόλεπτο (baud) για σειριακή μετάδοση δεδομένων. Για επικοινωνία με το Serial Monitor, βεβαιωθείτε ότι χρησιμοποιείτε ένα από τα baud rates που αναφέρονται στο μενού στην κάτω δεξιά γωνία της οθόνης του. Μπορείτε, ωστόσο, να καθορίσετε άλλους ρυθμούς - για παράδειγμα, να επικοινωνείτε μέσω ακίδων 0 και 1 με ένα στοιχείο που απαιτεί συγκεκριμένο ρυθμό baud. Ένα προαιρετικό δεύτερο όρισμα ρυθμίζει τις παραμέτρους των bit δεδομένων, ισοτιμίας και διακοπής. Η προεπιλογή είναι 8 bit δεδομένων, χωρίς ισοτιμία, ένα bit στάσης. Το λογισμικό που εκτελείται στον υπολογιστή επικοινωνεί με τον πίνακα ανάπτυξης και ο ρυθμός baud είναι 9600.
Σύνταξη:
Serial.begin (ταχύτητα)
Παράμετροι:
ταχύτητα: Ταχύτητα σειριακής επικοινωνίας. π.χ. 9600 , 115200 και κ.λπ. Ορίστε το σειριακό ρυθμό baud σε 9600
Serial.println(sensorValue);
Περιγραφή:
Εκτυπώνει δεδομένα στη σειριακή θύρα ως αναγνώσιμο από τον άνθρωπο κείμενο ASCII ακολουθούμενο από έναν χαρακτήρα επαναφοράς (ASCII 13 ή '⧵r') και έναν χαρακτήρα νέας γραμμής (ASCII 10 ή '⧵n'). Αυτή η εντολή έχει τις ίδιες μορφές με τη Serial.print().
Σύνταξη:
Serial.println(val) ή Serial.println(val, μορφή)
Παράμετροι::
val: η τιμή προς εκτύπωση. Επιτρεπόμενοι τύποι δεδομένων: οποιοσδήποτε τύπος δεδομένων.
Μορφή: Καθορίζει τη βάση αριθμών (για ολοκληρωμένους τύπους δεδομένων) ή τον αριθμό δεκαδικών ψηφίων (για τύπους κινητής υποδιαστολής). Η σειριακή θύρα εκτυπώνει την τιμή του αισθητήρα φωτός. Έτσι, ανοίγετε τη σειριακή οθόνη στη διεπαφή IED και βλέπετε την τιμή του αισθητήρα εξόδου.
outputValue = map(sensorValue, 0, 1023, 0, 255);
Περιγραφή:
Αντιστοιχίστε ξανά έναν αριθμό από τη μία περιοχή στην άλλη. Δηλαδή, μια τιμή fromLow θα αντιστοιχιστεί σε toLow, μια τιμή fromHigh σε toHigh, τιμές ενδιάμεσα σε τιμές ενδιάμεσα κ.λπ. Δεν περιορίζει τις τιμές εντός της περιοχής, επειδή ορισμένες φορές οι τιμές εκτός εύρους είναι σκόπιμες και χρήσιμες. Η συνάρτηση constrain() μπορεί να χρησιμοποιηθεί είτε πριν είτε μετά από αυτή τη λειτουργία, εάν είναι επιθυμητά τα όρια στα εύρη. Σημειώστε ότι τα "κατώτερα όρια" οποιασδήποτε περιοχής μπορεί να είναι μεγαλύτερα ή μικρότερα από τα "ανώτερα όρια", επομένως η συνάρτηση map() μπορεί να χρησιμοποιηθεί για να αντιστρέψει ένα εύρος αριθμών, για παράδειγμα
y = map(x, 1, 50, 50, 1);
Η συνάρτηση χειρίζεται επίσης καλά τους αρνητικούς αριθμούς, έτσι ώστε αυτό το παράδειγμα
y = map(x, 1, 50, 50, -100);
είναι επίσης έγκυρη και λειτουργεί καλά.
Η συνάρτηση map() χρησιμοποιεί ακέραια μαθηματικά, οπότε δεν θα δημιουργήσει κλάσματα, όταν τα μαθηματικά μπορεί να υποδεικνύουν ότι πρέπει να το κάνει. Τα κλασματικά υπόλοιπα περικόπτονται και δεν στρογγυλοποιούνται ούτε υπολογίζονται ως μέσος όρος.
Σύνταξη:
map(τιμή; απόΧαμηλή; απόΥψηλή; προςΧαμηλή; προςΥψηλή)
Παράμετροι:
Τιμή: Ο αριθμός που θα αντιστοιχιστεί.
fromLow: το κατώτερο όριο του τρέχοντος εύρους τιμών της τιμής.
fromHigh: το ανώτερο όριο του τρέχοντος εύρους τιμών της τιμής.
toLow: το κατώτερο όριο του εύρους στόχου της τιμής.
toHigh: το ανώτερο όριο του εύρους στόχου της τιμής.
Χαρτογράφηση (mapping) αναλογικού σήματος αισθητήρα φωτός (0 έως 1023) στην τιμή φωτεινότητας LED (0 έως 255). Κρατήστε ίσο και ποτενσιόμετρο μετά τη χαρτογράφηση της τιμής του χρόνου. Ο χάρτης έχει πέντε παραμέτρους, οι οποίες με τη σειρά τους είναι: να χαρτογραφήσει την αρχική τιμή, την αρχική τιμή της ελάχιστης τιμής, την αρχική μέγιστη τιμή, την ελάχιστη τιμή μετά τη χαρτογράφηση, τη χαρτογράφηση της μέγιστης. Με αυτόν τον τρόπο, τα δεδομένα που επιστρέφονται από τον αισθητήρα μπορούν να αντιστοιχιστούν από την αρχική του τιμή 0-1023 έως 0-255.
analogWrite(ledPin,255-outputvalue);
Η συνάρτηση χρησιμοποιείται για την εγγραφή μιας αναλογικής τιμής μεταξύ 0 - 255 a PWM pin. Το analogWrite() μπορεί να χρησιμοποιηθεί μόνο για ακίδες PWM. Τα νέα δεδομένα χαρτογράφησης στην προηγούμενη δήλωση μπορούν να εξαχθούν στο ledPin για να φωτίσουν/μειώσουν τη φωτεινότητα του LED.
Εφέ επίδειξης και σειριακό αποτέλεσμα εκτύπωσης:
Η μονάδα LED θα αλλάξει την έντασή της ανάλογα με την ένταση φωτός του περιβάλλοντος. Όσο πιο σκούρο είναι το περιβάλλον, τόσο πιο ανοιχτό γίνεται