5/23/2013 1 Arduino Boe Shield Mobilna robotika Sistemi u realnom vremenu Sistemi u realnom vremenu Laboratorijske vježbe br. 7 Uvod Postoji niz dostupnih programa koji omogućavaju kreiranje softvera za AVR Asemblersko, C, čak i Basic programiranje programiranje AVR Studio i Arduino
17
Embed
Arduino Boe Shield Mobilna robotika Postoji niz dostupnih ...
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
5/23/2013
1
Arduino Boe ShieldMobilna robotika
Sistemi u realnom vremenuSistemi u realnom vremenuLaboratorijske vježbe br. 7
Uvod
Postoji niz dostupnih programa koji omogućavaju kreiranje softvera za AVR
Asemblersko, C, čak i Basic programiranjeprogramiranje
AVR Studio i Arduino
5/23/2013
2
AVR Studio
Atmel AVRStudio je besplatan paket koji Atmel AVRStudio je besplatan paket koji podržava klasično C programiranje i asembler, uključujući detaljan pristup svim funkcionalnim dijelovima AVR mikrokontrolera
Arduino
Arduino, je također besplatan paket, omogućavaArduino, je također besplatan paket, omogućava razvojno okruženje koje koristi C-bazirani jezik Processing
Processing je sintaktički jako sličaj C-u, ali pojednostavljuje kreiranje koda sakrivajući neke detalje C-a
Arduino također pojednostavljjuje korištenje U/I p j jj j jpinova na AVR čipu, omogućavajući njihovu iznimno jednostavnu upotrebu.
Jednostavna instalacija, podržan na svim OS.
5/23/2013
3
Arduino
AVRStudio i Arduino IDE mogu koegizistrati na AVRStudio i Arduino IDE mogu koegizistrati na računaru bez problema,
Arduino čak može raditi sa STK500 pločom, ali je potrebno reproducirati osnovnu postavku Arduino razvojnih ploča (odgovarajuće Atmega328 pinove pravilno spojiti)Ob k t k i t Wi AVR C k jl k ji Oba paketa koriste WinAVR C kompajler, koji pretvara C kod u mašinski kod (hex file) koji se zatim prebacuje na uc.
Arduino
Pored softvera specifičnost Arduina je Pored softvera, specifičnost Arduina je razvojna ploču Arduino Board niske cijene (od par desetaka €)
Bazirana na ATMEL mikrokontrolerima
Velika zajednica korisnikae a ajed ca o s a
USB programiranje
Velik broj dodataka - “shieldova” (GSM, WiFi, Ethernet, BT…)
5/23/2013
4
Atmega328 (Arduino UNO)
Atmega328 ima tri Atmega328 ima tri porta (B, C, D).
Arduino koristi te portove za svoje ulaze i izlaze B (digitalni 8-13) B (digitalni 8 13)
C (analogni 0-5)
D (digitalni 0-7)
Atmega328 vs ATMEGA16
Napredna RISC arhitektura131 i t k ij
Napredna RISC arhitektura131 i t k ij 131 instrukcija
32x8 registara opšte namjene do 20 MIPS na 20 MHz
Programska i memorija podataka 32KB Flash 1KB EEPROM 2KB SRAM
Dva 8 bitna timera/countera Jedan 16 bitni timer/counter
6 PWM k l
131 instrukcija 32x8 registara opšte namjene do 16 MIPS na 16 MHz
Programska i memorija podataka 16KB Flash 512 B EEPROM 1KB SRAM
Dva 8 bitna timera/countera Jedan 16 bitni timer/counter
Č ti i PWM k l 6 PWM kanala 6 (8) kanalni ADC (10 bitni) USART, SPI, TWI/I2C WatchDog On-chip analogni komparator Interapti
Funkcije analogne setovanju registara, npr: DDRD = B11111110; // sets Arduino pins 1 to 7 as DDRD = B11111110; // sets Arduino pins 1 to 7 as outputs, pin 0 as input
DDRD = DDRD | B11111100; // this is safer as it sets pins 2 to 7 as outputs // without changing the value of pins 0 & 1, which are RX & TX
Digitalni I/O
5/23/2013
9
Primjer
Progiram čitava vrijednost ulaza i zatim pali LED diodu ako je ulaz k iaktivanint led = 13; // connect LED to pin 13 int pin = 7; // connect pushbutton to pin 7 int value = 0; // variable to store the read value void setup() {
pinMode(led, OUTPUT); // sets pin 13 as output pinMode(pin, INPUT); // sets pin 7 as input
} } void loop() {
value = digitalRead(pin); // sets 'value' equal to // the input pin digitalWrite(led, value); // sets 'led' to the
} // button's value
Osnovne funkcije - Analogni I/O
analogRead(pin) analogRead(pin) pin 0-5 (analogni ulazi) rezultat: 0-1023 analogWrite(pin, value) //PWMNpr: samo pinovi 3, 5, 6, 9, 10 i 11 za
Atmega328Atmega328Value: 0 (0V) -255 (5V)
5/23/2013
10
Analogni I/O
Primjer
Program čita vrijednost potenciometra i prikazuje na LED diodiint led = 10; // LED with 220 resistor on pin 10 int pin = 0; // potentiometer on analog pin 0 int value; // value for reading void setup(){} // no setup needed void loop() {
value = analogRead(pin); // sets 'value' equal to 'pin' p
value /= 4; // converts 0-1023 to 0-255 analogWrite(led, value); // outputs PWM signal to led
}
5/23/2013
11
Osnovne vremenske funkcije
Delay: Delay:delay(1000); // waits for one second
Brojač:value = millis(); // sets ‘value’ equal to millis()
Broji max 9h, zatim overflow
Serijska komunikacija
Program čita analognu vrijednost svake sekunde i šalje podatke na čračunar
void setup() {
Serial.begin(9600); // sets serial to 9600bps
} void loop() {
Serial.println(analogRead(0)); // sends analog value p g gdelay(1000); // pauses for 1 second
}
5/23/2013
12
Neke ostale funkcije:
randomSeed(seed) randomSeed(seed)
random(max)
random(min, max)
min(x, y)
max(x y) max(x, y)
Arduino Shield interface
5/23/2013
13
Arduino Shield interface
Kontinualni servo motori
5/23/2013
14
Servo motori
Signali kori upravljaju servo motorima Signali kori upravljaju servo motorima moraju trajati precizan vremenski period.
Servomotor u tom periodu mjeri koliko dugo je signal na 1, i tu informaciju koristi kao instrukciju za brzinu i smjer motora
Upravljanje servo motorom
Sve što je potrebno je slati impuls svakih 20ms
5/23/2013
15
Spajanje servoa na BoeShield
Spajanje baterija na BoeShield
5/23/2013
16
Signali naprijed i nazad
5/23/2013
17
Biblioteka Servo.h i primjer
Arduino ima Servo.h biblioteku koja olakšava komunikaciju sa servo motorima#i l d h // l d lib#include <Servo.h> // Include servo library
Servo servoLeft; // Declare left servo signalServo servoRight; // Declare right servo signal
void setup() // Built in initialization block{ servoLeft.attach(13); // Attach left signal to P13 servoRight.attach(12); // Attach right signal to P12 servoLeft writeMicroseconds(1700); // 1 7 ms -> counterclockwservoLeft.writeMicroseconds(1700); // 1.7 ms > counterclockw.servoRight.writeMicroseconds(1300); // 1.3 ms -> clockwise