arduino xornadas apetega

Upload: sind2

Post on 13-Apr-2018

257 views

Category:

Documents


4 download

TRANSCRIPT

  • 7/26/2019 Arduino Xornadas Apetega

    1/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    Control e robtica: Arduino

    1. Introducin

    Arduino unha plataforma de electrnica aberta para a creacin de prototipos baseada en software ehardware libres. Creouse para calquera persoa interesada en crear contornas ou obxectos interactivos.

    Arduino pode tomar informacin da contorna a travs dos seus pinsde entrada de toda unha gama desensorese pode afectar aquilo que lle rodea controlando luces, motores e outros actuadores.

    microcontroladorna placa Arduino se programa mediante a linguaxede programacin Arduinoe a contorna de desenvolvemento Arduino.

    soft!are pode ser descargado de forma gratu"ta desde http:##arduino.cc#

    $. %escricin da placa Arduino &'

    $.1 (icrocontrolador:

    ) o cerebro da tarxeta controladora arduino.

    $.$ *orto &+Conecta a tarxeta arduino co ordenador para gravar o programa na memoria ou para enviar datos.-amn alimenta a placa.

    $. Alimentacin da tarxeta

    *ara que funcione a tarxeta sen tela conectada co &+ ao ordenador, necesitamos conectar unhapila ou unha bater"a cunha tensin comprendida entre os / e os 1$0.

    $. otn 23+3-

    +erve para reiniciar o sistema ou a execucin dun programa.

    $.4 3ntradas e sa"das dixitais

    *ins 5 67 1 : *ins dixitais de entrada e sa"da

    *in 5 82x9: 2ecepcin serie de datos

    *in 1 8-x9: -ransmisin serie de datos

    *ins 8, 4, ;,

  • 7/26/2019 Arduino Xornadas Apetega

    2/30

    $.; 3ntradas analxicas

    *ins A5 67 A4: *ermiten conectar ata ; perifricos analxicos de entrada

    $./ 3ntradas e sa"das de alimentacin*ermiten alimentar compo?entes, sensores, etc.

    I23@: +a"da coa tensin que traballa a tarxeta

    ,0: +a"da a ,0

    40: +a"da a 40

    >'%: Conexin a terra ou 50

    0in: 3ntrada de alimentacin entre / e 1$ 0

    $.B 3%s

    A tarxeta arduino &no incorpora 3%s: &n que indica que a placa est acesa, outro conectado ao pin 1para comprobar o funcionamento da placa, e os 3%s que indican que se estn transmitindo ou recibindodatos entre a tarxeta arduino e o ordenador.

    . Contorna de

    programacin

    *ara programar o Arduino podemosempregar o Arduino IDE. I%3 unha

    Contorna de %esenvolvemento Integrado, dicir, unha aplicacin que ten onecesario para poder crear programas,cargalos na tarxeta Arduino e analiDar osresultados.

    *odes instalalo no teu ordenador indo ahttp:##arduino.cc#en#(ain#+oft!areouinstalalo directamente desde osrepositorios en &buntu ou inux (int.

    2

    http://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Software
  • 7/26/2019 Arduino Xornadas Apetega

    3/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    .1 Configuracin

    Conecta a tarxeta arduino ao ordenador mediante un cable &+.

    Abre o Arduino I%3 e busca o teu modelo de arduino. 'o noso caso Arduino Uno. *ode ser que oprograma xa a detectara automaticamente.

    *odes necesitar configurar tamn o porto serie no que est conectada a tarxeta arduino:

    +e tes problemas para comunicarte co porte serie pode deberse falta de permisos. 3n inux, comoadministrador, conecta a placa, abre un terminal e escribe o seguinte. %espois reinicia o equipo para queos cambios fagan efecto permanentemente:

    Inclu"r os usuarios no grupo dialout: sudo usermod 6a 6> dialout E'ome%e&suario7

    %ar permisos para comunicarse co porto serie tFAC(5: sudo chmod /// #dev#ttFAC(5

    Crear un enlace simblico ao porto: sudo ln 6sf #dev#ttFAC(5

    .$ *roba a tarxeta: linG

    Abre o programa HBlink en Arquivo ! Exemplos !B"sicos ! Blink

    %escrgao na tarxeta arduino.

    bservars que escintila o 3% conectado ao pin 1. Isosignifica que a placa funciona ben e se conectaperfectamente co ordenador, as" que xa podemoscomeDar a programar.

    3

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    4/30

    . 3strutura bsica dun programa

    .1 Comentarios:&tiliDamos #$J$#para engadir un pargrafocon varias li?as.

    &tiliDamos ##J para engadir un comentariodunha li?a.

    .$ %eclaracin de

    variables e funcins:

    'o inicio definimos as constantes, variables efuncins que utiliDaremos posteriormente noprograma. *or exemplo, indicamos que temosun 3% conectado ao pin 1 da placa arduino.

    int led%&'(

    . Configuracin:

    Aqu" introducimos o cdigo de configuracininicial. 3xecKtase unha soa veD.

    *or exemplo aqu" indicamos que o pin 1 unpin de sa"da: pin(ode8led, &-*&-9L

    -amn introducimos aqu" as instrucins quequeremos que se executen unha soa veD noinicio do programa.

    setup)* + , -

    . *rograma:

    As instrucins contidas dentro da funcin loop execKtanse indefinidamente, ata que se desconecte a placaarduino. *or exemplo, facemos que o 3% se acenda e se apague en determinados intervalos de tempo.

    .oop)* + , -

    4

  • 7/26/2019 Arduino Xornadas Apetega

    5/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    4. 3ntradas e sa"das dixitais

    4.1 >u"a de programacin:

    %efinir variables: int

    *or exemplo, definimos o nome Hled0erde para un 3% e indicamos que estconectado ao pin'%9 un 3% e unha resistenciade $/5N . A pata mis longa debe ir conectada ao pin 1.

    *rograma:

    // Declaracin de variables:

    %onst int led = 13; && ' %one%tado no pin 13

    // Confguracin:

    void setup()

    {

    pinMode(led, !*+*); && on-gura.os o pin 13 %o.o sa/da

    }

    // Prograa:

    void loop() && ! progra.a e0e%tase repetida.ente

    {

    digitalWrite(led, HIGH); && 'nv/a 2V ao pin de sa/da 13

    dela(2""); && 4garda 2"".s = ",2s

    digitalWrite(led, !W); && 'nv/a "V ao pin de sa/da 13

    dela(1""); && 4garda 1"".s = ",1s

    }

    *ropostas:

    4r"ctica &a5 6ambiando a frecuencia: (odifica os intervalos de espera para obter outras

    frecuencias de intermitencia.

    4r"ctica &b5 7ariable tempo8 Crea unha variable no inicio do programa co valor do tempo de

    acendido e outra co valor do tempo de apagado e fai que o programa se comporte en funcin deditos valores.

    4r"ctica &c5 Ambulancia: Conecta dous 3%s, cada un nun pin dixital diferente coa sKa

    resistencia de proteccin. (odifica o programa de xeito que se acendan e apaguen de formaalternada simulando as luces dunha ambulancia.

    7

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    8/30

    4. 4r"ctica 9: *ulsadores controlando 3%s.

    Imos ver como controlar o acendido e apagado dun 3% premendo en pulsadores.

    (aterial: $ 3%s,

    $ *ulsadores de contacto

    2esistencias: *ara os 3%s: $/5N 8ou outro valor menor que 1GN9 *ara os pulsadores:15GN

    (ontaxe:

    Conectaremos un 3% cunha resistencia de 4;5N en serie igual que fixemos na primeira prctica.

    pulsador conectarmolo na parte central da protoboard, segundo o seguinte esquema 8pin $9:

    8

  • 7/26/2019 Arduino Xornadas Apetega

    9/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    *rogramas:

    4ulsador normalmente aberto: Cando prememos nun pulsador o 3% acndese e cando o soltamosapgase. %efinimos unha variable Hestado que le o valor do pulsador 8o ou 19. programa escribir no

    3% o valor que toma esta variable

    // Declaracin de variables:

    %onst int led = 13; && +in 13 asignado a un '

    %onst int pulsador = $; && +in $ asignado a un pulsador

    int estado = "; && Varia5le na 6ue apunta.os o estado do pulsador

    // Confguracin:

    void setup() {

    pinMode(led, !*+*); && on-gura.os o ' %o.o sa/da

    }// Prograa:

    void loop()

    {

    estado=digital#ead(pulsador); && e.os " ou 1 do pulsador e gard7.olo na varia5le 8estado8

    digitalWrite(led,estado); && *rans.iti.os ese valor ao '

    }

    *roposta:&5 4r"ctica 9a5 Dous pulsadores8Conecta dous interruptores e dous 3%s con cadansKas

    resistencias de proteccin e fai que cada pulsador controle un 3%.

    9

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    10/30

    4. 4r"ctica ': *ulsadores e 3%s. peracins lxicas.

    4ulsador normalmente pechado: 3n posicin normal o 3% est aceso, e cando prememos nopulsador apgase. peracin booleana :;

  • 7/26/2019 Arduino Xornadas Apetega

    11/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    *ropostas:

    &5 4r"ctica 'a5 =uncin A:D8 @ai que un 3% acenda s no caso de que premamos os douspulsadores veD 8@uncin A'%9

    95 4r"ctica 'b5Inversin: Inicialmente temos un 3% aceso e outro 3% apagado. Cando prememosnun pulsador o primeiro 3% acndese e o segundo apgase.

    ;. Condicionais

    (ediante as funcins condicionaisengadiremos aos nosos proxectos capacidade de decisinfacendoque certas funcins ou programas se executen ou non se se dan determinadas condicins preestablecidas.

    ;.1 @uncins de control:

    if8condicin9 O proceso P

    4ando se cumpre a condicin esta"lecida exec5tanse as uncinsdo proceso deinido entre as cha!es 678. 4ando non se cumpre acondicin non se executan e o programe segue o seu curso.Exemplo: 9e a entrada - menor 0ue && exec5tase o proceso.

    if (entrada < 500) {// Proceso}

    if8condicin9 O proceso 1 P else

    O proceso $ P

    ,este caso deinimos dous procesos un paracando se cumpre a condicin esta"lecida eoutro para cando non se cumpre.

    Exemplo: 9e a entrada - menor 0ue &&exec5tase o proceso 1 e se non exec5tase oproceso (.

    if (entrada < 500) {// proceso1}else {// proceso2}

    11

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    12/30

    ;.$ 4r"ctica >: Condicional para acender e

    apagar un 3%

    Imos ver como controlar o acendido e apagado dun 3% premendopulsadores, pero establecendo condicins.

    &tiliDamos a montaxe da prctica anterior.

    *rograma:

    ;n +ED ac-ndese ao premer nun pulsador e ap2gase ao soltalo.

    Creamos unha variable Hestado que le o estado do pulsador e utiliDamos un condicional if , else ,paraindicar que cando o pulsador estea premido o 3% deber acenderse, e cando non deber apagarse.

    // Declaracin de variables:

    %onst int led = 13; && +in 13 asignado a un '

    %onst int pulsador = $; && +in $ asignado a un pulsador

    int estado="; && Varia5le %oa 6ue lere.os o estado do pulsador:

    // Confguracin:

    void setup() {

    pinMode(led, !*+*); && on-gura.os o ' %o.o sa/da

    }

    // Prograa:

    void loop()

    {

    estado = digital#ead(pulsador); && 4signa.os a 8estado8 o valor (" ou 1) do pulsador

    i> (estado == 1) { && ?e o pulsador esta pre.ido (estado = 1)

    digitalWrite(led, HIGH); && 4%@ndese o '

    }

    else { && ?e non

    digitalWrite(led, !W); && 4p7gase o '

    }}

    *ropostas:

    4r"ctica >a5;peracin lxicaA:D: @ai que un 3% acenda s no caso de que premamos dous

    pulsadores veD.

    4r"ctica >b5;peracin lxicaA:D: Cando prememos no pulsador un 3% acndese durante un

    tempo determinado e despois apgase.

    4r"ctica >c5 Unha funcin para cada pulsador8-emos dous pulsadores. &n encrgase de

    acender un 3% e o outro de apagalo.

    12

  • 7/26/2019 Arduino Xornadas Apetega

    13/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    /. +a"das dixitais *=(

    controlador arduino pode xerar sinais dixitais modulados en anchuraH*=(8H*ulse =idth (odulation9. -rtase dun sinal dixital peridico dunha determinadafrecuencia que pode ser asimtrico, dicir, o tempo que est o sinal no nivel 1pode ser diferente ao tempo no que est a nivel 5.

    valor do sinal *=( var"a desde ?8equivale a unvalor continuo de ?79 ata 9@@8equivale a un valorcontinuo de @79.

    %este xeito podemos utiliDar estes sinais paracontrolar e regular a potencia de sa1dadundispositivo: 0ariar a luminosidade dunha lmpada ou

    dun 3%, regular a velocidade de xiro dun motor,variar o posicionamento do eixe dun servo, etc.

    *or exemplo, se temos un 3% conectado a un pindixital *=( e enviamos un sinal *=( de valor 5 o3% estar apagado, se enviamos un valor de $44estar aceso completamente e se enviamos un valorde 1$/ brillar a metade do que brillar no casoanterior, pois s enviamos 40 na metade do ciclo Ktil.

    /.1 *ins dixitais *=( no

    arduino:

    'a tarxeta Arduino &no pdense usar como sa"das de sinal *=( os pins marcados co s"mbolo 8, 4, ;, u"a de programacin:

    pinindica onde conectamos o dispositivo de sa"da 83%, motor, servo, etc.9

    valorpermite axustar a duracin do ciclo Ktil ao sinal *=( de sa"da. 3st comprendido entre 5 85Q dociclo Ktil9 e $44 8155Q do ciclo Ktil9

    3xemplos:

    analogWrite(A, 1$B); En!a un sinal ao &< do ciclo 5til ao pin =

    analogWrite(led, 5rillo); En!a o !alor da !aria"le #"rillo$ ao pin no 0ue est2 conectado o +ED

    13

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    14/30

    /. 4r"ctica @: uD gradual

    Imos facer que un 3% conectado no pin < 8pin *=(9 se acenda e seapague gradualmente utiliDando a funcin analog=rite89.

    (ontaxe:

    Conectamos un 3% no pin dixital *=( < coa correspondenteresistencia de proteccin.

    *rogramas:

    &5 .u gradual: Imos facer que a luminosidade dun 3% vaiaaumentando progresivamente enviando un valor de 5 a $44 a travs davariable brillo. Cando a variable brillo chega ao valor de $44, po?emos o

    brillo a 5, apagamos o 3%, agardamos uns segundos e volta e empeDar.

    // Declaracin de variables:

    int led = 9; && ' %one%tado no pin 9

    int 5rillo = "; && Indi%a a lu.inosidade do ': Ini%ial.ente poCe.os un valor ":

    int varia%ion = 2; && Indi%a %antos puntos varia a lu.inosidade

    // Confguracin:

    void setup() {

    pinMode(led, !*+*); && e%lara.os o pin 9 %o.o de sa/da}

    // Prograa:

    void loop()

    {

    analogWrite(led, 5rillo); && 'nvia.os ao ' o valor do 5rillo

    5rillo = 5rillo D varia%ion; && ?u.a.os a varia%iEn ao valor do 5rillo

    i> (5rillo == $22) && ando o 5rillo vale $22

    {

    5rillo = " ; && poCe.os o 5rillo a "

    analogWrite(led, 5rillo); && apaga.os o '

    dela(3"""); && e agarda.os 3 segundos

    }

    dela(1""); &etardo de 1"".s para visualiFar a varia%iEn

    }

    *ropostas:

    4r"ctica @a5 Aumenta e dimine unha e outra ve. Agora facemos que a variacin cambie designo cada veD que a variable brillo chegue a $44 ou a 5, conseguindo que primeiro aumenteprogresivamente a luminosidade do 3% e despois vaia esvaecendo.

    14

  • 7/26/2019 Arduino Xornadas Apetega

    15/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    B. 3ntradas analxicas

    B.1 +inais analxicos no arduino:s sinais analxicos son sinais continuos, tanto no tempo como en amplitude, que poden tomar infinitosvalores.

    'o arduino podemos conectar perifricos analxicos nas entradas analxicas HAnalog I'. 'on temos pins

    de sa"da analxicos, pero podemos utiliDar os pins dixitais para enviar sinais *=(

    *ins de entrada analxicos:

    >ins A& ?@ A: >ermiten conectar ata =peri-ricos analxicos de entrada.

    *ins de sa"da *=(:

    >ins marcados co sm"olo %) = B 1& 11': sadas de sinal>C

    B.$ >u"a de programacin:

    @uncins analxicas:

    analogead"#in$%e o valor dunha entrada analxica. *ode tomar os valores entre ?e &?9'.

    analogrite"#in' valor$%3nv"a un sinal de sa"da *=( ao pin indicado, cun valor comprendido entre?e 9@@.

    utras funcins:

    valor()a#"valor*'in'a+'Nin'Na+$%*ermite reasignar un valor comprendido entre un mximoe un m"nimo noutro valor comprendido entre outromximo e outro m"nimo.

    3xemplos:

    a % analog3ead)A9*(## con esta funcin lemos o valor da entrada analxica A$, que pode tomar valoresentre 5 e 15$.

    b % map)a0?0&?9'0?09@@*(## Agora transformamos ese valor a nun valor b comprendido entre 5 e $44,

    para, por exemplo, poder envialo a travs unha sa"a *=(.

    15

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    16/30

    ectura serial

    Imos ler unha entrada analxica na que est conectado un potencimetro, e mostrar na pantalla doordenador 8monitor ou consola serie9 o valor que toma entre 5 e 15$. *ara iso utiliDamos as funcins:

    'a configuracin: Cerial5begin)??*(Inicia a comunicacin serial

    'o programa: Cerial5print)valor*(Imprime na pantalla o valor lido nunha entrada

    'o programa: Cerial5println)valor*(Imprime na pantalla o valor lido nunha entrada e pasa a unha

    nova li?a

    *ara ver a consola, unha veD cargado o programa no Ardu"no, debemos premer na icona que aparece naparte superior dereita:

    16

  • 7/26/2019 Arduino Xornadas Apetega

    17/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    B. 4r"ctica : (ovendo un potencimetro.

    Imos ler o valor enviado por un potencimetro a unha entrada analxica e, segundo oresultado, executar unha serie de instrucins.

    (ontaxe:

    Conectaremos un potencimetro de &?kF de xeito que a patilla central c estea conectada entradaanalxica A?, outra patilla a 40 e a que queda a masa.

    Conectamos tres 3%s coas sKas resistencias de proteccin aos pins 11, 1 e 1.

    *rogramas:

    &5 .ectura serial8 Imos ler na consola serie o valor que nos d un potencimetro en funcin da posicindo cursor.

    // Declaracin de variables:

    int valor="; && varia5le 6ue le o valor do poten%iE.etro, entre " e 1"$3

    // Confguracin:

    void setup() {

    ?erial:5egin(9A""); && Ini%ia a %o.uni%a%iEn serie

    }

    // Prograa:

    void loop()

    {

    valor = analog#ead(4"); && 4signa.os 7 varia5le 8valor8 o valor lido na entrada analE0i%a 4"

    ?erial:println(valor); && I.pri.e no .onitor serie dito valor

    dela($""); &etardo de $"".s para a visualiFa%iEn de datos na %onsola

    }

    17

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    18/30

    95 Acender un .ED cun potencimetro8 *odemos utiliDar a informacin que lemos na consola sobre ovalor dun potencimetro en funcin da posicin do cursor para acender un 3% cando o potencimetrosupere un determinado valor.

    // Declaracin de variablesint valor="; && varia5le 6ue le o valor do poten%iE.etro, entre " e 1"$3

    int led1=13;

    // Confguracin

    void setup() {

    ?erial:5egin(9A""); && Ini%ia a %o.uni%a%iEn serie

    pinMode(led1, !*+*); && on-gura.os o ' %o.o sa/da

    }

    // Prograa

    void loop()

    {

    valor = analog#ead(4"); && 4signa.os 7 varia5le 8valor8 o valor lido na entrada analE0i%a 4"

    ?erial:println(valor); &&I.pri.e no .onitor serie dito valor

    i> (valor = 2"") { && ando a varia5le 8valor8 e .aior ou igual 6ue 2""

    digitalWrite(led1,HIGH); && a%@ndese o '

    }

    else { && en %aso %ontrario

    digitalWrite(led1,!W); && ap7gase

    }

    dela(1""); && #etardo de 1"".s para a visualiFa%iEn de datos na %onsola

    }

    *ropostas:

    &5 4r"ctica a5 6ada .ED nun rango: Conecta tres 3%s coas sKas resistencias aos pins 11, 1$ e 1. primeiro 3% verde dbese acender no rango de 5 a ;5 da lectura do potencimetro, o segundo

    3% amarelo no rango 416/55 e o terceiro 3% vermello no rango /51615$.

    95 4r"ctica b5 6ada ve m"is .EDs: Agora fai que no inicio os tres 3%s estean apagados e amedida que imos xirando o potencimetro vanse acendendo cada veD mis 3%+.

    18

  • 7/26/2019 Arduino Xornadas Apetega

    19/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    B. 4r"ctica G. Conversin a *=(

    Imos utiliDar a funcin map)valor0 min0 max0 :min0 :max*(para converter o valor lido na entradaanalxica 8que pode ser de 5 a 15$9 a un valor que poidamos enviar a travs dunha sa"da *=( 8que ten

    un rango de 5 a $449 67 pwm % map)valor0?0&?9'0?09@@*(

    %espois enviamos ese valor a un 3% conectado unha sa"da p!m, para que a sKa luminosidade var"e enfuncin da posicin do cursor do potencimetro.

    Asemade, na consola serie podemos visualiDar o valor que te?en as variables Hvalor e Hp!m en cadamomento.

    *rograma:

    // Declaracin de variables:

    int valor="; && varia5le 6ue le o valor do poten%iE.etro, entre " e 1"$3int p.="; && varia5le 6ue envia.os a un pin p., entre " e $22

    int led3=11;

    // Confguracin :

    void setup() {

    ?erial:5egin(9A""); && Ini%ia a %o.uni%a%iEn serie

    pinMode(led3, !*+*); && on-gura.os o ' %o.o sa/da

    }

    // Prograa :

    void loop()

    {

    valor = analog#ead(4"); && 4signa.os a varia5le 8valor8 o valor lido na entrada analE0i%a 4"

    p. = .ap(valor,",1"$3,",$22); && al%ula.os o valor %orrespondente p.

    analogWrite(led3,p.); && 'nvia.os o valor p. a un '

    ?erial:print(valor); && 's%ri5i.os os valores das varia5les na %onsola serie

    ?erial:print(8 8);

    ?erial:println(p.);

    dela($""); && 4garda.os $"".s

    }

    *ropostas:

    &5 4r"ctica Ga5 7ariando a frecuencia: @ai un programa no que un 3% escintile cun intervalo de155 ms entre acendido e apagado cando leamos un valor 5 no potencimetro. A medida quemovemos o cursor vai aumentando o tempo ata que conseguimos que o 3% escintile cunintervalo de 1555 ms cando lemos un valor de 15$ no potencimetro.

    19

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    20/30

  • 7/26/2019 Arduino Xornadas Apetega

    21/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    peradores:

    peradores compostos

    perador peracin Exemplo E0ui!ale a

    Incrementa unha unidade n nFn1

    ? ? Decrementa unha unidade n? ? nFn?1

    F 9uma nF) nFn)

    ?F esta n?F) nFn?)

    HF >roduto nHF) nFnH)

    /F Di!isin n/F) nFn/)

    or (int n="; nJ2; nDD) { && #ep/tese 2 ve%es (desde " ata K) o seguinte

    digitalWrite(led, HIGH);

    dela(te.po1);

    digitalWrite(led, !W);

    dela(te.po1);

    }

    dela(te.po$); && agarda o te.po$ antes de repetir de novo o pro%eso

    }

    *ropostas:

    &5 4r"ctica Ha5 6ontar &?8 @ai que o 3% se acenda e apague 15 veces en cada secuencia. (odifica ovalor das variables tempo1 e tempo$ para obter outras frecuencias.

    95 4r"ctica Hb5 6ando pulsamos8 3ngade un pulsador coa sKa resistencia de 15GN no pin $ e fai quecando prememos nel se acenda e apague o 3% 4 veces.

    21

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    22/30

    15. Rogos de luces

    15.1 %escricin:Imos facer xogos de luces utiliDando a funcinfor )inicio0condicin0modificador* + proceso -

    15.$ (aterial:

    / 3%s das cores que queiras conectados nos pins /, B,

  • 7/26/2019 Arduino Xornadas Apetega

    23/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    15. 4r"ctica 8 coche fantstico.

    *rogramas:

    &5 .EDs consecutivos8 imos ordenar que se acendan e se apaguen os 3%sun a un, de forma consecutiva. -amn configuramos os 3%s como sa"damediante a funcin for.

    // Declaracin de variables:

    int te.po = $""; && e-ni.os a varia5le te.po %un valor de $"".s

    // Confguracin:

    void setup() {

    >or (int n=B; nJ=13; nDD) { && #ep/tese desde o B ata o 13 o seguinte

    pinMode(n, !*+*); && I.os %on-gurando os pins %o.o sa/da

    }

    }

    // Prograa

    void loop() {

    >or (int n=B; nJ=13; nDD) { && #ep/tese desde B ata 13 o seguinte

    digitalWrite(n, HIGH); && 4%ende o ' n

    dela(te.po); && 4garda o te.po .ar%ado na varia5le te.po

    digitalWrite(n, !W); && 4paga o ' n

    dela(te.po); && 4garda o te.po .ar%ado na varia5le te.po

    }

    }

    95 6oche fant"stico: *ara conseguir o efecto do coche fantstico engadimos un bucle descendente aoprograma anterior.

    >or (int n=1$; n=L; n) { && #ep/tese desde 1$ ata L o seguinte

    digitalWrite(n,HIGH);

    dela(te.po);

    digitalWrite(n,!W);

    dela(te.po);

    }

    *ropostas:

    &5 4r"ctica a5 @ai un xogo de luces que quede chulo .

    23

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    24/30

    11. (otores e servos

    *odemos conectar nosa placa Arduino diversos tipos de motores. Imos ver as caracter"sticas de cada un.

    11.1 -ipos de motores

    (otores de corrente continua

    &tiliDaremos este motor se s necesitamos movemento pero non precisin, pois nonpoderemos controlar a posicin do eixe.

    3stes motores en xeral non poden ser alimentados directamente a travs dun pin de Arduino, xa quenecesitamos unha maior intensidade. Isto solucinase conectando o motor a un circu"to amplificador cun

    transistor.-amn podemos utiliDar un circu"to integrado especial para o control de motores 8*or exemplo $

  • 7/26/2019 Arduino Xornadas Apetega

    25/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    11.$ 4r"ctica &?: A posicin dun servo

    Imos controlar a posicin dun servo de rotacin estndar mediante programacin.

    (ontaxe:6onexin: A"nda que depende de cada fabricante, en xeral o cable vermello vai a 40,o negro#marrn a terra 8>'%9 e o branco#amarelo#laranxa o que recibe o sinal do pin arduino. Imosconectalo ao pin

  • 7/26/2019 Arduino Xornadas Apetega

    26/30

    *rogramacin:

    ,include -.ervo01 Incl5e a li"rera #ser!o$ para poder utili3ar as uncins 0ue cont-n.9etch ?@ Importar +i"rara ?@ 9er!o

    .ervo euservo% 4rea unha !aria"le co nome do ser!o

    euservoattac0"Pin$% Indica en 0ue pin est2 conectado o ser!o.

    euservo2rite"3ngulo$% 9it5a o eixe do ser!o na posicin indicada.

    *rogramas:

    &5 Jirar un "ngulo determinado: *odemos controlar exactamente a posicin 8ngulo9 que queremos quete?a o servo en cada momento

    in%lude J?ervo:N && I.porta.os a li5rer/a servo

    // Declaracin de variables:

    ?ervo .euservo; && [email protected] no.e ao servo 8.euservo8

    // Confguracin:

    void setup() {

    .euservo:atta%N(A); && Indi%a.os 6ue est7 %one%tado no pin A

    }

    // Prograa:

    void loop()

    {

    .euservo:rite("); && MEvese ata a posi%iEn de "O

    dela ($""");

    .euservo:rite(1L"); && MEvese ata a posi%iEn de 1L"O

    dela ($""");

    .euservo:rite(9"); && MEvese ata a posi%iEn de 9"O dela ($""");

    }

    *roba outras posicins entre 5 e 1B5 e observa o resultado.

    26

  • 7/26/2019 Arduino Xornadas Apetega

    27/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    95 Kolpes: Imos facer que un servo xire lentamente ata unha posicin e despois cambie rapidamente posicin de partida.

    in%lude J?ervo:N && I.porta.os a li5rer/a servo

    // Declaracin de variables:

    ?ervo .euservo; && [email protected] no.e ao servo 8.euservo8

    // Confguracin:

    void setup() {

    .euservo:atta%N(A); && Indi%a.os 6ue est7 %one%tado no pin A

    }

    // Prograa:

    void loop()

    {

    .euservo:rite("); && ?itase na posi%iEn de "O

    dela ($""");

    >or(int i=1;iJ=1$";iDD) { && MEvese pou%o a pou%o ata 1$"O

    .euservo:rite(i);

    dela (2");

    }

    dela (1"""); && 4garda 1 segundo

    }

    *roposta:

    &5 4r"ctica &?a5 .entamente: (odifica o programa anterior para que tamn volva lentamente ata aposicin de 5T

    95 4r"ctica &?b5 Ao chou: @ai un programa de xeito que o servo xire a distintas posicins elixidas aochou.

    '5 4r"ctica &?c5 6al a sa posicinL: 3ngade o necesario ao programa anterior para visualiDar naconsola a posicin na que se atopa o servo.

    27

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    28/30

    11. 4r"ctica &&5 Control dun servo cun potencimetro

    Imos mover un servo en funcin da posicin dun potencimetro conectado a unha entrada analxica.

    Conectamos o servo ao pin < e un potencimetro entrada analxica A5

    *rograma:

    Imos transformar o valor lido na entrada analxica 8pot9 nun valor de xiro para o servo.

    in%lude J?ervo:N && I.porta.os a li5rer/a servo

    // Declaracin de variables

    int pot="; && varia5le 6ue le o valor do poten%iE.etro, entre " e 1"$3

    int 0iro="; && varia5le 6ue envia.os ao servo, entre " e 1L"

    ?ervo .euservo; && [email protected] no.e ao servo

    // Confguracin

    void setup() {

    .euservo:atta%N(A); && ?ervo %one%tado no pin A

    .euservo:rite(0iro); && +oCe.os o servo ini%ial.ente na posi%iEn de "O

    }

    // Prograa:

    void loop() {

    pot = analog#ead(4"); && 4signa.os a varia5le 8pot8 ao valor lido en 4"

    0iro = .ap(pot,",1"$3,",1L"); && al%ula.os o valor %orrespondente para o 0iro

    .euservo:rite(0iro); && >a%e.os 0irar o servo ata a posi%iEn 0iro

    dela($"); && Hai 6ue introdu%ir un pe6ueno te.po

    }&5 4r"ctica &&a5 ;utro rango: @ai que co xiro do potencimetro o servo s se mova de 5 a

  • 7/26/2019 Arduino Xornadas Apetega

    29/30

    Introducin a Arduino. XIV Xornadas de tecnoloxa de Galicia. http://tecnoloxia.org

    1$. Rogando co son

    'esta seccin imos facer que se emitan diferentes sons utiliDando condicionais.

    1$.1 @uncins

    1$.$ 'otas: 1$. (aterial:ota ome *rec+encia

    Do 4J (=1.=)

    e DJ (B).=K

    i EJ )(B.=)

    La LJ )JB.()

    9ol GJ )B(.&&

    +a AJ JJ&.&&

    9i MJ JB).NN

    3%s 8verdes, vermellos e amarelos9 8pins 1, 1$, ...9

    1 *ulsador de contacto 8pin $9

    2esistencias: *ara os 3%s: 4;5N 8ou outro valor menor que 1GN9

    *ara os pulsadores:15GN

    &n Dumbador pieDoelctrico ou no seu lugar un altofalante de BN

    de impedancia cunha resistencia de 155N conectada en serie conel. 8pin 9

    1$. (ontaxe:

    29

    http://tecnoloxia.org/http://tecnoloxia.org/http://tecnoloxia.org/
  • 7/26/2019 Arduino Xornadas Apetega

    30/30

    1$.4 4r"ctica &9: (elod"a

    Imos facer que un altofalante conectado nunha sa"da dixital emita unha melod"a

    Creamos unha variable para detectar o estado do pulsador &tiliDamos a funcin tone)pin0frecuencia0duracin*para definir o son

    // Declaracin de variables:

    %onst int pulsador=$; && e-ni.os o pulsador no pin $

    %onst int alto>alante=K; && e-ni.os o alto>alante no pin K

    int estado="; &&Ini%ial.ente o estado do pulsador @ " (desa%tivado)

    // Confguracin:

    void setup() {

    pinMode(K,!*+*); && on-gura.os o pin K %o.o sa/da}

    // Prograa:

    void loop()

    {

    estado = digital#ead(pulsador);

    i>(estado==HIGH)

    {

    tone(K,1""",$""); && 1""" HF durante ":$s

    dela(K""); && 4garda ":Ks

    tone(K,12"",3""); && 12"" HF durante ":3s

    dela(K""); && 4garda ":Ks

    tone(K,$""",2""); && $""" HF durante ":2s

    }

    }

    *ropostas:

    Conecta dous interruptores e dous 3%s, con cadansKas resistencias de proteccin e, utiliando asfuncins condicionais0resolve os seguintes problemas:

    &5 4r"ctica &9a5 Con e luces8 (ellora do programa H(elod"a: @ai que ao premer un botn soe unhamelod"a de maneira sincroniDada co acendido e apagado duns 3%s.

    95 4r"ctica &9c5 Cintetiador8 &tiliDa varios pulsadores para crear un sintetiDador musical. *orexemplo, con $ pulsadores p1 e p$, ao premer no p1 prodKcese un ton de 55MD cunha duracinde 155ms, e se prememos no p$ prodKcese un ton de $;55MD cunha duracin de $55ms.

    '5 4r"ctica &9d5 7ariando as notas: Conecta un potencimetro e fai que ao mover o cursor cambiea frecuencia do ton emitido polo altofalante, desde a nota do a $;1.; MD ata o si a