Edat recomanada:
Construcció: a partir de 8 anys acompanyats d'un adult.
Programació amb Sketch: a partir de 8 anys.
Programació amb Scratch: a partir de 6 anys.
Vigileu amb les piles, pegaments, objectes menuts, punxeguts, calents, etc.
Us presentem l'ArduX, una simpàtica (o simpàtic, encara estem esbrinant-lo) robot que ens servirà per a iniciar-nos en l'electrònica i la programació de computadores. A poc a poc, anirem afegint al blog activitats que es podran realitzar amb l'ArduX.
Programarem l'ArduX amb el llenguatge Sketch de l'IDE d'Arduino i també amb Scratch. Farem servir una versió de S4A (Scratch for Arduino) adaptada per nosaltres per a l'ArduX que trobareu al final de l'entrada.
Si voleu construir un ArduX, teniu la llista de components i el circuit necessari igualment al final.
Algunes imatges:
Programació amb S4A (Scratch). |
ArduX Gremlin. |
Connexió amb Arduino |
Prototip d'ArduX. |
Prototip d'ArduX. Darrere. |
L'ArduX éstà inspirat en el robot Ardu5 del Profe Garcia. L'ArduX és compatible amb l'Ardu5, però disposa de moltes més característiques.
No us perdeu el seu canal a Youtube. La seua plana dedicada a l'Ardu5 és:
http://elprofegarcia.com/?page_id=411
ArduX implementa les següents característiques:
5 LEDS programables, 2 formant els ulls i 3 més formant la boca, cinturó, o el que vulguem que siga.
Fotoresistència LDR per a detectar la llum / foscor.
Brunzidor per a emetre sons.
2 polsadors programables mitjançant interrupcions de maquinari*.
Sensor d'inclinació.
4 connectors extra (Aux1, Aux2, GND1, GND2) per a complements. Vigileu amb l'amperatge màxim!.
A més, podem posar-li el cos/roba que nosaltres dissenyem!.
Components necessaris per a construir un ArduX:
2 LEDS de 5mm de color blau (o el que més ens agrade).
3 LEDS de 3mm de color roig, groc, verd (esquerre, mig, dret).
6 resistències de 330 ohm (o el més proper possible).
1 resistència de 10K ohm (o el més proper possible).
1 fotoresistència LDR.
1 brunzidor (màxim 50 uA).
1 sensor d'inclinació.
2 polsadors.
4 pins femella.
Tira de pins 90º mascles. Necessitem un grup de 7 i altre de 6.
Grandària de la placa: 5x7.5 cm.
Circuit:
Programari de prova de l'ArduX:
Una vegada construït el nostre robot ArduX, podem comprovar el seu correcte funcionament mitjançant el codi en Sketch que pots veure a continuació. Heu de copiar-lo i enganxar-lo dins de l'entorn IDE de l'Arduino. No us preocupeu si no enteneu res, ja aprendrem en altres entrades com programar amb Sketch de forma fàcil.
// Inici codi
// Inicialitzem les variables:
int PinDetectorLlum = 8; // Assigna a la variable PinDetectorLlum el valor 8. El pin 8 de
// l'Arduino és on va connectada la fotoresistència per a detectar llum.
int PinPolsadorEsquerre = 3;
int PinPolsadorDret = 2;
int PinSensorInclinacio = 7;
int PinBrunzidor = 6;
int PinLedUllEsquerre = 12;
int PinLedUllDret = 13;
int PinLedRoig = 11;
int PinLedGroc = 10;
int PinLedVerd = 9;
int Espera=1000; // Espera en milisegons que usarem més endavant.
void setup() // El que hi ha dins la funció setup s'executarà només una vegada a l'inici.
{
// Configurem els pins per a poder usar-los d'entrada o d'eixida.
pinMode(PinLedUllEsquerre, OUTPUT); // Configurem el pin LedUllEsquerre (13) com d'eixida.
// És a dir, el configurem per a poder escriure sobre ell.
pinMode(PinLedUllDret, OUTPUT);
pinMode(PinLedRoig, OUTPUT);
pinMode(PinLedGroc, OUTPUT);
pinMode,(PinLedVerd, OUTPUT);
pinMode(PinDetectorLlum, INPUT); // Configurem el pin PinDetectorLlum (13) com d'entrada.
// És a dir, el configurem per a poder llegir d'ell.
pinMode(PinBrunzidor, OUTPUT);
pinMode(PinPolsadorEsquerre, INPUT_PULLUP); // Configurem el pin PinPolsadorEsquerre com
// d'entrada. A més, indiquem que per defecte
// el valor serà PULLUP, és a dir encés (5v).
pinMode(PinPolsadorDret, INPUT_PULLUP);
pinMode(PinSensorInclinacio, INPUT_PULLUP);
// Encen tots els leds i emet un so pel brunzidor durant [Espera] milisegons.
digitalWrite(PinLedUllEsquerre, HIGH);
digitalWrite(PinLedUllDret, HIGH);
analogWrite(PinLedRoig, 255);
analogWrite(PinLedGroc, 255);
analogWrite(PinLedVerd, 255);
analogWrite(PinBrunzidor, 100); // Li enviem un senyal de 100 al brunzidor. Un pin analògic
// pot rebre / enviar un valor entre 0 i 255.
delay(Espera);
// apaga tots els leds i el brunzidor durant [Espera] milisegons.
digitalWrite(PinLedUllEsquerre, LOW);
digitalWrite(PinLedUllDret, LOW);
analogWrite(PinLedRoig, 0);
analogWrite(PinLedGroc, 0);
analogWrite(PinLedVerd, 0);
analogWrite(PinBrunzidor, 0); // Li enviem un senyal de 0 al brunzidor, el que fa que s'apague.
delay(Espera);
// Encen tots els leds i emet un so pel brunzidor durant [Espera] milisegons.
digitalWrite(PinLedUllEsquerre, HIGH);
digitalWrite(PinLedUllDret, HIGH);
analogWrite(PinLedRoig, 255);
analogWrite(PinLedGroc, 255);
analogWrite(PinLedVerd, 255);
analogWrite(PinBrunzidor, 100); // Li enviem un senyal de 100 al brunzidor. Un pin analògic
// pot rebre / enviar un valor entre 0 i 255.
delay(Espera);
// apaga tots els leds i el brunzidor durant [Espera] milisegons.
digitalWrite(PinLedUllEsquerre, LOW);
digitalWrite(PinLedUllDret, LOW);
analogWrite(PinLedRoig, 0);
analogWrite(PinLedGroc, 0);
analogWrite(PinLedVerd, 0);
analogWrite(PinBrunzidor, 0); // Li enviem un senyal de 0 al brunzidor, el que fa que s'apague.
delay(Espera);
}
void loop() // El que n'hi ha dins la funció loop s'executarà en bucle indefinidament.
{
digitalWrite(PinLedGroc, HIGH); // Activem el LED del mig del cinturó per a poder fer
// servir a continuació el detector de llum.
delay(30); // Donem temps per a llegir el sensor.
if (digitalRead(PinDetectorLlum) == HIGH) // Si no detectem llum aleshores...
{
analogWrite(PinLedRoig, 255);
analogWrite(PinLedVerd, 255);
delay(1000);
analogWrite(PinLedRoig, 0);
analogWrite(PinLedVerd, 0);
//analogWrite(PinBrunzidor, 100); /
//delay(Espera);
//analogWrite(PinBrunzidor, 0); /
}
digitalWrite(PinLedGroc, LOW);
if (digitalRead(PinPolsadorEsquerre) == LOW)
{
digitalWrite(PinLedUllEsquerre, HIGH);
delay(1000);
digitalWrite(PinLedUllEsquerre, LOW);
}
if (digitalRead(PinPolsadorDret) == LOW)
{
digitalWrite(PinLedUllDret, HIGH);
delay(1000);
digitalWrite(PinLedUllDret, LOW);
}
if (digitalRead(PinSensorInclinacio) == HIGH)
{
digitalWrite(PinLedUllDret, HIGH);
delay(1000);
digitalWrite(PinLedUllDret, LOW);
}
/*
digitalWrite(PinLedRoig, HIGH);
digitalWrite(PinLedGroc, HIGH);
digitalWrite(PinLedVerd, HIGH);
delay(Espera);
digitalWrite(PinLedRoig, LOW);
digitalWrite(PinLedGroc, LOW);
digitalWrite(PinLedVerd, LOW);
delay(Espera); */
}
// Fi del codi
Versió adaptada per a l'ArduX de S4A:
En preparació.
########################################
* Què és una interrupció de maquinari?
Bé, imagina que estàs veien un vídeo super interessant a Youtube. Al mateix temps estàs esperant que un amic o amiga de classe vinga a visitar-te. Tens dues opcions: estar alçant-te i mirant contínuament per l'espillera de la porta si ja ha arribat (això s'anomena sondeig, polling en anglés), o bé, instal·lar un dispositiu super modern anomenat timbre.
Com eres una persona molt moderna, ja tens instal·lat el timbre a la porta de casa. Per tant, només has d'esperar que el teu amic o amiga toque el timbre, deixar el que estàs fent, i anar a obrir la porta. Doncs precisament això mateix és una interrupció de maquinari (hardware interrupt). La computadora pot estar fent altres coses sense necessitat de gastar temps i recursos en mirar si una certa cosa (que ens interessa) ocorreix o no. Una vegada ha fet cas a la interrupció, continua amb el que estava fent en el punt on l'havia deixat.
Cap comentari:
Publica un comentari a l'entrada