dissabte, 7 de gener del 2017

Robot ArduX.


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