sábado, 13 de mayo de 2017

Preparando práctica 9: Mapeando el Joystick

int sensorValue=0;
void setup()
{
Serial.begin(9600);
pinMode(A1, INPUT);
}
void loop()
{
sensorValue = analogRead(1);
sensorValue = map(sensorValue, 0, 1024, -10, 11); //pasamos la señal del sensor al rango [-10, +10]
Serial.println(sensorValue);
delay(100);
}

viernes, 12 de mayo de 2017

Práctica 9: Girando el motor paso a paso

int motorPin1 = 11;  //pin11----1N1
int motorPin2 = 10;  //pin10----1N2
int motorPin3 = 9;   //pin9----1N3
int motorPin4 = 8;   //pin8----1N4
void gira_antihorario(int delayTime) //secuencia de 4 pasos
{                                    //se excitan las bobinas a pares
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);           
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime); 
}

void gira_horario(int delayTime)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
void setup()
{
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
for(int i=0; i<512; i++)  gira_horario(2);
delay(2000);
for(int i=0; i<512; i++)  gira_antihorario(2);
delay(2000);
}

Práctica 10: Acelerómetro

#include <Wire.h>

#define MPU 0x68
#define A_R 16384.0
#define G_R 131.0
#define RAD_A_DEG = 57.295779

int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;

//Angulos
float Acc[2];

void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
}
void loop()
{
   Wire.beginTransmission(MPU);
   Wire.write(0x3B);                       //Pedir el registro 0x3B - corresponde al AcX
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,6,true);    //A partir del 0x3B, se piden 6 registros
   AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
   AcY=Wire.read()<<8|Wire.read();
   AcZ=Wire.read()<<8|Wire.read();

    //A partir de los valores del acelerometro, se calculan los angulos Y, X
    //respectivamente, con la formula de la tangente.
   Acc[1] = atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
   Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
 
  Serial.print(Acc[0]);
  Serial.print(",");
  Serial.println(Acc[1]);
   delay(10);
}

Ampliando práctica 10: Incluyendo un microservo

#include <Servo.h>

Servo miservo;
int grados;

void setup()
{
miservo.attach(6); //cable amarillo del servo al pin 6
}

void loop()
{
grados=grados+10;
if (grados>=180) grados=0;

miservo.write(grados);
delay(1000);

}

miércoles, 3 de mayo de 2017

Práctica 4: Mapeo de sensores

byte valorsensor;

void setup()
{
Serial.begin(9600);
}

void loop()
{
valorsensor=analogRead(A1);
Serial.println(valorsensor);
delay(100);
}

jueves, 23 de marzo de 2017

Impresión 3D

La primera edición del curso de ampliación finalizó con la sesión de Impresión 3d.
- Aprendimos la configuración típica de una impresora actual y sus opciones de montaje.
- Usamos el Freecad para diseñar, con varios métodos, piezas sencillas.
- Usamos el Cura para grabar la pieza en la tarjeta de la impresora y la imprimimos. Ésta es la pieza que realizó José Luís (especialidad de Matemáticas):


miércoles, 15 de marzo de 2017

Código práctica 7: Memoria EEPROM

#include <EEPROM.h>
int direccion=0;                //apunta de 0 a 999
byte valorsensor;            //cada casilla admite un byte (de 0 a 255)
void setup()
{
Serial.begin(9600);
}
void loop()
{
    valorsensor=analogRead(A1);
    valorsensor=valorsensor*500/1023;
    EEPROM.write(direccion, valorsensor);
    Serial.print("Grabando lectura sensor: ");
    Serial.println(valorsensor);
    delay(1000);
    if(digitalRead(2)) vuelcadatos();
    direccion++;
    if(direccion==1000) direccion=0; 
}
void vuelcadatos()
{
for(int n=0; n<=100; n++)
  {
  Serial.print("En la dirección ");
  Serial.print(n);
  Serial.print("se grabó la temperatura: ");
  Serial.println(EEPROM.read(n));
  }
}

Código Práctica 8: RFID



#include <SPI.h>
#include <RFID.h>  //enlace reparado a la librería AQUÍ
#define SS_PIN 10
#define RST_PIN 5   //ojo, el pin al que se conecta RST es el 9
RFID rfid(SS_PIN,RST_PIN);
byte serNum[5];
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if(rfid.isCard())
{
Serial.println("TARJETA ENCONTRADA");
if(rfid.readCardSerial())
{
for(int n=0;n<5;n++)
{
Serial.print(rfid.serNum[n],DEC);
Serial.print(", ");
}
Serial.println(".");
}
}
rfid.halt();
}

viernes, 3 de marzo de 2017

Código Práctica 1

int pinled;
int pausa=1500;

void setup()
{

pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);   
}

void loop()
{
 for(pinled=9; pinled<=13; pinled++)
    {
      digitalWrite(pinled, 1);
      delay(pausa);
      digitalWrite(pinled, 0);
    }
 
}

Librerías auxiliares para las prácticas (ENLACE REPARADO)

Éstas son las librerías necesarias para las dos sesiones de prácticas correspondientes:


- Práctica 3: Librería LOW-POWER
- Práctica 8: Librería RFID
- Display LCD mediante I2C: LYQUIDCRYSTAL_I2C

viernes, 6 de enero de 2017

Acelerómetros

Una de las prácticas que se realizarán en el curso de Ampliación, será el diseño del control gestual de un microservo a través de un acelerómetro 6050. ¡Así ha quedado el prototipo que se enseñará en la clase!