Monthly Archives: abril 2015

El problema de Monty Hall

En un concurs, el concursant tria una porta entre tres, i el seu premi consisteix en el que es troba darrere. Una d’elles amaga un cotxe, mentre que a les altres dues hi ha una cabra. Llavors el presentador, que sap on és el cotxe, obre una de les portes que no has triat i mostra que darrere d’ella hi ha una cabra. El concursant ara té l’opció de canviar la porta  escollida. Ho ha de fer per tenir més probabilitats d’aconsseguir el cotxe, o no?
Aquest és el problema de Monty Hall, on molts matemàtics han estat discutint les probabilitats d’obtenir el cotxe canviant de porta o no. La majoria de matemàtics diuen que és el mateix, que les probabilitats són del 50% en cada porta.
Però una persona, Marilyn vos Savant, catalogada com la persona amb el quocient intelectual més alt del món, va dir que no, que tens més opcions d’obtenir el cotxe si canvies la porta que has triat inicialment. Marilyn va rebre molts correus de matemàtics acusant-la de donar una resposta errònia.
I tú, què en penses?

Si vols fer la prova, entra a la simulació i juga unes quantes vegades canviant de porta i no. Veuràs els resultats.

simulació

GIMP Pràctica 12: efecte petit planeta

Aquest efecte s’anomena “efecte planeta”, i anem a veure com es fa:
  • Tria una fotografia que tingui un horitzó el més horitzontal possible.
  • A la part superior de la fotografia seria idea tenir un cel blau, negre o qualsevol color el més sòlid i regular que es pugui com per evitar deformacions posteriors.
  • A la part inferior, com menys objectes hagi; millor.
  • Utilitza fotografies amb un ampli ample i poca alçada.
El que fem a continuació és escalar la imatge per fer que aquesta sigui un quadrat perfecte. Per això transformarem l’alt de la fotografia prenent l’ample com a base.
  • Vés a Imatge; Escalar Imatge
  • “Trenquem” la baula de proporcionalitat que es veu en la imatge entre els dos valors d’ample i alçada.
  • Amb això podrem modificar lliurement l’altura.
  • Modifiquem l’altura posant-li el valor de l’ample de la nostra fotografia.
La imatge et quedarà així:
  • Gireu la imatge.
  • Anem a Imatge> Transformar> Girar 180º

  • Ara és quan intentarem emular la projecció estereogràfica amb el filtre Coordenades Polars.
  • Anem a Filtre; Distorsions; Coord. Polars.
  • Al menú de Coordenades Polars posarem els següents valors:
  • Titllem Mapejar des dalt i A Polars
  • En Angle de desfasament utilitzin el que els sembli segons la seva fotografia. Jo vaig fer servir 230.
  • Amb això quedarà format el nostre planeta.

  • Afegim ambient i esborrem algunes imperfeccions. Ja tenim l’efecte aplicat, però hem de fer que aquestes línies d’unió en el cel dissimulin. Per a les cantonades blanques, pots prendre el color del cel i utilitzar el teu eina de farciment.
  • Per unir el farciment amb el cel, pots utilitzar l’eina de clonat així com també l’eina de gargotejat. Amb unes quantes línies, ja tindràs un cel homogeni.
  • I amb la mateixa tècnica podràs crear alguns núvols com les que es veuen en la imatge final.
  • Pots afegir també un lleu ajust de contrast i fins i tot utilitzar l’eina de marcatge a Foc / Cremar per enfosquir les vores de la teva planeta.
Quan acabis, exporta-la amb format jpg i penja-la al teu blog.
Fes un parell de composicions més per practicar

ARDUINO: Pràctica 7: Servomotor controlat per un potenciòmetre

Un servomotor és un motor que es caracteritza per la seva precisió, ja que pot situar-se en qualsevol posició dins d’un rang de gir, normalment de 0º a 180º. No són motors pensats per fer moure un vehicle que recorri certa distància, sinó per moviments de precisió com podria ser el d’un braç robot.

Són tres els cables de què disposa el servomotor, i hem connectar de manera correcta: 
  • Cable vermell: es connectarà a la tensió de 5 V. 
  • Cable negre: es connectarà a terra (0 V).
  • Cable blanc o taronja: es connectarà al pin de control (del 0 al 13).
Per al control dels servomotors Arduino posseeix una llibreria específica. Una llibreria és una col·lecció de funcions que estan especialment creades per facilitar el maneig de certs dispositius, i que no són carregades per defecte a Arduino. Algunes de les llibreries més utilitzades són les de control ús de: servomotors, motors pas a pas, pantalles de cristall líquid, matriu de LEDs, memòries SD, sensor d’ultrasò …
Amb el muntatge de sota, farem el control d’un servomotor usant un potenciòmetre. Aquest té el terminal del mig connectat a la sortida analògica A0, mentre que el servo està connectat a pin 9 digital. EL codi per l’Arduino el teniu a sota. Aneu movent el potenciòmetre per veure els diferents efectes sobre el servomotor. Munteu el següent circuit:

Entreu a bitbloq i copieu els següents blocs:

Aneu girant el potenciòmetre i veureu que el servo es va movent segons el valor pres a la variable mando.
La funció mapear serveix per fer proporcionals els 1023 valors de les entrades analògiques als 180º que gira el servo, de manera que quan el potenciòmetre valgui 0, l’angle serà 0, i quan valgui 1023, el servo girarà 180º.

PRÀCTICA AVANÇADA: Serieu capaços de controlar 2 servos amb 2 potenciòmetres?

ARDUINO: Pràctica 6: LED d’intensitat aleatòria

En moltes ocasions és molt útil utilitzar nombres aleatoris, seleccionats a l’atzar. Comportaments inesperats, sort, espontaneïtat, … són fruit d’usar nombres aleatoris. Vegem com treballar-los amb Arduino:
Abans de res, hem de configurar en el setup que Arduino comenci a generar nombres aleatoris, utilitzant l’ordre randomSeed ():
  • void setup() { randomSeed(0); }: genera un numero aleatori
  • randomSeed(analogRead(A5)): l’entrada analògica A5 agafa un valor analògic
Com a pràctica, simularem un LED com si es tractés d’una espelma, variant la intensitat de llum i la durada amb nombres aleatoris. Munteu el mateix circuit que amb la pràctica del blink, un LED connectat al pin 9.
Obriu bitbloq i podeu els següents blocs:
El codi queda de la següent manera:


void setup()
{
pinMode(9,OUTPUT);
}
void loop()
{
int brillo=random(100,256);
analogWrite(9,brillo);
int tiempo=random(50,151);
delay(tiempo);
}

  • int brillo; int tiempo: es defineixen dues variables,

  • pinMode(9,OUTPUT): el pin 9 té un led com a sortida (OUTPUT)

  • brillo=random(100,256): la intensitat agafa un valor aleatori entre 100 i 256

  • analogWrite(9,brillo): el led del pin 9 usa el valor brillo aleatori

  • tiempo=random(50,151): el temps de durada agafa valors aleatoris entre 50 i 151


ARDUINO: Pràctica 5: El potenciòmetre com entrada analògica

El potenciòmetre és un altre sensor d’entrada molt usat. Consta d’una resistència variable, que dependrà de la posició de gir en què es trobi la seva consola (o mànec). És molt important connectar el potenciòmetre de manera correcta per evitar que aquest es faci malbé (en cas de deixar passar tot el corrent per una secció del potenciòmetre de molt baixa resistència). Un potenciòmetre té tres potes:

La connexió amb arduino es fa a través del les entrades analògiques de la forma que es veu a continuació:


Per veure com funciona, farem una pràctica: encendrem 5 LEDs a través d’un potenciòmetre. Munteu el següent circuit amb la placa i l’arduino:

Obriu bitbloq, i poseu els següents blocs:



El codi del programa és el següent:
void setup()
{
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop()
{
int val=analogRead(A0);
if ((val >= 0) && (val < 204)) {
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
if ((val >= 204) && (val < 408)) {
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
if ((val >= 408) && (val < 612)) {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
if ((val >= 612) && (val < 816)) {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}
if ((val >= 816) && (val < 816)) {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
}

}
Mirem el programa.

  • val=analogRead(A0): El potènciometre està conenctat al pin A0.

  • if(val>=204 && val<408 b="">: el potenciòmetre pot agafar valors d'entre 0 i 1023. Com hi ha 5 LEDs, es divideix per 5 els valors de manera que segons el valor que tingui el potenciòmetre, se n'encendra 1, en aquest cas s'encendrà només el led1.




ARDUINO: Pràctica 4: LDR, funció analogRead

A les entrades analògiques es posen elements que poden donar més d’un valor, com ara un sensor de llum, LDR, que pot rebre diferents intensitats de llum i donar diferents valors de resistència. Aquests elements es connecten a les entrades analògiques (A0, A1, A2, A3, A4, A5), i la instrucció per connectar-lo a la placa Arduino és analogRead.
Sensors analògics poden ser:
  • LDR
  • Potenciòmetres
  • NTC, PTC
El valor de l’entrada (analogRead) està entre 0 i 1023, mentre que la sortida (analogWrite) és entre 0 i 255
Com a exemple, modificarem la intensitat de la llum d’un LED en funció de la llum ambiental. Per fer-ho, usarem un LED com element de sortida analògica (analogWrite) i un LDR com element d’entrada analògic(analogRead). La connexió del LDR es fa de la següent manera:

feu el muntatge de sota i comprobeu el funcionament. La resistència és de 1 kohm. Podeu provar diferents valors de resistència per veure el resultat
El codi és el següent:
void setup()
{
pinMode(9,OUTPUT); // es defineix el led al pin 9 com a sortida
}

void loop()
{
int val=0; // es declara una variable que serà el valor de LDR
val=analogRead(A3); // el LDR està ubicat a l'entrada analògica A3
val=val / 4; // es reajusta el valor del LDR per la sortida digital del led
analogWrite(9,val); // el led agafa la intensitat del valor del LDR
}

  • int val: es defineix una variable que es diu val
  • pinMode(9,OUTPUT): el pin 9 es defineix com de sortida
  • val=analogRead(A3): la variable val agafa el valor del LDR connectat al pin A3
  • val=val/4: es divideix per 4 el valor de l’entrada. Es fa perquè analogRead pot arribar fins 1023, i la sortida analogWrite només fins 255. Al dividir per 4, s’ajusten el valors.
  • analogWrite(9,val): el pin 9 agafa el valor recollit del LDR.
PRÀCTICA AVANÇADA
Connecta un segon LED de manera que mentre un s’apagui, l’altre s’encengui per l’acció del LDR

ARDUINO: Pràctica 3: Comptador binari

Les entrades digitals són interruptors, polsadors, sensors, qualsevol element que s’usi per controlar un element de sortida com un motor o un LED. digitalRead  dóna només dos valors, HIGH i LOW, ja que es tracta de senyals digitals. 
Per veure com funciona, farem un contador binari amb 3 LEDs, contant de 0 a 7. Fes el muntatge següent:
  • Tres leds als pins 6,7 i 8
  • Un polsador al pin 13

Copieu el codi al IDE d’Arduino
void setup()
{
pinMode(13,INPUT_PULLUP);// polsador a la sortida
pinMode(6,OUTPUT);// es defineixen els 3 leds
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}

void loop()
{
int val=0;// es defineix una variable que és la lectura del polsador
int x=0; // comptador de polsades del polsador
val=digitalRead(13); // es defineix l'entrada digital del poldador
if (val == HIGH) { // condició if, quan es pulsi el polsador, puja el comptador de pulsos
x=x + 1;
}
if (x == 8) { // quan el nombre de pulsos sigui 8, es reinicia
x=0;
}
if (((x == 1) || (x == 3)) || ((x == 5) || (x == 7))) { // si es compleixen aquestes 3 condicions, s'encen el led 6
digitalWrite(6,HIGH);
}else { // si no es compleixen el led s'apaga
digitalWrite(6,LOW);
}
if (((x == 2) || (x == 3)) || ((x == 6) || (x == 7))) {
digitalWrite(7,HIGH);
}else {
digitalWrite(7,LOW);
}
if (((x == 4) || (x == 5)) || ((x == 6) || (x == 7))) {
digitalWrite(8,HIGH);
}else {
digitalWrite(8,LOW);
}
delay(200);

}

  • digitalRead(13): el polsador està a la variable 13. Per escursar el programa es renombra com a val.
  • digitalWrite(6,LOW): hi ha les sortides digitals, en aquest cas la 6, que se li dona l'ordre LOW, apagat.
  • if(x==4 || x==5 || x==6 || x==7) digitalWrite(8,HIGH): si el que hi ha dintre els parentesi, es cumpleix, es produeix la instrucció que ve després, en aquest cas encen la sortida 8 (HIGH)
  • else {digitalWrite(8,LOW): si no es compleix la instrucció if, es cumpleix el que hi ha a l'ordre else, en aquest cas apaga la sortida 8 (LOW)

PRÀCTICA AVANÇADA

Posa un quart LED de manera que es pugui comptar fins a 15

ARDUINO: Pràctica 2: El LED d’intensitat variable

analogWrite és una instrucció que indica a una sortida un valor entre 0V i 5V. Els valors van entre 0 (0V), i 265 (5V). Per exemple, analogWrite(11,214) indica que la sortida 11 té un valor a la sortida de 214, que equival a uns 4V. El següent exemple és un LED que varia la seva intensitat de llum.

  • Feu el mateix muntatge que amb el programa blink amb la placa protoboard i l’arduino.
El codi del programa és el següent:

int brillo=0; // es declara una variable que es diu brillo
int increment=5;// es declara una variable que es diu increment

void setup() // es declaren les entrades i sortides
{
 pinMode(9,OUTPUT); // al pin 90 hi ha una sortida
}
void loop()
{
 brillo=brillo + increment; // el brillo s’incrementa de 5 en 5
 analogWrite(9,brillo); // el LED s’encen amb la intensitat de brillo
 if ((brillo == 0) || (brillo == 255)) {
   increment=1 increment;
  }
 delay(30);
}
  • Les instruccions int defineixen 2 variables i canvia el nom d’una entrada.
  • analogWrite(9, brillo): la sortida 9  pren el valor de brillo i li dóna el voltatge corresponent al LED. 
  • brillo = brillo + incremento: la variable brillo augmenta en 5 el seu valor.
  • if(brillo==0 || brillo==255): if és una condició que, en aquest cas, si arriba a un d’aquests dos valors, s’executa l’ació de dintre els claudàtors, en aquest cas el decreixement.

ARDUINO: Pràctica 1:Blink

El primer programa que fareu serà un led parpellejant. Munteu el següent circuit a la placa Arduino i a la placa protoboard:

  • El terminal llarg al pin 9, i el curt a una resistència de 220 ohms 
  • L’altre terminal del resistor al negatiu de la paca (GND) 

Carregueu el següent codi a l’IDE d’arduino:

void setup()
{
pinMode(9,OUTPUT); // al pin 9 hi ha una sortida
}

void loop() // el que hia dintre el loop es repeteix indefinidament
{
digitalWrite(9,HIGH); // encen el LED que hi ha al pin 9
delay(1000); // espera 1 segon
digitalWrite(9,LOW); // apaga el LED del pin 9
delay(1000); // espera un segon
}

Mirem què significa els elements que surten:

  • digitalWrite s’usa per connectar sortides digitals: LEDs, motors, servomotors. A les sortides se’ls hi pot donar dos valors: alt (1) i baix (0): HIGH/LOW (encendre/apagar)
  • HIGH/LOW són dues instruccions que encenen (HIGH) o apagen (LOW) una entrada o sortida de l’Arduino
Les primeres ordres que veureu seran aquestes:
  • void setup() {pinMode(9, OUTPUT);}: dintre void setup() es defineixen com seran les connexions. pinMode(9, OUTPUT) indica que la sortida 9 serà de sortida (OUTPUT). Es posa OUTPUT quan es connecten LEDS, motors, servomotors. Si voleu que sigui d’entrada, heu de posar INPUT, que seran els interruptors i els sensors.
  • void loop() { }: dintre els claudàtors es posen les instruccions que el programa repetirà indefinidament:
  • digitalWrite(9, HIGH): aquesta instrucció encén el led (HIGH)
  • digitalWrite(9, LOW): aquesta instrucció apaga el led (LOW)
  • delay(1000): entre instrucció i instrucció, el programa espera 1 segon (1000 ms). Podeu canviar el número de segons i veureu com varia el parpelleig del LED.
  • //: comentaris de línia. Desprès de cada instrucció, es pot posar un comentari sobre el què fa cada línia. No és obligat, però va bé per saber què es vol fer. El que es posa darrera de // no influeix en el programa.

PRÀCTICA AVANÇADA

Mireu ara de fer el mateix, però posant un altre LED al pin 8, de manera que quan un s’apagui, l’altre s’encengui. Pistes:

  • Aprofitant el codi que teniu, poseu un altre bloc de leds però connectats a l’entrada 8 
  • A la placa protoboard, poseu un altre led i resistor igual com teniu l’altre.

    GIMP Pràctica 11: Foto fora marc

    Un efecte molt espectacular és crear una foto amb un marc de manera que una part de la foto quedi fora d’aquest marc. Alguna cosa així:

    • Obre la imatge que vols aplicar l’efecte. Després crea dues capes noves amb l’opció transparència. Per a això pots fer-ho des de la barra superior a Capa-Capa Nova. On diu nom de la capa, podeu posar la primera que es digui fons i la capa superior per exemple marc.
    • Intercala la foto entre les dues capes que has creat i, com pots veure en la captura.
    • Ara Estant a la capa Marc (la Capa Superior) traça una selecció i emplena-la amb l’eina emplenat de color blanc.
    • a la barra superior posa Editar/encogeix. Posa un número per retallar el marc
    • Ves a editar/retalla. Marxarà el blanc de dintre i es quedarà el marc
    • Segueix a la capa marc, i amb l’icona perspectiva, inclina el marc per crear un efecte de profunditat
    Amb l’eina moure, desplaça el marc allí on et vagi millor
    Creeu dues màscares de capa blanques a les capes del marc i de la foto.
    Posat ara a la capa de la foto. Amb un pinzell negre, ves pintant les zones externes del marc, deixant les que vulguis que apareguin. 
    Aplana la imatge, exporta-la com un jpg i penja-la al teu bloc com a pràctica 11