10 de maig del 2011
Primers moviments (Robot econòmic)
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
5 de maig del 2011
Comparativa de l'electrònica de comandament
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)
-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
4 de maig del 2011
Inici de programació del robot professional
- 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
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
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ó
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.
Aquesta té un preu de 11,95€ i pot regular la tensió de 2 a 12 volts.

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

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 té 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.
Els sensors
Aquesta placa és un dispositiu a la venda, format per 8 sensors de llum. En cas de voler utilitzar aquest dispositiu per al robot únicament cal comprar-lo i incorporar-lo al robot. D'aquesta manera ja esta feta una gran part de la placa i només caldria fer-ne una de petita per a incorporar l'alimentació.- Preu: 14,95 $
- Té un consum de 100 mA.
- Redueix a la mitat el consum de corrent.
- Cada sensor proporciona una sortida independent del voltatge.
- Dimensions: 2.95 "x 0.5" x 0.125 "
- Gamma del voltatge de sortida: 0 V de la tensió d'alimentació- Òptima distància de detecció: 0.125 "(3 mm)- Distància de detecció màxima recomanada: 0.25 "(6 mm)- Pes sense passadors encapçalat: 0,11 unces (03/09 g)
Sensors CNY 70
El CNY-70 es un petit dispositiu amb forma de cub i amb quatre potes. Són uns petits sensors de llum en els quals l'emisor de llum esta en la mateixa direcció que el receptor. Per a aconseguir fer un dispositiu de 8 sensors com en el cas anterior s'ha de seguir l'exemple de conexió de l'esquema de la última imatge.
Les característiques més importants són un baix cost de cada sensor, pot variar una mica segons el lloc on es compri, el pes: 0,70 grams, les dimensions: 7 x 7 x 6 mm, voltatge de 5V, intensitat de 30mA i una poténcia de 100mW.

Conclusions:
15 d’abril del 2011
Velocitats
En el polulu 30:1 s'utilitzaria la R1
En el TG9e (petit) podríem triar entre la R3 i la R4 segons l'eix de sortida del motor.
10 d’abril del 2011
Disseny del circuit per al robot
Cal comentar alguns aspectes importants del circuit:- El circuit esta mesurat en metres
- La longitud total de la línea 8,92 metres
- la velocitat mitjana és de 1,56 m/s
- la velocitat màxima és de 2 m/s
Rodes
Una roda amb un gran diametre, ens permetrà una velocitat major per al robot, en canvi, la acceleració serà més lenta i la distància necesària per frenar el robot serà major, ja que agafa més inèrcia.
7 d’abril del 2011
Bateries LiPo RC
Aquest tipus de bateries són recarregables, lleugeres i poden agafar qualsevol forma. Són bateries que tenen grans capacitats. Però acostumen a ser més cares que altres tipus de bateries. A més, tenen algun problema de seguretat, com per exemple, que són imflamables i poden explotar.
Podem distingir dos tipus de bateries, les Ion i les de polimer. Les principals diferències entre aquestes dues són el tipus d’electròlit que utilitzen i el material del qual estan fetes les bateries. També trobem les LiPo híbrides que estan millorades respecte les altres dues ja que son més lleugeres. Abans s’utilitzaven més les Ion, actualment s’utilitzen més les de polímers.
Valoració de les bateries LiPo RC
Tensió
Les cèl·lules de les bateries LiPo s'han valorat en 3,7 Volts per cel·la. Les bateries RC tindran dos o més cèl·lules connectades en serie per proporcionar voltatges més elevats.
Per a indicar el nombre de cèl·lules connectades en serie s'utilitza la lletra S:
-3,7 Volts = 1 cèl·lula x 3,7V
-7,4 Volts = 2 cèl·lula x 3,7V (2S)
També és important saber que les cel·les connectades en paral·lel augmenten la capacitat. Això s'indica mitjançant la lletra P.
Per tant, per a calcular la tensió que acomulen s'ha de multiplicar el nombre de cèl·lules connectades en sèrie per la tensió d'una sola, d'aquesta manera obtenim la tensiò total. Per a calcular la capacitat utilitzem el mateix mètode, pero en el cas del paral·lel.
V(n)= n · Vº
n= nombre de cèl·lules connectades en sèrie
Vº= tènsió d'una cèl·lula
P(n)= n · Pº
n= nombre de cèl·lules connectades en paral·lel
Pº= capacitat d'una cèl·lula
Capacitat
La capacitat indica la quantitat d'energia de la bateria que pot mantenir i s'indica amb mil·liampers hora (mAh). En el cas d'un avió, per exemple, per augmentar el temps del vol cal augmentar la capacitat.
Velocitat de descàrrega
És la velocitat amb que una bateria es pot descarregar de forma segura. En el món de les bateries LiPo RC es denomina amb la lletra C. Com més gran és el valor de C, en general, més cara és la bateria. És important no anar amb una baixa C de descàrrega per tal de no espatllar la bateria.
Per tant, en el cas en que una bateria té una capacitat de 1000mAh i una velocitat de descàrrega de 10C significa que pots descarregar-la a un ritme 10 vegades més alt que la capacitat de la bateria, en aquest cas podries descarregar-la a 10000mAh. Una bateria de 15C = 15 vegades el ritme més alt, i aixi successivament.
Regla del 80%: Mai s'ha de descarregar un pack LiPo més enllà del 80% de la seva capacitat per tal de no estar en perill.
Càrrega de les bateries LiPo RC
Per a la càrrega de les bateries LiPo RC s’utilitzen uns carregadors molt especifics,.Aquestes bateries es poden carregar com a molt fins a 4.2 volts, que és el 100% de la seva carrega, un cop han arribat al 100% deixen de carregar-se automaticament. En aquest tipus de bateries s’utilitzen també equilibradors per a les cèl·lules.

- Es pot carregar múltiples cèl·lules LiPo (7,4V o més) amb envasos a prova de foc.
- Sempre s'ha de esperar com a mínim 15 minuts a carregar una Lipo després de fer-la servir.
- Mai sortir de casa quan s'està carregant una LiPo.
- Tenir un detector de fum allà on es carrega les bateries i un extintor aprop per si una d'elles explota.
- A l'hora de guardar les càrregues és important no deixar-les a la seva màxima carga.
- Guardar les bateries a temperatura ambient.
Càrrega de seguretat Aquí trobem uns quants consells simples de seguretat per la càrrega de les bateries LiPo:
Conclusió
Una vegada analitzades les bateries i totes les seves característiques, creiem que per a la construcció del nostre robot rastrejador utilitzarem una única bateria LiPo.















