2. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 2
Περιεχόμενα παρουσίασης
Χρήση των ψηφιακών εισόδων-εξόδων του Arduino
Διαμόρφωση εύρους παλμού (Pulse Width Modulation)
Αναλογικές είσοδοι
Αναλογικές είσοδοι – AnalogRead()
Αναλογικές είσοδοι – Εφαρμογή της AnalogRead()
Αναλογικές είσοδοι – Αισθητήρας θερμοκρασίας
Πρωτόκολλα επικοινωνίας
3. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 3
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
Το Arduino έχει 14 ψηφιακές εισόδους/εξόδους. Αυτές μπορούν να
δώσουν τάση 0V → LOW ή 5V → HIGH
https://makeabilitylab.github.io/physcomp/arduino/led-
blink.html#introducing-digital-output
4. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 4
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
Οι εντολές για την χρήση των ψηφιακών εισόδων/εξόδων:
pinMode(int pin, int mode) διαμορφώνει ένα συγκεκριμένο
ακροδέκτη ως είσοδο (INPUT) ή έξοδο (OUTPUT).
digitalRead(int pin) Διαβάζει την ψηφιακή είσοδο από τον
συγκεκριμένο ακροδέκτη ως HIGH ή LOW.
digitalWrite(int pin, int value) γράφει στον ψηφιακό ακροδέκτη
που ορίσαμε HIGH or LOW.
5. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 5
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}
void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}
6. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 6
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
int Pin = 8; // Initializing Arduino Pin
int Reading;
void setup() {
pinMode(Pin, INPUT); // Declaring Arduino Pin as an Input
}
void loop() {
Reading = digitalRead(Pin); // Reading status of Arduino digital Pin
if(Reading == HIGH)
{
Serial.println("HIGH");
}
if(Reading == LOW)
{
Serial.println("LOW");
}
7. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 7
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
Αν το σήμα σε μία είσοδο είναι 3 Volts<Vi<5 Volts τότε η είσοδος
είναι HIGH ενώ όταν είναι 1,5 Volts<Vi<0 Volts τ’οτε η είσοδος
είναι LOW.
Η αλλαγή από την μία κατάσταση στην άλλη γίνεται ανάμεσα στο
1,5 Volts -3 Volts, σε τάση που είναι διαφορετική σε κάθε είδος
Arduino.
https://forum.arduino.cc/t/digital-pin-high-low-voltages/622707/11
8. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 8
Χρήση των ψηφιακών εισόδων – εξόδων του
Arduino
Σημ. και οι αναλογικές είσοδοι μπορούν να οριστούν ως ψηφιακές
είσοδοι/έξοδοι αν αντί του αριθμού του ακροδέκτη
χρησιμοποιήσουμε Α0, Α1, Α2 ...Α5 (π.χ. digitalWrite(A2, LOW)
)
Οι ακροδέκτες με ~ μπορούν να χρησιμοποιηθούν για την
λειτουργία Pulse Width Modulation (PWM) που προσομοιώνει,
κατά κάποιο τρόπο, τις ψηφιακές εξόδους σαν αναλογικές.
9. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 9
Διαμόρφωση εύρους παλμού (Pulse Width
Modulation)
Οι ψηφιακοί ακροδέκτες μπορούν να βγάζουν μια τάση 5V με
μεταβαλλόμενη διάρκεια. Π.χ. για κύκλο λειτουργίας 50% (duty
cycle 50%) δηλ. για να έχουμε 5V στην μισή διάρκεια της
περιόδου - της διάρκειας του κύκλου - (δηλ. η μέση τάση είναι
2,5V) το σήμα είναι
10. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 10
Διαμόρφωση εύρους παλμού (Pulse Width
Modulation)
Σημ. η διάρκεια του κύκλου – περίοδος (cycle duration) για το
Arduino είναι 0,002s.
Για να πετύχουμε PWM χρησιμοποιούμε την συνάρτηση
analogWrite(pin, value);
Το pin είναι ο αριθμός του ακροδέκτη που θα παραχθεί το σήμα. Το
value καθορίζει τον κύκλο λειτουργίας και προκύπτει από τον
τύπο
https://www.circuitbasics.com/how-to-use-pulse-width-modulation-on-the-arduino/
11. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 11
Διαμόρφωση εύρους παλμού (Pulse Width
Modulation)
https://www.circuitbasi
cs.com/how-to-use-
pulse-width-
modulation-on-the-
arduino/
12. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 12
Διαμόρφωση εύρους παλμού (Pulse Width
Modulation)
int ledPin = 6;
int brightness = 0;
int fadeAmount = 15;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, brightness);
brightness = brightness + fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30);
}
13. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 13
Αναλογικές είσοδοι
Είναι οι ακροδέκτες από Α0-Α5. Συνδέονται με έναν ADC (Analog to
Digital Converter) που μετατρέπει το αναλογικό σήμα από 0-5V σε
διάκριτες τιμές.
Στις αναλογικές εισόδους μπορούμε να βάλουμε μία αναλογική τάση
από 0-5V δηλ. τάση που παίρνει όλες τις πιθανές τιμές από 0-5V.
Αναλογικό σήμα δίνουν αισθητήρες ήχου, φωτός, θερμοκρασίας και
πίεσης.
14. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 14
Αναλογικές είσοδοι - AnalogRead
Είναι οι ακροδέκτες από Α0-Α5. Συνδέονται με έναν ADC (Analog to
Digital Converter) που μετατρέπει το αναλογικό σήμα από 0-5V σε
διάκριτες τιμές.
Στις αναλογικές εισόδους μπορούμε να βάλουμε μία αναλογική τάση
από 0-5V δηλ. τάση που παίρνει όλες τις πιθανές τιμές από 0-5V.
Αν χρησιμοποιήσουμε την συνάρτηση analogRead() και διαβάσουμε με
αυτή την είσοδο, τότε ανάλογα με τα volts στην είσοδο, η συνάρτηση
αποδίδει 2n ακέραιες τιμές όπου n είναι τα bits που έχει ο μετατροπέας
του μικροελεγκτή από αναλογικό σε ψηφιακό σήμα (ADC converter).
Για το Uno R3 έχει 10 bits άρα αποδίδει 210 =1024 τιμές.
0≤ AnalogRead(pin) ≤1023
15. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 15
Αναλογικές είσοδοι - AnalogRead
Αν για παράδειγμα o μετατροπέας είχε 2 bit τότε θα χώριζε τα 0-5V σε
4(=22) τμήματα. Δηλ. σε βήματα των 5/4=1,25 V. Η AnalogRead θα έδινε
16. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 16
Αναλογικές είσοδοι - AnalogRead
Επειδή τα 5V χωρίζονται σε 1024 τιμές τότε στα Vεισόδου αντιστοιχεί
17. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 17
Αναλογικές είσοδοι – Εφαρμογή της ΑnalogRead
18. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 18
Αναλογικές είσοδοι - Εφαρμογή της AnalogRead
int potPin = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(potPin);
Serial.println(reading);
delay(500);
}
19. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 19
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
Εφαρμογή με τον ίδιο κώδικα με αισθητήρα θερμοκρασίας (δίνει βέβαια λάθος
τιμές)
20. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 20
Αναλογικές είσοδοι - - αισθητήρας θερμοκρασίας
Εφαρμογή με σωστό κώδικα με αισθητήρα θερμοκρασίας
21. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 21
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
Και ο σωστός
κώδικας για
τον
αισθητήρα
θερμοκρασίας
22. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 22
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
Και ο σωστός κώδικας για τον αισθητήρα θερμοκρασίας
//TMP36 Pin Variables
int sensorPin = 0;
void setup()
{
Serial.begin(9600); //Start the serial connection with the computer
//to view the result open the serial monitor
}
void loop() // run over and over again
{
//getting the voltage reading from the temperature sensor
int reading = analogRead(sensorPin);
23. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 23
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
int reading = analogRead(sensorPin);
// Αν voltage η τάση που δίνει το TMP36 τότε η μετατροπή που κάνει η αναλογική είσοδος
είναι:
// reading = (voltage *1024)/5.0
// converting that reading to voltage, that the TMP36 gave to pin 0
float voltage = reading * 5.0;
voltage /= 1024.0; // i.e. voltage = voltage/1024
// print out the voltage
Serial.print(voltage); Serial.println(" volts");
24. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 24
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
// print out the voltage
Serial.print(voltage); Serial.println(" volts");
// now print out the temperature
// For TMP36 the output in Volts: V(Volts) = 0,5+0,01*θ
// where θ is the temperature in Celsius degrees
float temperatureC = (voltage - 0.5) * 100 ;
//converting from 10 mv per degree with 500 mV offset
//to degrees ((voltage - 500mV) times 100)
Serial.print(temperatureC); Serial.println(" degrees C");
// now convert to Fahrenheit
25. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 25
Αναλογικές είσοδοι - αισθητήρας θερμοκρασίας
// now convert to Fahrenheit
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print(temperatureF); Serial.println(" degrees F");
delay(1000); //waiting a second
}
26. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 26
Πρωτόκολλα επικοινωνίας
Τα Arduino επικοινωνούν με άλλους μικροελεγκτές (Arduino ή
Raspeberry), H/Y, αλλά και αισθητήρες χρησιμοποιώντας τρία
πρωτόκολλα επικοινωνίας
1) UART - Universal Asyncrhonous Receiver Transmitter (Παγκόσμιος
Ασύγχρονος Δέκτης και Εκπομπός)
2) I2C ή Ι2C - Inter-Integrated Circuit (Διαολοκληρωμένο κύκλωμα)
3) SPI - Serial Peripheral Interface (Σειριακή περιφερειακή Διεπαφή)
Για κάθε ένα από αυτά τα πρωτόκολλα επικοινωνίας υπάρχουν δίαυλοι
(buses) αλλά και οι αντίστοιχοι ακροδέκτες στην πλακέτα του Arduino.
27. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 27
Πρωτόκολλα επικοινωνίας - UART
UART - Universal Asyncrhonous Receiver Transmitter (Παγκόσμιος
Ασύγχρονος Δέκτης και Εκπομπός)
Είναι η Σειριακή Επικοινωνία όπου η πληροφορία ανταλλάσσεται με το
ένα bit να ακολουθεί το άλλο.
https://docs.arduino.cc/learn/communi
cation/uart
30. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 30
Πρωτόκολλα επικοινωνίας - I2C
Μπορούν πολλοί αισθητήρες να συνδεθούν σε 2 διαύλους. Μπορεί να
υπάρχουν και πολλές master συσκευές (multi master – multi slave)
https://medium.co
m/learning-by-
doing-404/i2c-
communication-
between-rpi-and-
arduino-
b7064bffe02a
31. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 31
Πρωτόκολλα επικοινωνίας - I2C
Κάθε αισθητήρας έχει την δική του μοναδική διεύθυνση. (Συνήθως δίνεται
από τον κατασκευαστή αλλά μπορεί και να αλλαχτεί)
https://www.elec
tronicshub.org/
arduino-i2c-
tutorial/
32. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 32
Πρωτόκολλα επικοινωνίας - I2C
Το SDA (Serial Data) – Ο δίαυλος
που ο master και ο slave
στέλνουν και λαμβάνουν
δεδομένα
SCL (Serial Clock) – Ο δίαυλος
που φέρει το σήμα του
ρολογιού.
Έχει χαμηλότερο ρυθμό
μεταφοράς δεδομένων από το
SPI
https://linuxhint.com/arduino-i2c-
communication-pins/
33. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 33
Πρωτόκολλα επικοινωνίας - I2C
Οι εντολές για το πρωτόκολλο I2C είναι :
Wire.begin()
Wire.requestFrom()
Wire.beginTransmission()
Wire.endTransmission()
Wire.write()
Wire.available()
Wire.read()
Wire.SetClock()
Wire.onReceive()
Wire.onRequest()
34. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 34
Πρωτόκολλα επικοινωνίας - SPI
Τύπος σύγχρονης σειριακής επικοινωνίας, που σημαίνει ότι η μεταφορά
δεδομένων χρονίζεται με χρήση παλμών ρολογιού. Είναι καλό
πρωτόκολλο για μεταφορά δεδομένωνμεταξύ συσκευών που απέχουν
λιγότερο από 10 m.
Είναι ταχύτερο πρωτόκολλο από το I2C. Υπάρχουν κάμερες που μπορούν
να συνδεθούν στο Arduino χρησιμοποιώντας το SPI.
Χρησιμοποιεί ένα master και πολλά slave.
36. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 36
Πρωτόκολλα επικοινωνίας - SPI
MOSI: Master-Out-Slave-In το master στέλνει
δεδομένα σε ένα slave;
MISO: Master-In-Slave-Out το master λαμβάνει
δεδομένα από το slave;
SCLK: Serial Clock ρυθμίζει την ταχύτητα της
επικοινωνίας;
SS: Slave Select επιλέγει ποια περιφερειακή
συσκευή (slave) θα επικοινωνήσει.
37. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 37
Πρωτόκολλα επικοινωνίας - SPI
Οι ακροδέκτες στο Arduino για
την σύνδεση του SPI. Το
MOSI, MISO, και SCLK στους
ακροδέκτες 11-13 και πάνω στο
ICSP είναι τα ίδια, έτσι η χρήση
του ICSP δεν απελευθερώνει
τους ακροδέκτες 11-13 για
άλλες χρήσεις. (ICSP in-circuit
serial programming)
38. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 38
Πρωτόκολλα επικοινωνίας - SPI
Για την γραμμή Slave Select
μπορεί να χρησιμοποιηθεί
οποιοσδήποτε ψηφιακός
ακροδέκτης. Άρα μπορούν να
συνδεθούν 17 (20-3) συσκευές
SPI στο Arduino UNO
39. Εισαγωγή στην χρήση Arduino Χ. Δ. Φανίδης 39
Ευχαριστώ
για την προσοχή σας! Photo by Dai on Unsplash