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);
}
sábado, 13 de mayo de 2017
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);
}
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);
}
#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):
- 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));
}
}
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);
}
}
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
- 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!
Suscribirse a:
Entradas (Atom)