CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x);...
Transcript of CPU: ATmega328/16MHz Flash memory: 32KB 14 digital input ... · void testtt() {Serial.println(x);...
• 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
Βασικά χαρακτηριστικά Arduino UNO
Reset button
Pin ψηφιακών
εισόδων/εξόδων (0-13)
Pin
A
RE
Fγείωση
Pin επανεκκίνησης
USB port
Τροφοδοσία 3.3V
Τροφοδοσία 5VPin εξωτερικής
τροφοδοσίας
εξωτερική
τροφοδοσία
Μικροελεγκτής
ATMEGA 328
LED λειτουργίας
Pin σειριακής επικοινωνίας
γείωση
Pin Αναλογικών
εισόδων (Α0-Α5)
LED σειριακής
επικοινωνίας
Attiny85 (8KB Flash) Arduino Nano (32KB Flash)
Arduino Mega (256KB Flash) Arduino Due (512KB Flash) 32bit
Παρόμοια Boards
Τύποι διασύνδεσης:
• USB (type A,B)
• miniUSB
• microUSB
Διασυνδέσεις
Στα Arduino, μπορούμε να συνδέσουμε διάφορα αισθητήρια, είτε πάνω στο board (shield)
Διασυνδέσειςδιάφορα αισθητήρια, είτε απομακρυσμένα
Διασυνδέσειςδιάφορα actuators motors, servo, stepper motors, DC motors
Διασυνδέσειςδιάφορα υλικά που θα δουλεψουμε …
Arduino Uno pins DC Current per I/O Pin: 20mA
Jack Voltage (recommended 7-12V) < 20V
Pins Παραμετροποίησης
Το Board Arduino Uno, διαθέτει
6 Αναλογικές ΕισόδουςPins (Α0,Α1,Α2,Α3,Α4,Α5)
στις οποίες μπορούμε να
συνδέσουμε & να μετρήσουμε
μια τάση (ή σήμα)
που θα κυμαίνεται από
0,1,2… έως 5V.
(*αν βάλουμε 6V θα καεί η πόρτα !!)
Αναλογικοί είσοδοι (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 Παραμετροποίησης
Παραμετροποίηση 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);
Εισάγουμε τον κώδικα στο περιβάλλον IDE το οποίο είναι open-source και
κατεβάζουμε δωρεάν από τη διεύθυνση (http://arduino.cc)
Σύνταξη του κώδικα
Τα αρχεία κώδικα που
δημιουργούμε ονομάζονται sketch
files και είναι τύπου .ino
Για τον έλεγχο της ορθότητας του
κώδικα χρησιμοποιούμε το
πλήκτρο Verify
Σύνταξη του κώδικα
Πριν τη μεταφορά του κώδικα στο μικροελεγκτή, συνδέσουμε σε μια θύρα USB το Arduino και
ρυθμίζουμε την ίδια θύρα στο περιβάλλον IDE (π.χ. COM3). Επίσης δηλώνουμε την έκδοση
του board που χρησιμοποιούμε (π.χ. Arduino UNO). Μετά τις κατάλληλες ρυθμίσεις, το
Arduino board «βλέπει» το περιβάλλον IDE. Μεταφέρουμε το πρόγραμμα στο μικροελεγκτή
(Upload)
Σύνταξη του κώδικα
• Τα σχόλια γραμμής, μπορούν να ξεκινάνε με //:
// my comments
• ή τα κυκλώνουμε με /* και */:
/* this is comment
comment1
comment2
This program is used for………..
comment3
comment4
*/
Αρχικά, δηλώνουμε αν θέλουμε να καλέσουμε
κάποια βιβλιοθήκη π.χ. κάποιου shield
#include <Test.h>
Η θέση του φακέλου βρίσκεται συνήθως
C:/user~/Documents/Arduino/libraries/
Σύνταξη του κώδικα
void setup()
{
//αρχικός κώδικας (παραμετροποίηση)
}
void loop()
{
//κώδικας που τρέχει για πάντα
}
τo Arduino , ξεκινάει, τρέχει μια φορά το setup()
και μετά τρέχει για πάντα το loop()….
Σύνταξη του κώδικα
Παραμετροποίηση ταχύτητας 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)
Εκτύπωση μηνύματος
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”);
}
• Δοκιμάστε αυτό το κώδικα.Τι περιμένουμε να δούμε?
• Βάλτε διαφορετική ταχύτητα στο τερματικό. Τι βλέπουμε?
Εκτύπωση μηνύματος
void setup()
{
int x=200;
Serial.begin(9600);
Serial.println(x);
}
void loop()
{
testtt();
}
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);
}
Code execution
Code execution
Ορισμός pinModeΜε το pinMode,
Ορίζουμε το Ψηφιακό
Port αν θα είναι:
• INPUT,
• INPUT_PULL_UP,
• OUTPUT
π.χ.
void setup()
{
pinMode(13, OUTPUT); }
*το L είναι μόνιμα ενωμένο με το pin 13 εσωτερικά στο UNO (LED_BUILTIN)
Αναβόσβημα LED
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(3000);
}
Τι κάνει αυτός ο κώδικας?
Το delay μας δημιουργεί
κάποιο πρόβλημα?
Αναβόσβημα LED
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(3000);
}
Τι κάνει αυτός ο κώδικας?
Αν το αλλάξουμε σε digitalWrite(LED_BUILTIN, HIGH) ?
Αναβόσβημα LED
Αυτό μπορεί να γίνει?
Αναβόσβημα 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);
}
Τι κάνει αυτός ο κώδικας?
Αναβόσβημα LED
Αυτό μπορεί να γίνει?
Αναβόσβημα LED
Αυτό μπορεί να γίνει?
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?
Digital input
Για να διαβάσουμε σωστά τη τιμή (LOW/HIGH) της πόρτας D7
βάζουμε μια μεγάλη αντίσταση του D7 προς τη γη. (debounce)
Γιατί μεγάλη αντίσταση? Τι θα γίνει χωρίς αυτή?
Ποια η διαδρομή του ρεύματος όταν (ΔΕΝ) πατηθεί το μπουτόν?
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);
}
} // Τι κάνει αυτός ο κώδικας ?
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); // Τι κάνει αυτός ο κώδικας ?
}
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.
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? (μεγαφωνάκι)
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);
} //πειραματιστείτε αλλάζοντας τις διάφορες τιμές. Τι βλέπετε?
Digital input
Τι γίνεται εδώ?
Ποια η διαδρομή του ρεύματος όταν (ΔΕΝ) πατηθεί το μπουτόν?
//Πειραματισμός….
Γραψτε ένα πρόγραμμα στο 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()