viernes, 9 de noviembre de 2012

ARDUINO




INTRODUCCIÓ

Arduino és una placa de codi lliure, amb un suport software bastant bo, que permet editar, compilar i transferir el programa a la placa; però arduino és molt més i te un joc d'instruccions molt senzilles, i molt ben explicades  a la seva pròpia web (http://arduino.cc/en/Reference/HomePage). Els inconvenients que presenta, és el seu preu(a partir de 23€) i la poca flexibilitat del hardware(impossibilitat de substituir components...). En conjunt, arduino es una eina que s'utilitza per crear prototips de robòtica.


PRIMERS PASSOS

El primer pas és descarregar-nos el software de la web d'arduino http://arduino.cc/en/Main/Software pel sistema operatiu que disposeu (personalment vaig provar d'instal·lar-lo a Linux i em va portar bastants problemes, aixi que ho explicaré per Windows).
Un cop hem descarregat el programa, el descomprimim, i desprès connectem la placa mitjançant un USB i seguim les següents instruccions:


anem a administrador de dispositius("device manager"):

seleccionem buscar software manualment("browse my computer for drive software"):


busquem el directori on hem descomprimit la carpeta d'arduino:

seleccionem instal·lar igualment("install this driver software anyway"):

quan acabi d'instal·lar ens hem de fixar a quin port("COM") tenim connectada la arduino, i executem el programa "arduino" que està dins a la carpeta que hem descomprimit:

seleccionem el model d'arduino que tinguem connectat:

per últim hem de seleccionar al port que tenim connectada la placa("COM") i llestos, ara ja podem començar a treballar:


COMENÇA LA PROGRAMACIÓ

L'estructura d'un programa per microcontrolador sempre és semblant, acostumen a ser programes iteratius(evitem recursivitat en microcontroladors, ja que la capacitat d'emmagatzemar adreces de retorn és limitada i probablement fallarà), com a programació bàsica, i més endavant introduir les interrupcions i els timers.
El programa típic per començar és un programa que encén i apaga un led connectat a una pota(es pot endollar directament el led de la pota a terra), el codi en arduino seria el següent:



void setup() {      // la runtins setup només s'executa un cop
      pinMode(2, OUTPUT);      // configura la pota 2 com a sortida
}

void loop() {        // la rutina loop s'executara sempre quan acabi tornarà a començar 
      digitalWrite(2, HIGH);   // posa a 1 logic(5v) la pota 2
      delay(1000);                      // pausa d'un segón
      digitalWrite(2, LOW);    //envia un 0 lògic(0v) a la pota 2
      delay(1000);
}


i per últim ensenyar un projecte que he dut a terme amb una arduino UNO. El codi és el següent:


/*Programa que controla 3 servomotors connectats als ports 9, 10 i 11, dels quals 2 es controlen mitjançant la lectura de 4 ports digitals(dels ports 5-8), els quals és configuren com a pull-up, i l'altre servomotor controlat per un potenciòmetre conectat a A0. És fa un bucle infinit on és comprova l'estat dels pins d'entrada i és re-calculen les posicions dels servos.*/

#include <Servo.h>

Servo servo1, servo2, servo3;       // declaració d'objectes de la classe servo
int pos1, pos2, potenciometre;     // enters auxiliars per acomular la posició dels servos

void setup(){
  pinMode(5, INPUT_PULLUP);     // configura els ports com a entrades amb pull up
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  servo1.attach(9);                            // rutina per incialitzar el servo conectat a la pota 9
  servo2.attach(10);
  servo3.attach(11);
  pos1 = pos2 = 0;                               // inicialitza les posicions dels servos a 0 graus
  servo1.write(pos1);                       // transfereix aquesta senyal a les potes
  servo2.write(pos2);
}

void loop(){
    if(digitalRead(5) && pos1 < 179) ++pos1;    // incrementa la posició del servo 1 si, la
// lectura de la pota 5 és 1(lògic) i la posició del servo és menor de 179
    if(digitalRead(6) &&pos1 > 1) --pos1;
    if(digitalRead(7) && pos2 < 179) ++pos2;
    if(digitalRead(8) && pos2 > 1) --pos2;
    potenciometre = analogRead(A0);                // fa una lectura analogica de la pota A0
    potenciometre = map(potenciometre, 0, 1023, 0, 180);    //la lectura analògica d'un
// port és entre 0 i 1024, amb aquesta funció la transforma entre 0 i 180
    servo1.write(pos1);
    servo2.write(pos2);
    servo3.write(potenciometre);
    delay(20);
}




 /*a la foto es pot veure que a  més vaig instal·lar un "pont h"(l293) per poder controlar el motor de corrent continua de la base*/


Com veieu, el codi per programar amb arduino és molt simple, fer un codi aixi et pot portar poc més de mitja hora(depenent de l'habilitat programant), i aquest mateix codi en c podria portar diverses hores, és per aquesta raó per la qual cada dia més gent utilitza aquesta eina.

Si teniu algun dubte sobre aquest post o sobre arduino en general, no dubteu en deixar un comentari al post o enviar-me un correu electrònic.

domingo, 28 de octubre de 2012

INTRODUCCIÓ

Benvinguts a robòtica en català, com indica el seu nom, aquest és un blog destinat a compartir projectes de robòtica, jo mateix aniré compartint els projectes que dugui a terme, però si algú vol donar a conèixer un projecte propi, només me l'ha d'enviar a l'adreça de correu castrosalvadojosep@gmail.com, entre tots, podem aconseguir posar en comú uns coneixements molt dispersos a la xarxa.
Qualsevol dubte que tingueu, només fa falta que deixeu un comentari al post  corresponent o que m'envieu un correu electrònic.
Gràcies