Μάθημα : ERASMUS+ 2025-2026

Κωδικός : 0502080399

0502080399 - ΕΛΕΝΗ ΔΑΜΑΣΚΟΥ

Ενότητες μαθήματος

Προσομοίωση ARDUINO!

Θα χρησιμοποιήσουμε το online εργαλείο TINKERCAD

 

https://www.tinkercad.com/dashboard

 

Προσομοίωση αισθητήρα υγρασίας χώματος στο Tinkercad

Στόχος

Θα φτιάξουμε ένα απλό κύκλωμα με Arduino Uno R3 που θα “καταλαβαίνει” αν το χώμα είναι στεγνό ή υγρό.
Όταν το χώμα είναι στεγνό, θα ανάβει ένα LED.

Στο Tinkercad δεν υπάρχει πάντα έτοιμος πραγματικός αισθητήρας υγρασίας χώματος όπως σε πραγματικά κυκλώματα, γι’ αυτό θα χρησιμοποιήσουμε ένα ποτενσιόμετρο (potentiometer) για να τον προσομοιώσουμε.


Τι υλικά θα βάλουμε στην προσομοίωση

  • 1 Arduino Uno R3
  • 1 potentiometer
  • 1 LED
  • 1 αντίσταση 220Ω
  • καλώδια σύνδεσης

Βήμα 1: Ανοίγουμε νέο κύκλωμα στο Tinkercad

Τι κάνουμε

  1. Μπαίνουμε στο Tinkercad
  2. Επιλέγουμε Circuits
  3. Πατάμε Create new Circuit

Γιατί το κάνουμε

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

  • το Tinkercad λειτουργεί σαν ένα ψηφιακό εργαστήριο ηλεκτρονικών
  • αντί να έχουμε πραγματικά υλικά στο θρανίο, τα βάζουμε εικονικά στην οθόνη
  • έτσι μπορούμε να δοκιμάζουμε χωρίς κίνδυνο να χαλάσουμε κάποιο εξάρτημα

 

Βήμα 2: Προσθέτουμε το Arduino Uno R3

Τι κάνουμε

Από τα εξαρτήματα βρίσκουμε το Arduino Uno R3 και το σύρουμε στο κέντρο της οθόνης.

Γιατί το κάνουμε

Το Arduino είναι ο “εγκέφαλος” του κυκλώματος.
Αυτό:

  • παίρνει πληροφορίες από τον αισθητήρα
  • τις επεξεργάζεται
  • αποφασίζει τι θα κάνει
  • δίνει εντολή στο LED να ανάψει ή να σβήσει

Το Arduino:

  • διαβάζει εισόδους (input), όπως έναν αισθητήρα
  • ελέγχει εξόδους (output), όπως ένα LED

 

  • είσοδος = κάτι που “λέει” πληροφορίες στο Arduino
  • έξοδος = κάτι που το Arduino ελέγχει

 

Βήμα 3: Προσθέτουμε το potentiometer

Τι κάνουμε

Βάζουμε ένα potentiometer στον χώρο εργασίας.

Γιατί το κάνουμε

Το potentiometer θα παίξει τον ρόλο του αισθητήρα υγρασίας χώματος.

Σε πραγματικό κύκλωμα ο αισθητήρας υγρασίας μετρά πόσο νερό υπάρχει στο χώμα.
Στην προσομοίωση, το Tinkercad δεν μας δίνει πάντα τον ίδιο ακριβώς αισθητήρα, οπότε χρησιμοποιούμε το potentiometer για να δίνουμε εμείς μια τιμή στο Arduino.

Με απλά λόγια:

  • όταν γυρίζουμε το potentiometer, αλλάζει η τιμή που “βλέπει” το Arduino
  • αυτή η τιμή θα παριστάνει την υγρασία του χώματος

 

  • μικρή τιμή = στεγνό χώμα
  • μεγάλη τιμή = υγρό χώμα

Άρα το potentiometer λειτουργεί σαν ένα κουμπί ρύθμισης που μιμείται τον αισθητήρα.

 

Βήμα 4: Συνδέουμε το potentiometer στο Arduino

Τι κάνουμε

Το potentiometer έχει 3 ποδαράκια.

Συνδέουμε:

  • το ένα εξωτερικό ποδαράκι στο 5V
  • το άλλο εξωτερικό ποδαράκι στο GND
  • το μεσαίο ποδαράκι στο A0

Γιατί το κάνουμε

Αυτή η σύνδεση είναι απαραίτητη για να μπορεί το potentiometer να δίνει μια μεταβαλλόμενη τάση στο Arduino.

Τι σημαίνει αυτό πρακτικά

  • Το 5V δίνει ρεύμα/τάση στο εξάρτημα
  • Το GND είναι η γείωση, δηλαδή το σημείο αναφοράς του κυκλώματος
  • Το μεσαίο ποδαράκι στέλνει στο Arduino την τιμή που προκύπτει από τη θέση του potentiometer

Το A0 είναι αναλογική είσοδος.
Αυτό σημαίνει ότι δεν διαβάζει μόνο δύο καταστάσεις, όπως ναι/όχι ή 0/1, αλλά πολλές ενδιάμεσες τιμές.

Το Arduino με την εντολή analogRead(A0) θα διαβάζει μια τιμή από:

  • 0 έως 1023

Βλέπουμε τη διαφορά ανάμεσα σε:

  • ψηφιακή τιμή: μόνο 0 ή 1
  • αναλογική τιμή: πολλές διαφορετικές τιμές

 

Βήμα 5: Προσθέτουμε το LED

Τι κάνουμε

Βάζουμε ένα LED στο κύκλωμα.

Γιατί το κάνουμε

Το LED θα είναι η οπτική ένδειξη του συστήματος.

Δηλαδή:

  • αν το χώμα είναι στεγνό, το LED θα ανάβει
  • αν το χώμα είναι αρκετά υγρό, το LED θα σβήνει

Δεν μένουμε μόνο σε αριθμούς στην οθόνη, αλλά έχουμε και ένα φανερό αποτέλεσμα.

 

Βήμα 6: Προσθέτουμε αντίσταση στο LED

Τι κάνουμε

Συνδέουμε:

  • το μακρύ ποδαράκι του LED στο pin 7 του Arduino
  • το κοντό ποδαράκι του LED σε αντίσταση 220Ω
  • το άλλο άκρο της αντίστασης στο GND

Γιατί το κάνουμε

Η αντίσταση προστατεύει το LED από υπερβολικό ρεύμα.

Αν δεν βάζαμε αντίσταση:

  • σε πραγματικό κύκλωμα το LED θα μπορούσε να καταστραφεί

Άρα η αντίσταση δεν είναι διακοσμητική. Είναι στοιχείο ασφαλούς και σωστής σύνδεσης.

Γιατί το pin 7;

Διαλέγουμε ένα ψηφιακό pin, π.χ. το 7, γιατί το LED θα λειτουργεί με απλή εντολή:

  • ON
  • OFF

Δεν χρειαζόμαστε αναλογική έξοδο εδώ. Μας αρκεί μια ψηφιακή έξοδος.

 

Βήμα 7: Ανοίγουμε τον χώρο προγραμματισμού

Τι κάνουμε

Πατάμε Code και επιλέγουμε να γράψουμε τον κώδικα.

Γιατί το κάνουμε

Μέχρι τώρα έχουμε φτιάξει μόνο το υλικό μέρος του συστήματος, δηλαδή το κύκλωμα.
Το Arduino όμως χρειάζεται και οδηγίες για να ξέρει τι να κάνει.

Ο κώδικας είναι το μέρος όπου του λέμε:

  1. από πού θα πάρει την πληροφορία
  2. πώς θα την ελέγξει
  3. πότε θα ανάψει το LED

Εδώ είναι καλό να εξηγήσουμε ότι:

  • το κύκλωμα είναι το “σώμα”
  • το πρόγραμμα είναι οι “οδηγίες”

 

Βήμα 8: Γράφουμε τον κώδικα

Κώδικας σε C++

 
int sensorPin = A0;
int ledPin = 7;
int value = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  value = analogRead(sensorPin);

  Serial.println(value);

  if (value < 400) {
     digitalWrite(ledPin, HIGH);
  } else {
     digitalWrite(ledPin, LOW);
  }

  delay(500);
}

 

Βήμα 9: Εξήγηση του κώδικα γραμμή-γραμμή

int sensorPin = A0;

Τι κάνει

Λέμε ότι ο αισθητήρας είναι συνδεδεμένος στο pin A0.

Γιατί το κάνουμε

Για να ξέρει το πρόγραμμα από ποιο σημείο θα διαβάζει την τιμή της “υγρασίας”.


int ledPin = 7;

Τι κάνει

Λέμε ότι το LED είναι συνδεδεμένο στο pin 7.

Γιατί το κάνουμε

Για να ξέρει το Arduino ποιο pin θα ελέγξει για να ανάψει ή να σβήσει το LED.


int value = 0;

Τι κάνει

Δημιουργούμε μια μεταβλητή που θα αποθηκεύει την τιμή του αισθητήρα.

Γιατί το κάνουμε

Χρειαζόμαστε ένα “κουτάκι μνήμης” όπου θα μπαίνει κάθε φορά η τιμή που διαβάζουμε από το A0.


void setup()

Τι κάνει

Το setup() εκτελείται μία μόνο φορά, όταν ξεκινά το πρόγραμμα.

Γιατί το κάνουμε

Εδώ βάζουμε τις αρχικές ρυθμίσεις του Arduino.


pinMode(ledPin, OUTPUT);

Τι κάνει

Ορίζουμε ότι το pin του LED είναι έξοδος.

Γιατί το κάνουμε

Το Arduino πρέπει να ξέρει ότι από αυτό το pin θα στέλνει εντολές και όχι θα διαβάζει δεδομένα.

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


Serial.begin(9600);

Τι κάνει

Ενεργοποιεί τη σειριακή επικοινωνία.

Γιατί το κάνουμε

Για να μπορούμε να βλέπουμε στην Serial Monitor τις τιμές που διαβάζει ο αισθητήρας.

Αυτό είναι εξαιρετικά χρήσιμο για τους μαθητές γιατί:

  • βλέπουν πραγματικούς αριθμούς
  • καταλαβαίνουν τι “σκέφτεται” το Arduino
  • συνδέουν τη θεωρία με την πράξη

void loop()

Τι κάνει

Το loop() επαναλαμβάνεται συνέχεια.

Γιατί το κάνουμε

Ο αισθητήρας πρέπει να ελέγχεται συνεχώς.
Το Arduino δεν αρκεί να μετρήσει μία φορά την υγρασία. Πρέπει να την ελέγχει ξανά και ξανά.


value = analogRead(sensorPin);

Τι κάνει

Διαβάζει την τιμή από το potentiometer.

Γιατί το κάνουμε

Αυτό είναι το βασικό σημείο όπου το Arduino παίρνει την πληροφορία του αισθητήρα.

Η analogRead() χρησιμοποιείται επειδή:

  • το σήμα δεν είναι μόνο ON/OFF
  • παίρνουμε πολλές τιμές από 0 έως 1023

Έτσι μπορούμε να μιλάμε για “λίγο στεγνό”, “πολύ στεγνό”, “υγρό” κτλ.


Serial.println(value);

Τι κάνει

Εμφανίζει την τιμή στην οθόνη της σειριακής παρακολούθησης.

Γιατί το κάνουμε

Για να βλέπουν οι μαθητές τι ακριβώς μετρά το Arduino κάθε στιγμή.

Αυτό βοηθά πολύ στην κατανόηση:

  • γυρίζω το potentiometer
  • αλλάζει ο αριθμός
  • το Arduino παίρνει άλλη απόφαση

Άρα οι μαθητές βλέπουν σχέση αισθητήρας → τιμή → απόφαση.


if (value < 400)

Τι κάνει

Ελέγχει αν η τιμή είναι μικρότερη από 400.

Γιατί το κάνουμε

Πρέπει να βάλουμε ένα όριο για να αποφασίσουμε πότε θεωρούμε ότι το χώμα είναι στεγνό.

Το 400 εδώ είναι μια δοκιμαστική τιμή-όριο.
Δεν είναι “μαγικός αριθμός”. Είναι η τιμή που εμείς διαλέγουμε για να ξεχωρίσουμε:

  • στεγνό
  • υγρό

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


digitalWrite(ledPin, HIGH);

Τι κάνει

Ανάβει το LED.

Γιατί το κάνουμε

Αν η τιμή είναι μικρή, έχουμε αποφασίσει ότι το χώμα είναι στεγνό.
Άρα θέλουμε μια ειδοποίηση. Το LED γίνεται αυτή η ειδοποίηση.


digitalWrite(ledPin, LOW);

Τι κάνει

Σβήνει το LED.

Γιατί το κάνουμε

Όταν το χώμα δεν είναι στεγνό, δεν υπάρχει λόγος για προειδοποίηση.


delay(500);

Τι κάνει

Περιμένει μισό δευτερόλεπτο πριν ξανατρέξει ο έλεγχος.

Γιατί το κάνουμε

Αυτό το βάζουμε για να:

  • μην τρέχει υπερβολικά γρήγορα το πρόγραμμα
  • προλαβαίνουμε να βλέπουμε τις αλλαγές
  • μην γεμίζει υπερβολικά γρήγορα η Serial Monitor

Eίναι χρήσιμο γιατί κάνει τη λειτουργία πιο ορατή και πιο ήρεμη.


Βήμα 10: Ξεκινάμε την προσομοίωση

Τι κάνουμε

Πατάμε Start Simulation.

Γιατί το κάνουμε

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

Εδώβλέπουμε αν:

  • οι συνδέσεις είναι σωστές
  • ο κώδικας είναι σωστός
  • το Arduino αντιδρά όπως περιμένουμε

 

Βήμα 11: Γυρίζουμε το potentiometer

Τι κάνουμε

Με το ποντίκι περιστρέφουμε το potentiometer.

Γιατί το κάνουμε

Έτσι αλλάζουμε την τιμή της “υγρασίας”.

Το γύρισμα του potentiometer παριστάνει την αλλαγή της κατάστασης του χώματος:

  • προς τη μία πλευρά: πιο στεγνό
  • προς την άλλη πλευρά: πιο υγρό

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

 

Βήμα 12: Παρατηρούμε τι συμβαίνει

Τι κάνουμε

Παρατηρούμε:

  • την τιμή στη Serial Monitor
  • αν το LED ανάβει ή σβήνει

Γιατί το κάνουμε

Συνδέουμε:

  1. την είσοδο
  2. την επεξεργασία
  3. την έξοδο

Δηλαδή:

  • αλλάζει η τιμή του αισθητήρα
  • το Arduino την ελέγχει
  • το LED αντιδρά

Αυτός είναι ο πυρήνας όλων των αυτοματισμών.

 

 

Ερωτήσεις και απαντήσεις

❓ Ερώτηση 1

«Γιατί το potentiometer το συνδέσαμε στο A0 και όχι στο pin 7;»

✔ Απάντηση

Το potentiometer το συνδέσαμε στο A0 γιατί:

  • είναι αναλογική είσοδος (analog input)
  • μπορεί να διαβάσει πολλές διαφορετικές τιμές (0–1023)

Το pin 7 είναι:

  • ψηφιακό pin (digital)
  • μπορεί να διαβάσει μόνο:
    • 0 (LOW)
    • 1 (HIGH)

🎯 Συμπέρασμα για μαθητές

👉 Ο αισθητήρας δίνει συνεχείς τιμές, όχι απλά ON/OFF
👉 Άρα χρειάζεται analog pin


❓ Ερώτηση 2

«Τι θα αλλάξει αν βάλουμε όριο 600 αντί για 400;»

✔ Απάντηση

Αν αλλάξουμε τον κώδικα:

 
if (value < 600)
 

τότε:

  • Το LED θα ανάβει πιο εύκολα
  • Δηλαδή ακόμα και όταν το χώμα δεν είναι πολύ στεγνό

🎯 Τι σημαίνει πρακτικά

  • Με όριο 400 → πιο αυστηρό (ανάβει μόνο όταν είναι πολύ στεγνό)
  • Με όριο 600 → πιο ευαίσθητο (ανάβει νωρίτερα)

🎯 Συμπέρασμα

👉 Το όριο καθορίζει πότε παίρνει απόφαση το σύστημα
👉 Είναι κάτι που εμείς επιλέγουμε (δεν είναι “σωστό/λάθος”)

 

 

Τι είναι το GND (όχι GRD)

👉 Ο σωστός όρος είναι GND = Ground (Γείωση)


🔌 Απλή εξήγηση

Το GND είναι:
👉 το σημείο όπου “επιστρέφει” το ρεύμα
👉 το “0” του κυκλώματος

Μπορούμε να το πούμε έτσι:

«Το GND είναι ο δρόμος επιστροφής του ρεύματος.»


🔄 Πώς ρέει το ρεύμα

Για να λειτουργήσει ένα κύκλωμα πρέπει να υπάρχει κλειστό κύκλωμα:

Διαδρομή:

 
5V → εξάρτημα → GND
 

Αν δεν υπάρχει GND:
❌ το ρεύμα δεν μπορεί να επιστρέψει
❌ το κύκλωμα δεν δουλεύει

«Για να δουλέψει ένα κύκλωμα, το ρεύμα πρέπει να κάνει κύκλο: να φύγει και να επιστρέψει.»


💡 Παράδειγμα με LED

Σωστή σύνδεση:

 
Pin 7 → LED → αντίσταση → GND
 

Τι συμβαίνει:

  1. Το Arduino δίνει ρεύμα από το pin
  2. Το ρεύμα περνά από το LED
  3. Επιστρέφει στο GND

👉 Έτσι το LED ανάβει


❌ Αν δεν βάλουμε GND

  • το κύκλωμα είναι “ανοιχτό”
  • το ρεύμα δεν κυκλοφορεί
  • τίποτα δεν λειτουργεί

🔋 Αναλογία με κύκλωμα νερού

👉 Σκέψου το σαν κύκλωμα νερού:

  • 5V = αντλία (στέλνει νερό)
  • καλώδια = σωλήνες
  • GND = επιστροφή νερού

Αν δεν υπάρχει επιστροφή:
👉 το νερό δεν κυκλοφορεί