Measuring distance with sound

Measuring distances from our robot to other objects, is one of the most common data we want to obtain. For example, if we are building an autonomous vehicle, we want to check it’s distance from obstacles to help it make the right decision about it’s course. There are also many more examples of robots that we want them to activate mechanisms when something or someone gets close to them.

One of the simplest, cheapest and most accurate ways to measure distances, is by using ultrasonic sensors. Their working principle is based on the fact that sound is reflected upon most objects and materials. These sensors have a transmitter that sends a short ultrasonic burst and a receiver that senses the ultrasound upon it’s return. Knowing the speed of the sound in the air (approximately 343 m/sec), we can calculate the distance it traveled, if we measure the time passed for the ultrasound to return to the sensor.

Various ultrasonic sensors – 1: Sensor suitable for Arduino and Raspberry pi, 2: Sensor for MakeBlock, 3: Sensor for Lego EV3, 4: Sensor with transmitter and receiver in the same housing.

Working principle.

All ultrasonic sensors operate in a similar way. They send a short (a few microseconds long) ultrasonic burst from the transmitter and measure the time it takes for the sound to return to the receiver.

The ultrasound travels from the transmitter and when an obstacle comes in its way it bounces back and returns to the receiver.

Let’s say that it took 10 milliseconds for the ultrasound to return to the sensor. That means:

  • that the time in seconds is 0,01.
  • Knowing that sound travels in the air 343 meters for every second, we can calculate the distance in meters by simply multiplying seconds by 343. in our case 0,01 x 343 = 3,43 meters.
  • This is the distance that the ultrasound traveled to the obstacle and back to the sensor, so the obstacle is  3,43/2 = 1,715 meters away from the sensor.

Pros and Cons.

The main advantages of using ultrasonic sensors to measure distance are:

  • they are cheap and there is a plethora of choices in the market,
  • they are not affected by the color or the transparency of obstacles,
  • they are not affected by lighting conditions,
  • they are pretty accurate on their measurements.

Their drawbacks are:

  • They don’t work well enough on obstacles with small surfaces.
An object with a small surface facing the sensor is possible not to reflect the ultrasound well.
  • The angle of the surface of the obstacle is crucial for the sensor.
When the obstacle is facing the sound waves with an angle far from perpendicular the ultrasound can bounce off away from the sensor.
  • Obstacles made from sound absorbing materials (for example sponges) are hard to be traced by the sensor, since the absorb sound.

Choosing a sensor.

There is a wide variety of ultrasonic sensors on the market, for most robotics platforms. For those who prefer working with the Lego platform, EV3 and the older NXT, include ultrasonic sensors. Some examples of using them in the classroom are:

If you are an Arduino or Raspberry pi fan and want to dive more into how these sensors work, there are several options that you can find online. The most common and affordable choice is the HC-SR04, which costs less than a euro on ebay (August 2018). For more details and comparative tests with various ultrasonic sensors, i advise you to watch two detailed videos (here and here) from Andreas Spiess channel on Youtube.

The HC-SR04 ultrasonic sensor. The transmitter is on the left and the receiver on the right.

Connecting the sensor to Arduino and programming.

The HC-SR04 sensor has 4 pins:

  • VCC, that is connected to 5V,
  • GND, that is connected to Ground,
  • TRIG (Trigger), that is connected to the transmitter to send the ultrasonic burst,
  • ECHO, that is connected to the receiver.

There are two ways to connect the sensor to Arduino:

  • Connect TRIG and ECHO to different digital pins and make all the hard work and calculations in our program,
  • connect TRIG and ECHO to the same digital pin and use a library to make all the calculations.

I am going to start from the second way (easy) and then stay longer on the first, which gives the programmer more control and as an educator i find it more interesting.

One pin connection and the NewPing library.

The easy way. Connect TRIG and ECHO to the same digital pin, in this example pin 4.

For my program to work i will need to install the NewPing library to my Arduino IDE, using the library manager.

Just installed the NewPing library to Arduino IDE.

Now i can write a simple program to print the distance obtained by the sensor to the Serial monitor.

I uploaded the program to the board and started testing.

Test 1: Successful obstacle recognition at 25cm.
Test 2: Successful obstacle recognition at 15cm.
Test 3: Successful obstacle recognition at 2cm.
Test 4: Sensor fails to recognize object with small surface facing it at 10 cm and returns the distance from the wall.
Test 5: Sensor fails to recognize obstacle that is not faced perpendicular to sound waves and returns the distance from the wall.
Test 6: Sensor fails to recognize sponge at 25 cm. it returns a zero value, since the ultrasound is absorbed by the obstacle and nothing returns back.
Test 7: Even at 5 cm the sponge absorbs the ultrasound.

Two pin connection – Calculating distance from time.

As an educator, i find it more interesting to dig in the working principal of things, even if that means more work for my students. In order to do so in this example we will have to forget the luxury of the NewPing library and make all the calculations ourselves. First of all i changed the schematic by connecting the TRIG and ECHO to different digital pins.

Connecting TRIG to digital pin 4 and ECHO to digital pin 5.

Before i can start coding there are some things i need to clarify:

  • TRIG (Trigger) has a default LOW state and when we change it to HIGH it starts sending ultrasonic burst.
  • When ECHO receives the bouncing sound it returns a HIGH pulse to the Arduino.
  • I will use the pusleIn function to measure the time the ECHO pin stays in HIGH state. This functions returns time in microseconds.

Now i can start my algorithm:

  1. Set TRIG pin to HIGH.
  2. Wait for a short period of time (10 microseconds).
  3. Set TRIG pin to LOW. Now i have sent a short ultrasonic burst.
  4. Get the time from ECHO pin in microseconds.
  5. Convert microseconds to seconds (division by 1.000.000).
  6. Calculate the distance the sound traveled in meters. Multiply seconds by 343 m/sec.
  7. Now i have the distance i meters. I will convert it to centimeters by multiplying by 100.
  8. This is the distance the sound traveled to the obstacle and back. So the distance of the obstacle from the sensor is half of that. So i divide distance by 2.

I upload the program to my board and the sensor works as with the NewPing library, returning decimal values since all my variables are float.

Digging even further – Finding the actual speed of sound based on temperature and humidity.

So far i used the speed of sound to calculate distance from time, assuming that this is a constant value of 343 m/sec. That is not actually true. Speed of sound depends on the “density” of the mean it travels through. In solid materials the speed of sound is greater than liquids and in liquids sound travels faster than through gases.

The ultrasonic sensor sends sound through air which is a gas. In gases the speed of sound is affected mostly by the gas temperature, less by the gas humidity and even less by the gas pressure. For example in air with pressure of 1 Atm and

  • temperature of 0 degrees Celsius (32 F) and 50% humidity, the speed of sound is 331.61 m/sec,
  • temperature of 20 degrees Celsius (68 F) and 50% humidity, the speed of sound is 343.99 m/sec,
  • temperature of 30 degrees Celsius (86 F) and 50% humidity, the speed of sounds is 350,31 m/sec και
  • temperature of 30 degrees Celsius (86 F) and 90% humidity, the speed of sound is 351,24 m/sec.

There are many online calculators for the speed of sound. I used the one on to get the above results.

Since i had a cheap temperature – humidity sensor lying around (DHT11 Temperature and Humidity Sensor), i decided to improve the calculations in my code, using these two values to estimate a more accurate speed of sound value.

First of all i embedded the new sensor in my schematic. Typical DHT11 sensors have either 3 pins (5V, GND and Signal) or 4 pins (5V, GND, Signal and NULL). The connections  are as follows:

  • 5V DHT11 –> 5V Arduino
  • GND DHT11 –> GND Arduino
  • SIGNAL DHT11 –> A0 pin Arduino
Adding the DHT11 to the schematic.

The next step was to add the measurement of temperature and humidity in my code using the dht.h library, which you can download from here. I followed the step by step tutorial from Brainy Bits and now the only thing i needed was to calculate the actual speed of sound.

After a long search, i found that the formula needed was originally published in 1993 by Owen Cramer in his work “The variation of the specific heat ratio and the speed of sound in air with temperature, pressure, humidity, and CO2 concentration.”. I was also happy to find a JAVA implementation by a  research team from the Univeristy of Sao Paolo Brazil. With a few tweaks to adjust it to my code the full program is as follows:

I uploaded the program to my board and starting testing. I was happy to have more accurate measurements, even if that does not play a significant role in small distances of few cm.

Every 2 seconds the program calculates the obstacle distance using temperature and humidity to calculate an accurate speed of sound.

Using the ultrasonic sensor in class.

The use of ultrasonic sensors in educational robotics is very common and there are hundreds of examples over the internet, either using the Lego platform or Arduino and Raspberry pi. Recently tinkercad added a new command block for getting the distance from an ultrasonic sensor.

Our program in Tinkercad with just 3 blocks.

I find particularly interesting, for educational purposes, the analytical way of calculating the distance, from the time the sound takes to travel to the obstacle and back.

In a previous project (smart trash can), that we implemented with my students from the evening club Young Hackers, we spent a lot of time to fully understand the algorithm that calculates distance from time using an analytical worksheet (in greek). We implemented the algorithm using a block style language (Ardublockly) that helped students a lot to understand every step of the way.

Using Ardublockly to implement the Algorithm.

Arduino και Bluetooth με το HC-05

Η επικοινωνία του Arduino με άλλες συσκευές όπως υπολογιστές, smartphones, tablets καθώς και άλλα Arduino είναι ιδιαίτερα χρήσιμη και μας δίνει δυνατότητες να κατασκευάσουμε πολύ ενδιαφέροντα project.

Με ένα απλό καλώδιο USB έχουμε έτσι και αλλιώς την επικοινωνία του Arduino με τον υπολογιστή, όχι μόνο για να το τροφοδοτήσουμε με ρεύμα και για να ανεβάσουμε το πρόγραμμα μας, αλλά και για να ανταλλάσσουμε δεδομένα μέσω σειριακής επικοινωνίας. Μπορούμε να χρησιμοποιήσουμε την σειριακή οθόνη (Serial Monitor) που περιλαμβάνεται στο Arduino IDE ή να γράψουμε τα δικά μας προγράμματα τα οποία θα στέλνουν και θα δέχονται δεδομένα από την σειριακή θύρα.

Την σειριακή επικοινωνία μπορούμε να την αξιοποιήσουμε και σε ασύρματες συνδέσεις μέσω Bluetooth. Έτσι μπορούμε να φτιάξουμε οχήματα που ελέγχονται από το κινητό μας τηλέφωνο, φώτα που θα ανάβουν από το tablet μας, αισθητήρες που θα στέλνουν τα δεδομένα τους στο laptop μας κ.ο.κ.

Για να το πετύχουμε αυτό θα χρειαστεί να αγοράσουμε κάποια μονάδα Bluetooth που να συνδέεται στο Arduino. Η πιο δημοφιλής είναι το HC-05 Wireless Bluetooth Transceiver. Η χαμηλή του τιμή (περίπου 7 ευρώ από ελληνικά καταστήματα και 2-3 ευρώ από το eBay), η ευκολία χρήσης και η δυνατότητα του να λειτουργεί ως master και slave, σε αντίθεση με το παρόμοιο HC-06 που λειτουργεί μόνο ως slave, το φέρνουν πρώτο στις προτιμήσεις των αγοραστών. Αυτό σημαίνει πως υπάρχει και αρκετή υποστήριξη στο διαδίκτυο από tutorials και βοήθεια σε φόρουμ συζητήσεων. Έναν βασικό οδηγός σύγκρισης των διαφόρων μονάδων Bluetooth για το Arduino στα αγγλικά μπορείτε να βρείτε εδώ ενώ ένα πολύ πιο αναλυτικό εδώ.

Οι δυο πιο δημοφιλείς μονάδες Bluetooth της αγοράς. Το HC-05 το ξεχωρίζουμε από το HC-06 από τα 2 παραπάνω pins που διαθέτει.

Ανατομία του HC-05

Η μονάδα HC-05 με το Breakout board zs-040

Η μονάδα HC-05 έχει 6 pins:

  • VCC (2), στο οποίο συνδέουμε την τροφοδοσία από το Arduino.
  • GND (3), στο οποίο συνδέουμε την γείωση.
  • RX (5), στο οποίο έρχονται τα δεδομένα από το Arduino.
  • ΤΧ (4), από το οποίο αποστέλλονται τα δεδομένα που λαμβάνει η μονάδα Bluetooth προς το Arduino.
  • STATE (6), το οποίο είναι απλά συνδεδεμένο με το LED της μονάδας Bluetooth και όταν αυτό ανάβει βγάζει έξοδο HIGH αλλιώς βγάζει έξοδο LOW.
  • ENABLED ή KEY (1) το οποίο μας επιτρέπει να αλλάζουμε την κατάσταση της μονάδας μεταξύ δύο:
    • Κατάσταση δεδομένων, όπου το HC-05 λειτουργεί κανονικά για να μεταφέρει δεδομένα.
    • Κατάσταση ρυθμίσεων, όπου μπορούμε να δίνουμε εντολές στο HC-05 για να αλλάζουμε τις ρυθμίσεις του.

Επίσης διαθέτει μια ένδειξη LED (8) η οποία ανάλογα με τον ρυθμό που αναβοσβήνει μας πληροφορεί για την κατάσταση της μονάδας, καθώς και ένα πλήκτρο (7) το οποίο μας επιτρέπει να αλλάζουμε την κατάσταση της μονάδας.

Σύνδεση με Arduino

Για να συνδεθεί το HC-05 με το Arduino χρειάζεται να στέλνει και να λαμβάνει δεδομένα αξιοποιώντας τα pins 0 και 1 του Arduino τα οποία έχουν την ειδική σήμανση RX και TX αντίστοιχα. Το pin 0 (RX) του Arduino δέχεται (Receive) δεδομένα από την μονάδα Bluetooth, ενώ το pin 1 (TX) του Arduino στέλνει (Transmit) δεδομένα στην μονάδα Bluetooth. Η σύνδεση λοιπόν που πρέπει να κάνουμε είναι η εξής:

  • HC-05 VCC –> Arduino 5V
  • HC-05 GND –> Arduino GND
  • HC-05 TX –> Arduino RX (pin 0)
  • HC-05 RX –> Arduino TX (pin 1)
Η βασική σύνδεση της μονάδας HC-05 με το Arduino, η οποία δεν είναι απόλυτα ασφαλής.

Ένα θέμα που προκύπτει εδώ είναι ότι η μονάδα HC-05 λειτουργεί στα 3.3V σε αντίθεση με το Arduino που λειτουργεί στα 5V. Ευτυχώς το HC-05 έχει ρυθμιστή τάσης στο VCC ο οποίος δέχεται μέχρι και 6V τα οποία μετατρέπει σε 3.3V και μπορούμε άφοβα εκεί να συνδέσουμε τα 5V του Arduino. Δεν ισχύει όμως το ίδιο για τα RX και ΤΧ pins, τα οποία λειτουργούν αποκλειστικά με 3,3V.

  • Όσον αφορά την σύνδεση του TX pin του HC-05 με το RX pin του Arduino δεν υπάρχει πρόβλημα αφού εκεί το ρεύμα ταξιδεύει από το HC-05 προς το Arduino το οποίο μπορεί να διαβάσει τα 3.3V που στέλνονται χωρίς κίνδυνο.
  • Το RX pin όμως του HC-05 ενώ απαιτεί 3.3V ως είσοδο δέχεται 5V από το Arduino και μπορεί να παρουσιάσει πρόβλημα αν το έχουμε απευθείας συνδεδεμένο για πολύ ώρα.

Για να λυθεί αυτό το πρόβλημα θα πρέπει να μετατρέπουμε τα 5V που έχει η έξοδος του ΤX pin του Arduino σε 3,3V πριν φτάσουν στο RX pin του Bluetooth δημιουργώντας ένα απλό  κύκλωμα διαιρέτη τάσης με δυο αντιστάσεις, όπου η μία είναι διπλάσια της άλλης, όπως φαίνεται στο παρακάτω σχέδιο.

Ο σωστός τρόπος σύνδεσης της μονάδας HC-05 στο Arduino ώστε το RX του HC-05 να δέχεται 3.3V με την χρήση δυο αντιστάσεων.

Αν έχουμε κάνει σωστά την σύνδεση μας, με το που δώσουμε ρεύμα στο Arduino θα δούμε το κόκκινο LED στην μονάδα Bluetooth να ανάβει και να συνεχίσει να αναβοσβήνει γρήγορα (αρκετές φορές το δευτερόλεπτο). Η συσκευή μπορεί πλέον να εντοπιστεί από άλλες συσκευές όπως το κινητό μας τηλέφωνο με το όνομα HC-05 και κωδικό σύζευξης 1234. Μόλις η σύζευξη επιτευχθεί τότε το LED αρχίζει να αναβοσβήνει πιο αργά.

Μεταφέροντας το πρόγραμμα στο Arduino

Μπορούμε πλέον να γράφουμε προγράμματα στο Arduino τα οποία να στέλνουν και να δέχονται δεδομένα μέσω Bluetooth χρησιμοποιώντας τις εντολές της σειριακής επικοινωνίας που περιλαμβάνονται στην βιβλιοθήκη Serial. Οι ίδιες εντολές χρησιμοποιούνται και για την επικοινωνία μέσω USB (και αυτή σειριακή είναι).

Όταν θέλουμε να ανεβάσουμε το πρόγραμμα στο Arduino από τον υπολογιστή μας χρησιμοποιώντας την θύρα USB θα πρέπει να προσέξουμε να απενεργοποιήσουμε προσωρινά την μονάδα Bluetooth (απλά αποσυνδέστε το καλώδιο στο pin VCC, ή τα καλώδια στο RX και TX pins) για να μπορέσει να ανέβει το πρόγραμμα μας. Αν ξεχάσουμε να αποσυνδέσουμε το Bluetooth, το Arduino IDE θα μας ειδοποιήσει ότι η σειριακή θύρα του Arduino είναι απασχολημένη (αφού την έχει δεσμεύσει το Bluetooth) και δεν θα ανεβάσει το πρόγραμμα. Αφού ανεβάσουμε το πρόγραμμα μας στο Arduino μπορούμε να συνδέσουμε και πάλι την μονάδα HC-05 ώστε να λειτουργήσει κανονικά.

Αν ξεχάσουμε να αποσυνδέσουμε το HC-05 από το Arduino κατά την φάση ανεβάσματος που προγράμματος μας, θα μας βγάλει μηνύματα λάθους αφού η θύρα USB χρησιμοποιεί τα RX και TX pins που είναι κατειλημμένα.

Αλλάζοντας τις ρυθμίσεις

Όλες οι μονάδες HC-05 όταν ενεργοποιούνται έχουν το ίδιο όνομα (HC-05) και τον ίδιο κωδικό σύζευξης (1234). Αν θέλουμε να αλλάξουμε αυτές και άλλες ρυθμίσεις, όπως η ταχύτητα σύνδεσης, μπορούμε να το κάνουμε χρησιμοποιώντας εντολές AT (AT commands).

Για να στείλουμε εντολές AT στην μονάδα Bluetooth μπορούμε να χρησιμοποιήσουμε την σειριακή οθόνη που είναι ενσωματωμένη στο Arduino IDE και να «πούμε» στο Arduino να μεταφέρει τις εντολές που του στέλνουμε σειριακά μέσω USB, στην μονάδα HC-05 με ένα πρόγραμμα.

Για να το πετύχουμε αυτό θα πρέπει αρχικά να αποδεσμεύσουμε τα pin 0 και 1 του Arduino από το HC-05, αφού θα απασχολούνται από το Serial monitor. Η λύση είναι να χρησιμοποιήσουμε δυο άλλα Digital pins του Arduino μαζί με την βιβλιοθήκη Software Serial μετατρέποντας τα προσωρινά σε Software RX και TX pins. Άρα οι συνδέσεις μας τώρα θα είναι ως εξής:

  • HC-05 VCC –> Arduino 5V
  • HC-05 GND –> Arduino GND
  • HC-05 TX –> Arduino Digital pin 8
  • HC-05 RX –> Arduino Digital pin 9 (με την χρήση διαιρέτη τάσης)
Αντικατάσταση των pins 0 (RX) και 1 (TX) του Arduino με δυο άλλα Digital pins αξιοποιώντας την βιβλιοθήκη Software Serial

Τώρα χρειάζεται να φορτώσουμε στο Arduino ένα πρόγραμμα το οποίο θα δέχεται σειριακά από την θύρα USB τις εντολές AT και θα τις μεταφέρει στο HC-05 από τα δυο pin που έχουμε ορίσει. Έτσι ότι στέλνουμε από το Serial Monitor θα μεταφέρεται στο Arduino και από εκεί στο Bluetooth. Χρησιμοποιώ το πρόγραμμα που έχει γράψει στο πολύ ωραίο άρθρο του για το HC-05 ο Martyn Currey, το οποίο φαίνεται παρακάτω.

Το μόνο που μένει πλέον, αφού φορτώσουμε το πρόγραμμα στο Arduino, είναι να αλλάξουμε την κατάσταση του HC-05 ώστε από την λειτουργία δεδομένων να περάσει στην λειτουργία ρυθμίσεων.

Ένας τρόπος είναι να χρησιμοποιήσουμε το push button (7) που υπάρχει πάνω στο HC-05. Πριν δώσουμε ρεύμα στην μονάδα το κρατάμε πατημένο και μόλις το HC-05 πάρει ρεύμα και ανάψει το led αφήνουμε το push button. Τώρα παρατηρούμε ότι το led αναβοσβήνει αργά (όπως όταν βρίσκεται σε σύζευξη) και μπορούμε να του στέλνουμε AT εντολές. Όχι όμως όλες! Για αυτές που χρειαζόμαστε (αλλαγή ονόματος και αλλαγή κωδικού) θα πρέπει πάλι να κρατάμε πατημένο το push button κάθε φορά που στέλνουμε την εντολή!

Αντί να πατάμε το push button μπορούμε να αξιοποιήσουμε το pin ENABLED ή KEY (1). Όταν είναι LOW (εξ’ορισμού) τότε η μονάδα είναι στην κατάσταση DATA και λειτουργεί κανονικά (δέχεται και μεταδίδει δεδομένα). Όταν είναι HIGH τότε το HC-05 είναι στην κατάσταση Full AT Command και μπορεί να δέχεται όλες τις εντολές για να την ρυθμίσουμε (αλλαγή ονόματος, κωδικού κλπ). Προσοχή όμως! Το συγκεκριμένο pin δεν διαθέτει ρυθμιστή τάσης και δεν μπορούμε να του στείλουμε 5V αλλά 3.3V. Για αυτό θα συνδέσουμε ένα καλώδιο από τα 3.3V του Arduino στο ENABLED του HC-05, όπως φαίνεται παρακάτω.

Σύνδεση του HC-05 με το Arduino για αλλαγή ρυθμίσεων. Αντί για τα pins 0 και 1 χρησιμοποιούμε δυο άλλα digital pins με την Software Serial ενώ δίνουμε 3.3V και στον pin ENABLED για να αλλάξουμε την κατάσταση του HC-05 σε Full AT COMMAND

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

Ανοίγουμε το Serial Monitor

Μόλις ανοίξουμε την σειριακή οθόνη θα εμφανιστούν αρχικά οι πληροφορίες που έχουμε βάλει στην συνάρτηση setup του προγράμματος. Για να ελέγξουμε αν όλα έχουν συνδεθεί σωστά και μπορεί το HC-05 να δεχτεί εντολές μπορούμε να στείλουμε την εντολή AT, η οποία θα πρέπει να μας επιστρέψει OK.

Αν όλα πάνε καλά η εντολή AT θα μας επιστρέψει ΟΚ

Για να δούμε το όνομα που έχει ήδη η μονάδα HC-05 πληκτρολογούμε την εντολή AT+NAME.

Το όνομα της μονάδας είναι αυτή τη στιγμή HC-05

Για να αλλάξουμε το όνομα γράφουμε την εντολή AT+NAME=Νέο όνομα. Έτσι, αν για παράδειγμα φτιάχνουμε έναν έξυπνο κήπο όπου θα συνδέεται με το κινητό μας μέσω Bluetooth για να στέλνει δεδομένα, μπορούμε να δώσουμε την εντολή AT+NAME=Smart Garden.

Αλλάζουμε το όνομα του HC-05 σε Smart Garden

Για να ελέγξουμε αν όντως έγινε η αλλαγή, μπορούμε να δώσουμε ξανά την εντολή AT+NAME για να δούμε το όνομα της μονάδας.

Δίνοντας την εντολή AT+NAME βλέπουμε πως το όνομα του HC-05 έχει πλέον αλλάξει

Για να αλλάξουμε τον κωδικό της μονάδας όταν γίνεται η σύζευξη με άλλες συσκευές Bluetooth χρησιμοποιούμε την εντολή AT+PSWD=Νέος κωδικός

Δίνοντας την εντολή AT+PSWD βλέπουμε τον τρέχοντα κωδικό της μονάδας
Αλλάζουμε τον κωδικό σε 0000 με την εντολή AT+PSWD=0000

Museums with Makey Makey and 3d printing

This is a project that was planned and implemented in our school (Experimental Elementary School of Florina) in the 2017-2018 school year.

Students created three museums with artifacts printed in the School’s 3D printer. In front of every Artifact there is a DIY touch sensor (two metal pieces) and when someone touches them the museum starts a narrative for the specific artifact along with images and info displayed on the screen.

The main theme of the museums is to present the sculptures, statues and other artifacts that are associated with Ancient Greek Culture and are in museums abroad.

After a short inquiry our students concluded in creating the following three museums :

  • The Louvre Museum
  • The British Museum
  • A World Museum (other artifacts scattered in many museums all over the world)

All the 3d models where downloaded from  thingiverse and my mini factory and where manufactured in our 3d printer using the Repetier software.

Our students searched for available info in wikipedia and recorded them in audio form. They also downloaded photos and created three scratch programs (one for every museum) that included the audio, text and image info.You can download the programs from here: Scratch programs – museums

Creating the museums

Students used wood, plexiglass and other materials to construct the three museums. They glued the Makey Makey boards and wiring under the museums floor and connected them with the DIY touch sensors.

Creating the museums
DIY touch sensors
Wiring and Makey Makey

In the final stage students created a sign with colored lights for each museum.

Museum Sign
Museum Sign

Our students presented their work in various festivals and exhibitions at the end of the school year.

Presenting the museums
Presenting the museums

Ο έξυπνος κήπος

Το τελευταίο project της φετινής χρονιάς (2017-2018) με τα παιδιά του Ομίλου «Μικροί Χάκερ», ήταν ο έξυπνος κήπος. Απαιτητικό και χρονοβόρο έργο το οποίο μας πήρε αρκετές συναντήσεις και μήνες για να το ολοκληρώσουμε.

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

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

Ο έξυπνος κήπος επικοινωνεί με Bluetooth με το κινητό μας τηλέφωνο ή tablet με την βοήθεια εφαρμογής που κατασκευάσαμε και μπορούμε να βλέπουμε τις τιμές των αισθητήρων, καθώς και να αλλάζουμε τα όρια στα οποία ενεργοποιούνται οι αντλίες, τα φώτα και ο ανεμιστήρας.

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

Φύλλο εργασίας – υγρασία εδάφους

Κατασκευάζοντας τους δικούς μας αισθητήρες

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

Φύλλο εργασίας – Δοκιμή αισθητήρα υγρασίας εδάφους

Φύλλο εργασίας – Κατασκευή αισθητήρα υγρασίας εδάφους

Δοκιμάζοντας τους αισθητήρες

Μετά περάσαμε στον αισθητήρα θερμοκρασίας, τον οποίο και πάλι δοκιμάσαμε αξιοποιώντας το παρακάτω φύλλο εργασίας.

Φύλλο εργασίας – Δοκιμή αισθητήρα Θερμοκρασίας

Αφού ολοκληρώσαμε την εργασία με τους αισθητήρες, περάσαμε στα φώτα και τους κινητήρες. Για τον φωτισμό του κήπου αξιοποιήσαμε μια παλιά 12V ταινία led που είχαμε στο εργαστήριο, ενώ για τον αερισμό του κήπου αξιοποιήσαμε έναν από τους πολλούς ανεμιστήρες από παλιά PC που έχουμε στο υπόγειο του σχολείου.

Για τις δυο αντλίες χρησιμοποιήσαμε κινητήρες από CD-ROM από τους ίδιους παλιούς υπολογιστές ενώ εκτυπώσαμε στον 3D Printer του σχολείου διάφορα έτοιμα σχέδια από αντλίες που βρήκαμε στο thingiverse.

αντλίες με παλιούς κινητήρες από CD ROM

Επίσης από το thingiverse βρήκαμε και τα σχέδια για τις γλάστρες τα οποία εκτυπώσαμε και πάλι στον 3Δ εκτυπωτή.

Για να ελέγξουμε τις 2 αντλίες, τον ανεμιστήρα και την ταινία led με το Arduino χρησιμοποιήσαμε και 4 relay στα οποία συνδέσαμε έναν μετασχηματιστή 12 Volt.

Αναλυτικό σχηματικό έξυπνου κήπου

Ο προγραμματισμός της κατασκευής έγινε σε δυο στάδια. Αρχικά ξεκινήσαμε με τον προγραμματισμό του Arduino, χρησιμοποιώντας την πλατφόρμα tinkercad όπως και με τα προηγούμενα έργα μας. Κατορθώσαμε να κάνουμε το μεγαλύτερο μέρος του προγράμματος από εκεί αλλά επειδή δεν υποστηρίζει ακόμα όλες τις εντολές του Arduino και την προσθήκη κάποιων βιβλιοθηκών αναγκαστήκαμε να ολοκληρώσουμε το πρόγραμμα πληκτρολογώντας τον υπόλοιπο κώδικα.

Το δεύτερο μέρος του προγραμματισμού αφορούσε την δημιουργία της εφαρμογής η οποία θα επικοινωνεί με τον έξυπνο κήπο με Bluetooth. Αξιοποιήσαμε την πλατφόρμα AppInventor και κατασκευάσαμε μια εφαρμογή η οποία μπορεί να παίρνει τις τιμές της θερμοκρασίας, της υγρασίας και του φωτισμού από τον κήπο, καθώς και να αλλάζει τα όρια στα οποία ενεργοποιούνται τα φώτα, οι αντλίες και ο ανεμιστήρας. Μπορείτε να κατεβάσετε ελεύθερα τα αρχεία apk και aia της εφαρμογής από εδώ: Προγράμματα

Ο σχεδιασμός της εφαρμογής στο AppInventor
Μέρος από τον κώδικα για την επικοινωνία της εφαρμογής με τον κήπο

Ο έξυπνος κήπος παρουσιάστηκε από τα παιδιά του Ομίλου στις εκδηλώσεις για την Παγκόσμια Ημέρα Περιβάλλοντος που έγιναν στο Νέο Πάρκο της Φλώρινας, καθώς και στην διήμερη έκθεση «Τα παιδιά της πόλης μας δημιουργούν» που συνδιοργάνωσε το σχολείο μας με τον ΦΣΦ Αριστοτέλη.

Παρουσίαση κατασκευής στις εκδηλώσεις για την Παγκόσμια Ημέρα Περιβάλλοντος
Παρουσίαση κατασκυεής στην έκθεση “Οι μαθητές της πόλης μας δημιουργούν”

Rotating solar panel

This is a project my students implemented during the 2017-2018 evening club  Young Hackers. It is a demanding project for elementary school students and it took us many meeting to accomplish. It contains a small 5V solar panel that can rotate in two axis so as to harvest maximum power from the sun. The project is based on the Dual Axis Solar Tracker Project from OpenSourceClassroom.

Students used their tinkercad accounts to design and test the schematics. Besides Arduino we used:

  • Two servo motors
  • For LDR sensors
  • Two potentiometers
  • A push button
  • Two led lights
  • Various resistors

Students worked in groups in a production line style to complete the tasks. (wire soldering, wire insulating, parts screwing etc.).

Production line
During the assembly
Wire insulating

We wanted to implement two modes in the final product.

  • A manual mode – controlled by two pots.
  • An auto mode – controlled with four light sensors.

In order to achieve that we programmed the device to change between modes with the help of a push button. The programming was done in tinkercad.

Students presented their work in various festivals and exhibitions at the end of the school year.

Student exhibition