Dossier robòtica 4t eso

  • Published on
    18-Jul-2015

  • View
    50

  • Download
    10

Embed Size (px)

Transcript

  • Robtica 4t dESO Dpt de Tecnologia 1

    4t ESO

    DOSSIER ROBTICA TECNOLOGIA

    COGNOMS, NOM

    GRUP

  • Robtica 4t dESO Dpt de Tecnologia 2

    ROBTICA 4t ESO-Arduino (Processing)

    Baixar el software de la pgina Arduino.cc (http://arduino.cc/en/Main/Software) Descarregar la darrera versi (1.0.6) (opci Windows Installer) Installar el software 1.0.6 Configurar la placa Arduino. Connectar-la amb el cable USB (rect-quadrat) a lordinador

    Evoluci dels programes

    Blink (file-examples-basics)

    void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); }

    void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second }

    *Variacions sobre el programa: canviar el temps canviar el pin

    Button (file-examples-digital)

    const int buttonPin1 = 2; //He fet canvis en les noms de les tres variables const int ledPin1 = 13; int buttonState1 = 0;

    void setup() { pinMode(ledPin1, OUTPUT); pinMode(buttonPin1, INPUT); }

    void loop(){ buttonState1 = digitalRead(buttonPin1);

    if (buttonState1 == HIGH) { digitalWrite(ledPin1, HIGH); }

    else { digitalWrite(ledPin1, LOW); } //tanquem lelse } //tanquem el loop

    *Variacions sobre el programa: Afegir un LED. ledPin2. Al prmer el polsador, fer que un LED estigui encs laltre estigui

    apagat Afegir un polsador. buttonPin2. Fer que cada polsador encengui un LED diferent. Qu

    passa quan es premen els 2 polsadors a lhora? Substituir els polsadors per sensors ptics

  • Robtica 4t dESO Dpt de Tecnologia 3

    LED temporitzat (variant del button) const int buttonPin1=2; int j; //sha dafegir aquesta variable ...

    if (buttonState1 == HIGH) { for (j = 0; j

  • Robtica 4t dESO Dpt de Tecnologia 4

    Servo_serial_read2 (moodle) //*s til per controlar els servos

    #include //Aquesta instrucci si sescriu no funciona. Cal copiar-la dun programa existent Servo myservo; // create servo object to control a servo

    void setup() { myservo.attach(11); // pin on cal punxar el senyal del Servomotor Serial.begin(9600); } // la resta del programa no lanalitzem

    *Utilitzaci del programa Obrir la finestra emergent

    Provar aquests valors numrics i picar la tecla intro. Els servos haurien de girar en un sentit, parar-se (90) i girar en laltre sentit

    Podeu provar diferents valors. *Provar els servos de gir limitat. Quina s la diferncia?

  • Robtica 4t dESO Dpt de Tecnologia 5

    1motor_2polsadors (moodle) //El programa t 2 polsadors i un motor. //Amb un polsador el motor gira en horari i amb l'altre polsador gira en antihorari

    //El programa no est complet. Sha de completar

    #include //Aquesta instrucci si sescriu no funciona. Cal copiar-la dun programa existent

    Servo myservo1;

    const int polsador1 = 5; const int polsador2 = 6;

    int horari=##; //valor que fa girar el servo en sentit horari int antihorari=##; //valor que fa girar el servo en sentit antihorari

    int estat_polsador1 = 0; int estat_polsador2 = 0;

    void setup() { myservo1.attach(9); // pin on cal punxar el senyal del Servomotor

    pinMode(polsador1, INPUT); pinMode(polsador2, INPUT); }

    void loop() { estat_polsador1 = digitalRead(polsador1); estat_polsador2 = digitalRead(polsador2);

    if(estat_polsador1 == HIGH){ myservo1.write(antihorari); delay(15); }

    else if (// sha de completar...) { //instrucci que fa moure el servo en laltre sentit delay(15); }

    else{ // en cas que no premem cap dels 2 polsadors el servo no sha de moure myservo1.write(##); //valor que bloqueja el servo delay(15); } //tanquem lelse

    } //tanquem el loop

  • Robtica 4t dESO Dpt de Tecnologia 6

    2motors_introduccio_a_les_funcions (moodle) //*Introducci a les funcions

    #include

    Servo myservo1; Servo myservo2;

    int horari=20; int antihorari=150;

    void setup() { myservo1.attach(9); myservo2.attach(10); }

    void endavant(){ myservo1.write(horari); myservo2.write(antihorari); delay(15); }

    void loop() { endavant(); }

    *Variacions sobre el programa: Dissenyar les funcions enrere, parar, girar_dreta, girar_esquerra. Totes per separat

    2motors_2polsadors (variant del 2motors_introduccio_a_les_funcions, 2_Polsadors_2_LEDs i LED temp)

    //Fer que el robot actu durant un temps concret a lactivar-se un sensor. Per exemple: Si el robot xoca contra un obstacle fer que es desplaci una mica enrere i que giri una mica abans de tornar a avanar *Exercici

    Afegir les variables interrup_e, interrup_d, estat_interrup_e i estat_interrup_d Afegir en el setup pinMode(interrup_e, INPUT); i pinMode(interrup_d, INPUT); Afegir en el loop:

    estat_interrup_e = digitalRead(interrup_e); estat_interrup_d = digitalRead(interrup_d);

    Dissenyar el primer if: if (estat_interrup_e == HIGH && estat_interrup_d == LOW) { //Afegir un for

    for (j = 0; j

  • Robtica 4t dESO Dpt de Tecnologia 7

    Gp2_funcio (moodle) //funci que ens permet controlar el sensor IR

    int IRpin = A5; // analog pin for reading the IR sensor

    void setup() { Serial.begin(9600); // start the serial port }

    void IR1() { float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3 float distance1 = (32*pow(volts, -1.10))-4; // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk float distance = distance1-distance1/5; Serial.print(distance); // print the distance Serial.println("cm"); delay(100); // arbitary wait time. }

    void loop() { IR1(); }

    *Variacions sobre el programa: Canviar el pin A5, per la rest de pins analgics

    IR_segueix_la_ma (variant del Gp2_funcio, 2motors_introduccio_a_les_funcions)

    //Obrir un programa que contingui, la segent instrucci i canviar el nom del programa i esborrar la resta dinstruccions #include

    Servo myservo1; Servo myservo2;

    int IRpin = A5; //Afegir les variables horari, antihorari

    void setup() { Serial.begin(9600); //Afegir myservo1.attach(10); myservo2.attach(11);

    } //...afegir diferents funcions de moviment, tamb la de parar...

    void IR1() {//...la resta de la funci s la mateixa fins al delay(100)... //... delay(100); // a partir daquest delay ve la modificaci que cal fer

    if (distance>3 && distance

  • Robtica 4t dESO Dpt de Tecnologia 8

    Ultrasonic_3pins (file-examples-sensors-Ping) //programa que ens permet controlar el sensor ultrasnic de 3 pins *Exercici1

    Eliminar totes les instruccions en gris (les que hi ha darrera de les // Salvar el programa amb el nom: Ultrasonic *Comprovar el programa Observem que el programa ens dna la distncia en polzades i cm.

    T una precisi de fins a 2 cm. Millor que lIR ***Els ultrasons consumeixen molta energia i fer-ne funcionar ms dun s difcil!!

    *Exercici2 Eliminar les segents instruccions (els clculs en polzades) inches = microsecondsToInches(duration); Serial.print(inches); Serial.print("in, "); long microsecondsToInches(long microseconds) { return microseconds / 74 / 2;

    } //al tanto amb les dues claus, tamb shan deliminar *Comprovar el programa

    *Exercici3. Transformarem el programa en una funci Canviar: void loop() per void ultraso()

    Fer un void loop() nou davant de la instrucci: long microsecondsToCentimeters(long microseconds)

    .....

    void loop(){ ultraso();

    }

    long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }

    *Comprovar el programa *Salvar el programa

  • Robtica 4t dESO Dpt de Tecnologia 9

    Ultrasonic_4pins (variant del file-examples-sensors-Ping) //programa que ens permet controlar el sensor ultrasnic de 4 pins //s una variant del de 3 pins

    *Exercici. Quins canvis hi ha amb el de 3 patilles?

    const int pingPin_out = 6; const int pingPin_in = 7;

    void setup() { // initialize serial communication: Serial.begin(9600); }

    void loop() { long duration, cm; pinMode(pingPin_out, OUTPUT); delayMicroseconds(15); digitalWrite(pingPin_out, HIGH); delayMicroseconds(15); digitalWrite(pingPin_out, LOW); delayMicroseconds(15); pinMode(pingPin_in, INPUT); duration = pulseIn(pingPin_in, HIGH); cm = microsecondsToCentimeters(duration);

    Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }

  • Robtica 4t dESO Dpt de Tecnologia 10

    Ultraso_segueix_ma (variant de lultrasonic, i de lIR_segueix_ma) Obrir el programa Ultrasonic Obrir el programa IR_segueix_la_ma i salvar-lo amb el nom: Ultraso_segueix_ma Copiar del programa Ultrasonic al programa Ultraso_segueix_ma les segents instruccions: La variable const int pingPin = 6; // a la zona de les variables la funci void ultraso() // a sota del void setup() les instruccions

    long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; } //van al final del programa

    Dissenyar la condici que analitza la distncia a la que es troba la m i fa moure el robot

    if (distance>3 && distance

  • Robtica 4t dESO Dpt de Tecnologia 11

    Sumo1 (variant de 2motors_2polsadors) //Fer que el robot avanci i que quan trobi una lnia negra faci una maniobra enrere i un petit gir per esquivar la lnia

    Obrir el programa 2motors_2polsadors Canviar les variables interrup_e, interrup_d per les varialbes optic_e, optic_d Canviar les variables estat_interrup_e i estat_interrup_d per estat_ optic_e, estat_

    optic_d

    Sumo2 (variant de Sumo1 i IR_segueix_la_ma) //afegir la funci IR1()

    void loop () { estat_optic_e=digitalRead(optic_e); estat_optic_d=digitalRead(optic_d);

    if (estat_optic_e==HIGH && estat_optic_d==LOW){ Serial.println("optic_e"); //cridar a alguna de les funcions prviament dissenyades }

    else if (// la resta de combinacions...){ //cridar a alguna de les funcions prviament dissenyades }

    else { IR1(); } }