Aiesec University 2012-arduino

25

Transcript of Aiesec University 2012-arduino

Track – First Day

What is Arduino ? Developement environment; „Hello world” ... Arduino way Buttons, LEDs, Temp. sensor, Serial port, LCD

and varoius others; Driving motors and reading distances with

Arduino; Sumo Robots principles ...

Sumo rules

Track – Second day

... and practices; State machines;

Preseinting AU-Bot ;-) Mecanical and soldering skills

Rough programming of the Bot; Simple state machine that does not much

Let your imagination roar No dirty tricks ... or ... ?

Ce este Arduino ?

USB

pini digitali

pini analogici

Pini: analogici si digitali

Pinii digitali sunt utilizati pentru a citi marimi care pot avea doar doua valori (exemplu : "este butonul apasat sau nu este"), pentru a comanda dispozitve externe (led-uri, motoare) si pentru a comunica cu dispozitive care utilizeaza protocoale digitale.

int v = digitalRead(6);

digitalWrite(6, HIGH);

Pinii analogici sunt utilizati pentru a citi marimi care variaza continuu (exemple : nivelul de ilumare din incapere, distanta pana la un obiect).

int distanta = analogRead(3);

„Limbajul” Arduino

void setup() {

//codul de aici ruleaza //o singura data

}

void loop() {

/* codul de aici ruleaza cat timp Arduino este

alimentat */

}

Arduino IDE

Un led - conexiunipinul GND - GND Arduinopinul DO - pinul 13 Arduino

Doua led-uri

Sa se realizeze circuitul electric si un program care sa aprinda doua led-uri alternativ: primul led sta aprins 1 secundea apoi se stinge si se aprinde al doilea si tot asa

Debug in consola seriala- util pentru a intelege ce se intampla cu programul care ruleaza pe Arduino.- codul care ruleaza pe Arduino trimite text catre PC, care este afisat in mediul

de dezvoltare, in consola seriala.

void setup() { Serial.begin(9600);}int i;void loop() { i++; Serial.println(i); delay(500);}

Senzor de lumina- primul exemplu de senzor analogic- fotorezistor- divizorul de tensiune !!!

5V - 5V ArduinoGND - GND ArduinoA0 - pinul 0 analogic Arduino

void setup() {Serial.begin(9600);

}

void loop() { int v = analogRead(0); Serial.println(v);}

Buton- primul exemplu de „senzor” digital

5V - 5V ArduinoGND - GND ArduinoDO - pinul 7 digital Arduino

void setup() {Serial.begin(9600);

pinMode(7, INPUT);}

void loop() { int v = digitalRead(7); Serial.println(v);}

Structura "IF"

if ( <conditie> ) {actiune1;

} else {actiune2;

}

Exista si operatorul contitional ternar „?” pentru cine simte nevoia ;)

Led + Buton - conexiuni

prelungitor alimentarepinul negru - GND Arduinopinul rosu - 5V Arduinoled

pinul negru - GND prelungitor alimentarepinul alb(albastru) - pinul digital 13 Arduino

butonpinul negru - GND prelungitor alimentarepinul rosu - 5 V prelungitor alimentarepinul alb(albastru) - pinul 7 digital Arduino

Led + Buton - cod sursavoid setup() {

pinMode(7, INPUT);}

void loop() {int v = digitalRead(7);if (v == 1) {

digitalWrite(13, HIGH); }

else {digitalWrite(13, LOW);

}}

Senzor de distantaMasoara distanta pana la primul obiect din fata senzorului. Este relativ precis intre 10 cm si 80 de cm. Sunt senzori si pentru alte intervale de precizie

pinul rosu – 5V

pinul negru – GND

pinul alb -

pinul 0 analog Arduino

float volts = analogRead(0)* ((float) 5 / 1024);float distance = 65*pow(volts, -1.10);

Senzor de distanta - debug serial

- realizeaza un montaj care sa afiseze distanta citita de senzor in interfata de debug seriala.

Senzor de distanta + Led-uri

- realizeaza un montaj care sa aprinda unul, doua sau trei led-uri, in functie de distanta citita de senzorul de distanta.

Difuzor

void setup() {tone(pin, frequency, duration);

}void loop(){

}

http://www.robofun.ro/electronice/minidifuzor-brick

Senzor de distanta + Difuzor

- realizeaza un montaj care sa genereze un sunet cu o frecventa proportionala cu distanta citita de senzorul de distanta.

- creeaza muzica miscand mana in fata senzorului.

Senzor de temperatura

Rosu - 5V Arduino

Negru - GND Arduino

Albastru - pinul 0 Analogic Arduino

int sensorPin = 0;void setup(){ Serial.begin(9600);} void loop(){ int reading = analogRead(sensorPin); float voltage = reading * 5.0; voltage /= 1024.0; float temperatureC = (voltage - 0.5) * 100 ; Serial.print(temperatureC); Serial.println(" degrees C"); delay(1000);}

Accelerometre

http://www.tehnorama.ro/adxl335-arduino/

void setup(){ Serial.begin(9600); analogReference(EXTERNAL);}void loop(){ float xAcc=readAcc(0); float yAcc=readAcc(1); float zAcc=readAcc(2); Serial.print("Acceleration "); Serial.print(" x:"); Serial.print(xAcc,DEC); Serial.print(" y:"); Serial.print(yAcc,DEC); Serial.print(" z:"); Serial.print(zAcc,DEC); Serial.println(); delay(100);}

float readAcc(int port){

int value=analogRead(port);

int miliVolts=map(value,0,1023,0,3300)-3300/2;

float acc=(float)miliVolts/360;

return acc;

}

Accelerometre