CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x);...

39
CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input/output pins (of which 6 can be used as PWM outputs) 6 analog inputs a USB connection, a power jack, an ICSP header a reset button

Transcript of CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x);...

Page 1: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

• CPU: ATmega328/16MHz

• Flash memory: 32KB

• 14 digital input/output pins (of which 6 can be

used as PWM outputs)

• 6 analog inputs

• a USB connection, a power jack, an ICSP header

• a reset button

Page 2: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Βασικά χαρακτηριστικά Arduino UNO

Page 3: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Reset button

Pin ψηφιακών

εισόδων/εξόδων (0-13)

Pin

A

RE

Fγείωση

Pin επανεκκίνησης

USB port

Τροφοδοσία 3.3V

Τροφοδοσία 5VPin εξωτερικής

τροφοδοσίας

εξωτερική

τροφοδοσία

Μικροελεγκτής

ATMEGA 328

LED λειτουργίας

Pin σειριακής επικοινωνίας

γείωση

Pin Αναλογικών

εισόδων (Α0-Α5)

LED σειριακής

επικοινωνίας

Page 4: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Attiny85 (8KB Flash) Arduino Nano (32KB Flash)

Arduino Mega (256KB Flash) Arduino Due (512KB Flash) 32bit

Παρόμοια Boards

Τύποι διασύνδεσης:

• USB (type A,B)

• miniUSB

• microUSB

Page 5: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Διασυνδέσεις

Στα Arduino, μπορούμε να συνδέσουμε διάφορα αισθητήρια, είτε πάνω στο board (shield)

Page 6: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Διασυνδέσειςδιάφορα αισθητήρια, είτε απομακρυσμένα

Page 7: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Διασυνδέσειςδιάφορα actuators motors, servo, stepper motors, DC motors

Page 8: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Διασυνδέσειςδιάφορα υλικά που θα δουλεψουμε …

Page 9: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Arduino Uno pins DC Current per I/O Pin: 20mA

Jack Voltage (recommended 7-12V) < 20V

Page 10: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Pins Παραμετροποίησης

Το Board Arduino Uno, διαθέτει

6 Αναλογικές ΕισόδουςPins (Α0,Α1,Α2,Α3,Α4,Α5)

στις οποίες μπορούμε να

συνδέσουμε & να μετρήσουμε

μια τάση (ή σήμα)

που θα κυμαίνεται από

0,1,2… έως 5V.

(*αν βάλουμε 6V θα καεί η πόρτα !!)

Page 11: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναλογικοί είσοδοι (pins Α0 - Α5) :

Το πόσα δεκαδικά ψηφία (ακρίβεια) μπορεί να διαβάσει, μια αναλογική

είσοδος, π.χ.: 4.99511718 V (θεωρητικά) εξαρτάται από το ADC ( Analog to Digital Converter)

Το Arduino Uno έχει δυνατότητα 10bit

(Τα Arduino Due,Zero,MKR έχουν 12bit)

Μπορεί να ξεχωρίσει στο σήμα που θα του δώσουμε,1024 στάθμες

5V/1024=0.0048828125 V. Δηλαδή αν του δώσουμε ένα σήμα 4,9mV ή 9,8

mV θα καταλάβει τη διαφορά.

Για να διαβάσουμε τη τιμή της τάσης στην αναλογική πόρτα χρησιμοποιούμε

το x = analogRead(Α0);

ΠΡΟΣΟΧΗ ! Το analogWrite (11,255) δεν είναι εντολή για τις αναλογικές πόρτες

ΕΙΣΟΔΟΥ(Α0-Α5) παρακάτω θα εξηγήσουμε τη χρήση του στα PWM ποδαράκια.

Pins Παραμετροποίησης

Page 12: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Παραμετροποίηση pinsΨηφιακοί είσοδοι/έξοδοι:Το Arduino Uno, Διαθέτει 14

ψηφιακές Εισόδους/Εξόδους pins

(0,1,2,3,4,5,6,7,8,9,10,11,12,13)

(Τα Mega,Due έχουν 54 πόρτες)

Η διαφορα αναλογικές με ψηφιακές πόρτες,

είναι ότι:

• Οι ψηφιακές πόρτες (σαν εισόδοι),

καταλαβαίνουν μόνο 2 στάθμες

σήματος. 0V ή 5/V (low/high).

Π.χ. Αν σε μια ψηφιακή είσοδο

τροφοδοτήσουμε 1V ή 2V ή 2,4V αυτό θα

καταλάβει ότι βάλαμε 0V (LOW).

Ενώ αν εφαρμόσουμε τάση 2,6V ή 4V ή 4,9V θα

διαβάσει ότι του βάλαμε 5V (HIGH).

(*αν εφαρμόσουμε 6V ίσως καεί η πόρτα…)χρήση: var = digitalRead(4);

Page 13: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Εισάγουμε τον κώδικα στο περιβάλλον IDE το οποίο είναι open-source και

κατεβάζουμε δωρεάν από τη διεύθυνση (http://arduino.cc)

Σύνταξη του κώδικα

Τα αρχεία κώδικα που

δημιουργούμε ονομάζονται sketch

files και είναι τύπου .ino

Για τον έλεγχο της ορθότητας του

κώδικα χρησιμοποιούμε το

πλήκτρο Verify

Page 14: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Σύνταξη του κώδικα

Πριν τη μεταφορά του κώδικα στο μικροελεγκτή, συνδέσουμε σε μια θύρα USB το Arduino και

ρυθμίζουμε την ίδια θύρα στο περιβάλλον IDE (π.χ. COM3). Επίσης δηλώνουμε την έκδοση

του board που χρησιμοποιούμε (π.χ. Arduino UNO). Μετά τις κατάλληλες ρυθμίσεις, το

Arduino board «βλέπει» το περιβάλλον IDE. Μεταφέρουμε το πρόγραμμα στο μικροελεγκτή

(Upload)

Page 15: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Σύνταξη του κώδικα

• Τα σχόλια γραμμής, μπορούν να ξεκινάνε με //:

// my comments

• ή τα κυκλώνουμε με /* και */:

/* this is comment

comment1

comment2

This program is used for………..

comment3

comment4

*/

Page 16: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αρχικά, δηλώνουμε αν θέλουμε να καλέσουμε

κάποια βιβλιοθήκη π.χ. κάποιου shield

#include <Test.h>

Η θέση του φακέλου βρίσκεται συνήθως

C:/user~/Documents/Arduino/libraries/

Σύνταξη του κώδικα

Page 17: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

void setup()

{

//αρχικός κώδικας (παραμετροποίηση)

}

void loop()

{

//κώδικας που τρέχει για πάντα

}

τo Arduino , ξεκινάει, τρέχει μια φορά το setup()

και μετά τρέχει για πάντα το loop()….

Σύνταξη του κώδικα

Page 18: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Παραμετροποίηση ταχύτητας usb

Το καλώδιο σύνδεσης usb ,

εκτός από τροφοδοσία (500mΑ)

κάνει την βασική επικοινωνία.

void setup()

{

Serial.begin(9600);

Serial.print(“test1");

Serial.print(“test2");

delay(3000);

Serial.println(“test3");

Serial.println(“test4");

//my first program

}

loop() {}

Αποτέλεσμα του κώδικα

στην οθόνη τερματικού:

test1test2

test3

test4

Σημείωση:

Τα test3 test4 θα αργήσουν 3sec να

εκτυπωθούν.

Η ταχύτητα που μιλάει το arduino,

Θα πρέπει να είναι η ίδια με του

τερματικού (π.χ. Serial monitor)

Page 19: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Εκτύπωση μηνύματος

int i=0;

void setup()

{

Serial.begin(9600);

Serial.println(“start");

}

void loop()

{

for (i=0;i<60;i++)

{

Serial.println(i);

delay(500);

}

Serial.println(“end”);

}

• Δοκιμάστε αυτό το κώδικα.Τι περιμένουμε να δούμε?

• Βάλτε διαφορετική ταχύτητα στο τερματικό. Τι βλέπουμε?

Page 20: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Εκτύπωση μηνύματος

void setup()

{

int x=200;

Serial.begin(9600);

Serial.println(x);

}

void loop()

{

testtt();

}

void testtt()

{

Serial.println(x);

delay(1000);

}

Δοκιμάστε αυτό το κώδικα.τι θα περιμένουμε να δούμε?

Page 21: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Προτεινόμενη δομή κώδικα/*

* External libraries

*/

#include <SPI.h>

/*

* Constants & variables

*/

char msg = “Hello Arduino…”; // single line comment

/*

* Custom & standard Functions

*/

void printMessage()

{

Serial.println(message);

}

void setup()

{

//initialize serial port

Serial.begin(9600);

}

void loop()

{

printMessage();

Delay(5000);

}

Page 22: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Code execution

Page 23: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Code execution

Page 24: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Ορισμός pinModeΜε το pinMode,

Ορίζουμε το Ψηφιακό

Port αν θα είναι:

• INPUT,

• INPUT_PULL_UP,

• OUTPUT

π.χ.

void setup()

{

pinMode(13, OUTPUT); }

*το L είναι μόνιμα ενωμένο με το pin 13 εσωτερικά στο UNO (LED_BUILTIN)

Page 25: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

void setup()

{

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(3000);

}

Τι κάνει αυτός ο κώδικας?

Το delay μας δημιουργεί

κάποιο πρόβλημα?

Page 26: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

void setup()

{

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(3000);

}

Τι κάνει αυτός ο κώδικας?

Αν το αλλάξουμε σε digitalWrite(LED_BUILTIN, HIGH) ?

Page 27: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

Αυτό μπορεί να γίνει?

Page 28: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

void setup()

{

pinMode(13, OUTPUT);

pinMode(10, OUTPUT);

}

void loop()

{

digitalWrite(13, HIGH);

digitalWrite(10, LOW);

delay(1000);

digitalWrite(13, LOW);

digitalWrite(10, HIGH);

delay(3000);

}

Τι κάνει αυτός ο κώδικας?

Page 29: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

Αυτό μπορεί να γίνει?

Page 30: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Αναβόσβημα LED

Αυτό μπορεί να γίνει?

Page 31: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Digital inputΜέχρι τώρα, είδαμε το digitalWrite(13,HIGH);

Για να διαβάσουμε τη τιμή της τάσης (LOW/HIGH)

που υπάρχει σε μια ψηφιακή πόρτα εισόδου π.χ. την 7, χρησιμοποιούμε το

var = digitalRead(7);

int var;

void setup()

{

pinMode(7, INPUT);

}

void loop()

{

var = digitalRead(7);

delay(5);

} // Αν σε κάποια είσοδο, συνδέσουμε ένα

// καλώδιο στον αέρα τι θα «βλέπει» το arduino?

// LOW ή HIGH?

Page 32: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Digital input

Για να διαβάσουμε σωστά τη τιμή (LOW/HIGH) της πόρτας D7

βάζουμε μια μεγάλη αντίσταση του D7 προς τη γη. (debounce)

Γιατί μεγάλη αντίσταση? Τι θα γίνει χωρίς αυτή?

Ποια η διαδρομή του ρεύματος όταν (ΔΕΝ) πατηθεί το μπουτόν?

Page 33: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Digital input

const int buttonPin = 7;

const int ledPin = 13;

int buttonState = 0;

void setup()

{

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

}

void loop()

{

buttonState = digitalRead(buttonPin);

if (buttonState == HIGH)

{

digitalWrite(ledPin, HIGH);

}

else

{

digitalWrite(ledPin, LOW);

}

} // Τι κάνει αυτός ο κώδικας ?

Page 34: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Digital inputconst int buttonPin = 7;

const int ledPin = 13;

int buttonState = 0;

void setup()

{

Serial.begin(9600);

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

}

void loop()

{

buttonState = digitalRead(buttonPin);

if (buttonState == HIGH)

{ digitalWrite(ledPin, HIGH); }

else

{

digitalWrite(ledPin, LOW);

}

Serial.println(buttonState); // Τι κάνει αυτός ο κώδικας ?

}

Page 35: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

PWMΕίδαμε οτι με τα

digitalWrite(13,HIGH); // LED ON

digitalWrite(13,LOW); // LED OFF

στέλνουμε 5V ή 0V στο pin 13.

Αν θέλουμε να στείλουμε σε κάποιο pin

κάποια ενδιάμεση τάση?

Αυτό γίνεται με την τεχνική PWM (pulse Width

Modulation)

Αλλά μόνο στα pins με τo σύμβολο ~

Πρακτικά, αυτό που κάνουμε, είναι ότι

στέλνουμε μια παλμοσειρά με 0 ή 5 volts

Η εντολή συντάσσεται analogWrite(pin,value);

π.χ. analogWrite(11,255);

*Η τιμή που μπορούμε να γράψουμε είναι

0-255. Aν δώσουμε κάποια μεγαλύτερη τιμή,

γίνεται rollover.

Page 36: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

PWM

Παραδείγματα εντολών:

analogWrite(11,0); // στο pin11 στειλε 0volt σβηστο Led

analogWrite(11,127); // στο pin11 στειλε παλμούς, που η rms τιμή να ειναι 2.5volt

analogWrite(11,200); // στο pin11 στειλε παλμούς, που η rms τιμή να ειναι 3.5volt

analogWrite(11,255); // στο pin11 στειλε παλμούς, που η rms τιμή να ειναι 5volt

Αν αντί για Led συνδέσουμε ένα μοτέρ τι θα γίνει?

Αν συνδέσουμε ένα buzzer? (μεγαφωνάκι)

Page 37: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

PWMint led = 9; // the PWM pin the LED is attached to

int brightness = 0; // how bright the LED is

int fadeAmount = 5; // how many points to fade the LED by

void setup()

{

pinMode(led, OUTPUT);

}

void loop()

{

analogWrite(led, brightness);

brightness = brightness + fadeAmount;

if (brightness <= 0 || brightness >= 255)

{

fadeAmount = -fadeAmount;

}

delay(50);

} //πειραματιστείτε αλλάζοντας τις διάφορες τιμές. Τι βλέπετε?

Page 38: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

Digital input

Τι γίνεται εδώ?

Ποια η διαδρομή του ρεύματος όταν (ΔΕΝ) πατηθεί το μπουτόν?

Page 39: CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x); delay(1000); } Δοκιμάστε αυτότο κώδικα . τι θα περιμένουμε

//Πειραματισμός….

Γραψτε ένα πρόγραμμα στο arduino IDE, που θα:

• αναβοσβήνει ένα LED στη πόρτα 3, κάθε 3 sec (δηλαδή 3sec on,

3sec off)

• αναβοσβήνει ένα LED στη πόρτα 7, κάθε 7sec (δηλαδή 7sec on,

7sec off)

• Και ταυτόχρονα θα μας γράφει στην οθόνη (serial monitor)

“LED 3 is on, LED7 is OFF”κλπ

Ψάξτε μόνοι σας τι κάνει η εντολή millis()