10 de maig del 2011

Primers moviments (Robot econòmic)

Un cop definits els materials més barats, i construït el robot, iniciem els primers moviments d'aquest.
El primer objectiu és fer moure el robot endavant. Amb una sèrie de ordres donades al microprocessador i el driver de motor podem controlar si la roda girarà endavant o al contrari, i la velocitat amb que girarà. El programa que hem utilitzat en la programació del robot és el PICAXE Programing Editor.
Com que en la construcció del robot hem utilitzat servomotors trucats, hi ha una petita diferencia entre els dos, de manera que encara ficant el mateix valor (digital) en la programació de velocitat el robot es desvia cap a un cantó.

Per tal de facilitar la programació en un futur hem fet una gràfica amb el valor digital de la velocitat d'una roda, en funció de l'altra.



Amb aquesta taula, els valors entre els que hem trobar perquè el robot vagi recte seran més fàcils de trobar, per tant el primer objectiu ja està assolit.

6 de maig del 2011

Robot econòmic final

En aquest cas analitzarem el materials que necessitem per la construcció del robot econòmic.




5 de maig del 2011

Comparativa de l'electrònica de comandament

Pel comandament del robot tenim dues possibles formes per fer-ho. Una d'elles amb un baby orangutan, l'altra amb la unió d'un microprocessador PICAXE i un driver de motors.

Baby Orangutan
El baby orangutan consta d'un driver de motor i un microprocessador units de fabrica formant una placa amb altres components que en milloren el rendiment, aquest producte el podem trobar a la web de polulu, el seu cost és elevat.
El microprocessador que utiliza es el ATmega48 i un driver de motor LB1836M.




Característiques del driver de motor

·Baix voltatge de l'operació (2,5 V min)
·Baixa tensió de saturació
·Connexió en paral·lel
    (Transistor d'Alta + transistor menor tensió residual; 0,5 V
    típic de 800 mA).
. Separar la lògica d'alimentació i alimentació del motor
. Funció de fre
. circuit de desconnexió tèrmica construïda en
. paquet compacte (14 pins MFP)


Característiques del microprocessador

 L'alt rendiment, baix consum d'Atmel de 8 bits del microcontrolador AVR RISC combina 4 KB de memòria flash ISP, de 512 bytes de SRAM, 256 octet EEPROM, un 8-channel/10-bit A / (convertidor D TQFP i QFN / FML), i debugWIRE per a la depuració en el xip. Opera entre 2,7-5,5 volts.






PICAXE 18M2 i L293D
En aquesta forma els components s'han d'unir de forma manual però és més barata que l'anterior. El PICAXE 18M2 és el més petit que podem trobar amb dues sortides polsades per controlar la velocitat dels motors. 
L'integrat L293D inclou quatre circuits per manejar càrregues de potència mitjana, especialment petits motors i càrregues inductives, amb la capacitat de controlar corrent fins a 600 mA en cada circuit i una tensió entre 4,5 V a 36 V.

Característiques del  PICACE 18M2
-256 bytes de memòria RAM.-256 bytes de memòria EEPROM no volàtil de dades.
-Ressonador intern més ràpid (fins 32MHz) és de fins a 8 vegades més ràpid que el programa de processament.
-Capacitat de memòria (en bytes) 2.048 128.256 2.048
-Max. Capacitat de memòria (línies) 1.800 110.220 1.800



Característiques del driver L293D
-Entrada lògica separada de la font.
-Protecció interior ESD.
-Entrades amb alta immunitat al soroll.
-Corrent de sortida de 1A per canal. 
-Pic de corrent de sortida 2A per canal




4 de maig del 2011

Inici de programació del robot professional

Bé, un cop construit el nostre robot, el qual creiem que esta format dels millors elements i materials possibles, el que ens toca és començar a iniciar el moviment del robot.


De moment només hem aconseguit que el robot fagi algunes petites ordres, però cal comentar que acabem d'iniciar la programació i que d'aqui uns dies ja la dominarem i aconseguirem que el robot segeixi la línia blanca amb la màxima velocitat possible, el qual es l'objectiu principal.


El microcontrolador que porta la placa Baby Orangutan del robot és un Micro Atmega 328P. Per a programar-lo utilitzarém el connector AVRISP, la funció d'aquest és portar les ordres del ordinador al microcontrolador. Per a programar-lo utilizem un programa anomenat AVR estudio 4.


Per a començar em iniciat tres moviments fàcils:



  • En apretar el polsador que el led faci pampallugues:

#include
int main()
{
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4))
{
}
while(1)
{
red_led(1);
delay_ms(100);
red_led(0);
delay_ms(100);
}
}


Amb aquest programa aconseguim que en cas de que no es pitgi el polsador el led es queda apagat, però quan el pitgem aquest comença a fer pampallugues amb un interval de 100 milisegons .





  • Programa per fer girar el robot cap a l'esquerra, la dreta i l'esquerra una atra vegada:


#include
int main()
{
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4))
{
}
while(1)
{
delay_ms(500);
set_motors(20,-20);
delay_ms(500);
set_motors(-20,20);
delay_ms(1000);
set_motors(20,-20);
}
}


Per a fer aquest programa hem utilitzat la mateixa metodologia que per a fer les pampallugues del led, però en aquest cas el que fem es moure els dos motors del robot.





  • Programació del moviment de va i be:


#include
int main()
{
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4))
{
}
delay_ms(500);
for (char i = 0; i < 80; i++)
{
if ((i<21) (i>59))
{
set_motors(20,-20);
}
else
{
set_motors(-20,20);
}
delay_ms(20);
}
set_motors(0,0);
}


Aquest programa funciona de manera diferent que els dos anteriors. El que fem ara és que el microcontrolador conti el temps, i segons en quin instant es troba ha de fer un moviment o un altre. Aquest programa ens anirà bé per a què en iniciar les curses amb el robot rastrejador, aquest faci el moviment abans de començar i així els sensors reculleixin la informació dels canvis de llum que troba al terra.



·Lectura sensors:

Aquesta part del programa serveix per a detectar el color sobre el qual es despaça el robot, cada
sensor detecta un color, i això serveix per detectar on esta la linia que ha de seguir el robot.
Aquestes dades senvien al programa Putty que enregistra les dades captades pel sensors.

#include
#include
unsigned int sensors[8]; // array amb les lectures dels sensors
unsigned char qtr_analog_pins[] = {7, 6, 0, 1, 2, 3, 4, 5}; // com estan col·locats els sensors
char buffer[4]; // buffer per realitzar la conversio enter - ascii
int main()
{s
erial_set_baud_rate(9600);// velocitat comunicacio serie
qtr_analog_init(qtr_analog_pins, 8, 3, IO_D7); // 8 sensors, 3 mostres per sensor. emissor D7
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4))
{
}
while(1)
{
delay_ms(500);
qtr_read(sensors, QTR_EMITTERS_ON); // lectura analogica dels sensors
qtr_emitters_off(); //apaguem els sensors
for (char i = 0; i < 8; i++)
{
sensors[i]=1024-sensors[i];
itoa(sensors[i],buffer,10); // convertim a ascii la lectura del sensor i
serial_send(buffer, 4); // ho enviem pel port serie
delay_ms(10); // esperem
serial_send(" ", 1); // espai
delay_ms(10); // esperem
}s
erial_send("\r\n",2); // canvi de linia
}
}

·Detecció de la posició del robot.

Una vegada tenim els valors obtinguts pels sensors hem de determinar la posició en la qual es troba el robot respecta la línia blanca. D'aquesta manera el podrem corregir per tal de que sempre tingui els dos sensors centrals sobre la línia.


#include
#include
unsigned int sensors[8]; // array amb les lectures dels sensors
unsigned char qtr_analog_pins[] = {7, 6, 0, 1, 2, 3, 4, 5}; // com estan col·locats els sensors
char buffer[4]; // buffer per realitzar la conversio enter - ascii
int main()
{s
erial_set_baud_rate(9600);// velocitat comunicacio serie
qtr_analog_init(qtr_analog_pins, 8, 3, IO_D7); // 8 sensors, 3 mostres per sensor. emissor D7
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4))
{
}
while(1)
{
delay_ms(500);
qtr_read(sensors, QTR_EMITTERS_ON); // lectura analogica dels sensors
qtr_emitters_off(); //apaguem els sensors
unsigned int suma=0;
for (unsigned char i = 0; i < 8; i++)
{
sensors[i]=(1024-sensors[i])/10;
suma= suma+sensors[i];
itoa(sensors[i],buffer,10); // convertim a ascii la lectura del sensor i
serial_send(buffer, 4); // ho enviem pel port serie
delay_ms(10); // esperem
serial_send(" ", 1); // espai
delay_ms(10); // esperem
}s
erial_send("\r\n",2); // canvi de linia
itoa(suma,buffer,10);
serial_send(buffer, 4);
delay_ms(10); // esperem
serial_send("\r\n",2);
unsigned int posicio= (10*sensors[0] + 20*sensors[1] + 30*sensors[2] + 40*sensors[3] +
50*sensors[4] + 60*sensors[5] + 70*sensors[6] + 80*sensors[7])/suma;
itoa(posicio,buffer,10);
serial_send(buffer, 4);
delay_ms(10); // esperem
serial_send("\r\n",2);
}
}


·Funcionament robot amb control proporcional

Quan ja tenim la posició per a poder corregir la posició del robot fem servir l'error proporcional per a variar les velocitats de cadascuna de les rodes, depenent del sentit de la corba. D'aquesta manera el robot sempre seguira la línia blanca.

#include
/*
* motors1: for for the Orangutan LV, SV, SVP, X2, Baby-O and 3pi robot.
*
* This example uses the OrangutanMotors functions to drive
* motors in response to the position of user trimmer potentiometer
* and blinks the red user LED at a rate determined by the trimmer
* potentiometer position. It uses the OrangutanAnalog library to measure
* the trimpot position, and it uses the OrangutanLEDs library to provide
* limited feedback with the red user LED.
*
* http://www.pololu.com/docs/0J20
* http://www.pololu.com
* http://forum.pololu.com
*/
int main()
{
unsigned char velocitat=115;
int cp=0;
int kp=30;
int posicio=50;
int posicio_ant=50;
unsigned int sensors[8]; // array amb les lectures dels sensors
int sensors_max[]={86, 97, 100, 100, 100, 100, 100, 100};
int sensors_min[]={14, 14, 25, 27, 28, 33, 29, 31};
unsigned char qtr_analog_pins[] = {7, 6, 0, 1, 2, 3, 4, 5}; // com estan col·locats els sensors
qtr_analog_init(qtr_analog_pins, 8, 3, IO_D7); // 8 sensors, 3 mostres per sensor. emissor D7
set_digital_input(IO_D4,PULL_UP_ENABLED);
while(is_digital_input_high(IO_D4));
{}
delay_ms(500);
// aqui caldria posar la sequencia del polsador per iniciar.
while(1)
{
posicio_ant=posicio;
qtr_read(sensors, QTR_EMITTERS_ON); // lectura analogica dels sensors
qtr_emitters_off(); //apaguem els sensors
// delay_ms(500); // esperem
unsigned int suma=0;
for (unsigned char i=0;i<=7;i++) // sumem valors i escalem perque no surti d'escala. Linia
blanca, fons negre
{
// sensors[i]=(sensors[i])/10; //fons blanc
sensors[i]=(1024-sensors[i])/10; //fons negre
if (sensors[i]>=sensors_max[i])
{
sensors[i]=100;
}else if (
sensors[i]<=sensors_min[i])
{
sensors[i]=0;
}else
{
sensors[i]=100*(sensors[i]-sensors_min[i])/(sensors_max[i]-sensors_min[i]);
}suma=suma +
sensors[i];
}
if (suma>100)
{
posicio=15*sensors[0]+25*sensors[1]+35*sensors[2]+45*sensors[3]+55*sensors[4]+65*sensors[5]
+75*sensors[6]+85*sensors[7];
posicio=posicio/suma;
}
else
{
if (posicio_ant<50)
{
posicio=15;
}else
{
posicio=85;
}
}
// ara que tenim la posicio, calcularem els errors
cp= kp*(posicio-50)/10;
if (cp>0)
{
if (cp>velocitat)
{
cp=velocitat;
}s
et_motors(-velocitat,-(velocitat-cp));
}else
{
if (cp<-velocitat)
{
cp=velocitat;
}s
et_motors(-(velocitat+cp),-velocitat);
}
}
}


A partir de canviar les variables de velocitat i de la constant, l'error proporcional canvia i podem fer que augmenti la rapidesa.

1 de maig del 2011

Robot Final

, un cop buscada tota la informació necessaria per a construir un robot rastrejador, vam veure que teniem dues opcións a l'hora de triar els materials i components amb que el voliam construir.



La primera opció és construir un robot amb el mínim cost possible i la segona opció és construir un robot que vagi el més ràpid possible, per a aconseguir-ho necessitem els materials menys pesants, més rendibles i més cars (robot professional).



En el nostre cas analitzem quins són els materials que necessitem per a la costrucció del robot professional.













Quantitat Peça enllaç pes (grams) Preu (€) mida (mm)






1 placa sensors QTR-8A http://www.pololu.com/docs/0J12/all 3,1 14,95 74,90 x 12.52
2 Barres de carboni


152,41 de llargada x 2,04 de diametre
1 Lipo Hyperion
6,5 7,75
1 Placa Baby Orangutan B-328 http://www.pololu.com/catalog/product/1220 1,5 19
2 Motor pololu 10:1 http://www.pololu.com/catalog/product/999 1 16
2 Rodes
23,2

1 polsador



2 Adaptadors del motor



4 cargols i femelles



1 Polulu Adjustable Boost Regulator 4-25V http://www.pololu.com/catalog/product/799 1,6 12
1 tira de cables



1 placa PCB


137,76 X 45,34
2 condensadors










total
58,5

29 d’abril del 2011

Material per a la construcció d'un robot econòmic

L'altra alternativa és fer un robot econòmic, amb l'inconvenient de que serà més pesat.
Aquí mostrem una taula on hi apareix el preu i pes de cada element:



Les piles estan en sèrie que donen 7,4 V amb el regulador de tensió corresponent.
Els motors, són servos trucats, on s'hi acoplava unes rodes reciclades dels ratolins d'ordinador.

20 d’abril del 2011

Tipus d'alimentació

Sabem que el robot funciona a una tensió de 5V. Les nostres bateries de tipus LiPo funcionen a un voltatge de 3,7V, per tant, podem dissenyar dos tipus de circuits per aconseguir l'alimentació de 5V.


La primera opció és el circuit amb dues bateries LiPo i un regulador de tensió 7805 i la segona opció es el circuit amb una bateria LiPo i un regulador de tensió Step-up.


Circuit amb dues bateries LiPo i un regulador de tensió 7805




Per a aquest circuit s’utilitzen dues bateries LiPo, les quals tenen una tensió de 3,7 v, com que nosaltres necessitem una sortida de 5 volts, n’utilitzem dues i amb el regulador de tensió fem que tinguin una sortida de 5 volts.



El regulador que utilitzem un regulador 7805. Que té un preu de 1,60 €.

Suposant que les bateries estan en serie la tensió total seria de 7,4 volts.



En la següent fotografia es pot observar un exemple de placa per a generar els 5V.



És important saber quin consum tindran les bateries per veure quin dels dos sistemes és més eficient. Per a comprovar-ho em fet un seguit de càlculs per a saber a quina intensitat funcionen les bateries. Si posem com a ex emple que la potencia final es de 5 w, vol dir que la intensitat del circuit es d’1 amper (I=(P/V)=(5v/5W)=1A) . En aquest cas i suposant que el rendiment del regulador de tensió és del 90 %, voldria dir que les bateries només necessitarien 750 mA de intensitat.



Circuit amb una bateria LiPo i un regulador de tensió Step-Up




Per al segon tipus de circuit necessitem una bateria LiPo i un regulador de tensió Step-Up. La funció d'aquest regulador és pujar el voltage del circuit de 3,7 a 5 volts. Per tant la intensitat que necessita també variarà.


Per a regular la tensió utilitzar em una placa Pololu Adjustable Boost regulator 2.5-9.5 V.
Aquesta té un preu de 11,95€ i pot regular la tensió de 2 a 12 volts.


En la següent fotografia es pot observar la placa per a generar els 5V.


Les mides de la placa són de 10,16 x 17,78 x 4 mm.




Ajust de la tensió de sortida

La tensió de sortida es pot ajustar amb un metre i una càrrega lleugera (per exemple, una resistència de 1k). Girant el potenciòmetre en sentit horari augmenta la tensió de sortida. La tensió de sortida es pot veure afectada per un tornavís tocar el potenciòmetre, de manera que la mesura de la producció hauria de fer-se sense res de tocar el potenciòmetre. El potenciòmetre no límits físics, el que significa que els eixugaparabrises es pot girar 360 graus i en una regió no vàlid en el qual s'estableix la tensió de sortida de 2,5 V (per al V 2,5-9,5 V i 4 V a 25 V versions ). El voltatge d'entrada no ha de superar la tensió de sortida, per la qual cosa es recomana ajustar la tensió de sortida amb la tensió d'entrada del sistema al voltant de 2,5 V.



De la mateixa manera que en el circuit anterior, també fem els mateixos càlculs per a veure el consum de la bateria.Com en el cas anterior, si posem com a exemple que la potencia final es de 5 w, vol dir que la intensitat del circuit es d’1 amper. Sabem que le regulador de tensió step-up té un rendiment del 55-65%, voldria dir que la bateria consumirà 2,25A, això és un consum molt més elevat que en el primer cas.



Conclusions


Tenim en compte que el segon métode d'alimentació és més car i consumeix més energia, per tant la seva durada sense canviar la bateria és molt menor que la del primer métode. Però sabem que el nostre circuit es fa en aproximadament uns 10 segons, això significa que no necessitem que el robot funcioni molta estona, sinò que l'unic que necessitem és que funcioni poca estona i molt ràpidament. Per tant creiem que la millor manera per a alimentar el robot es amb el regulador de tensió Step-Up.