Introducción de 2h a prototipado con arduino:
·Electrónica básica
·Plataformas HW de prototipado
·Lectura y escritura analógica y digital en sensores y actuadores
La idea es poderse utilizar como curso autónomo por cualquiera (incluye interactividad para saltarse secciones.
Adicionalmente incluye una pequeña presentación del laboratorio de fabircación digital Smart Open Lab
8. http://SolEpcc.unex.es
@SolEpcc
• Red de Fab-Labs de Extremadura
– En creación
• Somos los primeros en la Red
Internacional
• Comunidad y
ambiente
creativo
• Lugar para
EXPERIMENTAR
enExtremadura
9. http://SolEpcc.unex.es
@SolEpcc
• El Laboratorio externo está abierto a todo
el mundo
– Contiene material “fungible”, placas de
prototipado y SoCs (Raspberry Pi, Galileo…)
– Se realizan cursos, prácticas…
11. http://SolEpcc.unex.es
@SolEpcc
• Es un espacio abierto a TODOS
– Estudiantes, profesores, PAS,…
– Y ¡Gente de fuera de la Universidad!
• Respetar el código de convivencia y ser participativo
– El aprendizaje es colaborativo
– Los proyectos son compartidos al menos con el resto de
miembros
• Cada cual elige cómo compartirlo fuera de SOL
• Asociación creada (no universitaria)
– Acceso preferente a cursos/talleres
– Taller siempre disponible (llave)
– 10€/año
¿CÓMO?
17. http://SolEpcc.unex.es
@SolEpcc
int valorSensor=20;
void setup() {
Serial.begin(9600);
Serial.println (“Bienvenido!”);
}
void loop() {
Serial.print("valor = " );
Serial.println(valorSensor);
}
• Variable
(caja/almacén)
• Una sola vez
• Continuamente
1erprograma: comunicación(serie)conArduino-PC
18. http://SolEpcc.unex.es
@SolEpcc
• Típicamente los computadores trabajan y transmiten bits
• Cada bit tiene 2 estados:
• ENCENDIDO / APAGADO
• VERDADERO / FALSO
• 1 / 0
• HIGH / LOW
• ¿Cuántos estados diferentes puedes representar con 2
LEDs?
INTRO
00 0
01 1
10 2
11 3
19. http://SolEpcc.unex.es
@SolEpcc
• ¿Y dónde se almacenan estos datos?¡variables!
– boolean true o false, 0 ó 1 (1 bit 1 byte)
– byte, char, unsigned char del 0 al 255
– int, unsigned int del 0 al 65535
– long, unsigned long, double, float 32 bits
TIPOSdeDATOS
8 bits 16 bits 32 bits
char int, unsigned int long, unsigned long
float
20. http://SolEpcc.unex.es
@SolEpcc
• Y en el programa: ¿Cómo se especifica?
– variables (son cajas que almacenan bits)
tipo nombre;
tipo nombre = valor;
tipo nombre1, nombre2,…;
int x;
float voltage = 5.0;
bool mivar1, mivar2;
const int LEDPIN = 7;
TIPOSdeDATOS
21. http://SolEpcc.unex.es
@SolEpcc
ENCENDER LAS 3 LUCES DE UNA HABITACIÓN SI ESTÁN
APAGADAS:
REPETIR 3 VECES
SELECCIONAR UNA LUZ
SI LUZ APAGADA
Cambiar el interruptor de posición
-----------------------------------------------------------------------------------
x = 1;
do{
int interruptor = seleccionar_siguiente_interruptor();
interruptor.off();
} while (++x != 3);
RECETAdeCOCINA,…INDICAUNAFORMADEHACERLASCOSAS
// Podemos poner comentarios así
22. http://SolEpcc.unex.es
@SolEpcc
• Cada línea de un
algoritmo se llama
sentencia
– Asignación: da valor a
una variable
• b = 3;
– Operadores
matemáticos
• a = b + 1;
• +, -, *, /, % (modulo),
++, --
int mi_var;
void setup() {
Serial.begin(9600);
mi_var = 2;
}
void loop() {
Serial.print("t valor = " );
Serial.println(mi_var);
mi_var = mi_var + 1;
}
//probar a cambiar por: mi_var++;
//probar a cambiar por: mi_var *= 2;
2doprograma,asignación yop.matemáticos
25. http://SolEpcc.unex.es
@SolEpcc
En base al valor de tiempo
llueve:
EncenderLED;
RecogerToldo;
nieva:
RecogerToldo;
MandarMensajeMovil;
por defecto:
RecogerTemperatura;
si (Temperatura>28)
int selector = 1;
void loop(){
switch (selector){
case 1:
Serial.println(“1”);
break;
case 2:
Serial.println(“2”);
break;
default:
Serial.println(“otro”);
break;
selector++;
}
CONDICIONALES:switch-case
28. http://SolEpcc.unex.es
@SolEpcc
num sumaNumeros(num1,
num2)
{
num = num1+num2;
}
------------------------------------
int mediaNumeros (int a, int b){
int c;
c = a+b;
c /=2;
return c;
}
void setup() {
Serial.begin(9600);
}
int valor1, valor2;
void loop() {
Serial.print("Introduce un valor:");
valor1 = Serial.read();
Serial.print("Introduce otro valor:");
valor2 = Serial.read();
Serial.print("La media es ");
Serial.println (mediaNumeros(valor1, valor2) );
}
Agrupandosentencias
•Serial.read();
//reads first byte from buffer
•Serial.available();
// returns the number of
bytes in the buffer
•Serial.flush();
// clears the buffer
43. http://SolEpcc.unex.es
@SolEpcc
• LED
• Relé
• Buzzer
pinMode(#,OUTPUT);
# es el número de pin
#define O0 11
void setup() {
pinMode(O0, OUTPUT);
}
void loop() {
digitalWrite(O0, HIGH);
}
//Cambiar HIGH por LOW
//Cambiar O0 por 13
Output:Enelsetup()pinMode.CódigoescrituraLED
Arduino
V
44. http://SolEpcc.unex.es
@SolEpcc
• Botón
• Potenciómetro
• LDR
pinMode(#,INPUT);
# es el número de pin
#define I0 A0
int valor_boton;
void setup() {
Serial.begin (9600);
pinMode(I0,INPUT);
}
void loop() {
valor_boton = digitalRead(I0);
Serial.println (valor_boton);
}
Input:Enelsetup()pinMode.Códigolecturadebotón
Arduino
V
High(5V)
1KΩ
INPUT_PULLUP
Si el PIN no se conecta
toma valor 1
45. http://SolEpcc.unex.es
@SolEpcc
• Toma valores discretos:
– 0 ó 1, LOW ó HIGH,…
– Realmente es un voltaje:
• HIGH (~ 2.7V-5V)
• LOW (~ 1.2V-0V)
var = digitalRead(#);
//devuelve el valor leído
digitalWrite(#, value);
//value debe ser HIGH o LOW
• Toma valores continuos:
– Teóricamente infinitos
– Al tratarlos con un micro
controlador/procesador
• 0,1,2,3,4,5,6… (no solo
enteros) son voltajes
var = analogRead(#);
analogWrite(#, value);
//value es valor discreto (0-255)
5 V
0 V
5 V
0 V
48. http://SolEpcc.unex.es
@SolEpcc
• Hacer que un LED se
encienda y apague
continuamente
• Conectar un LED al output
O0.
• Los zócalos se conectan
con sensores/actuadores
del mismo color.
• pinMode
– INPUT
– OUTPUT
• digitalWrite
– HIGH
– LOW
• delay
#define O0 11
void setup() {
pinMode(O0, OUTPUT);
}
void loop() {
digitalWrite(O0, HIGH);
delay(1000);
digitalWrite(O0, LOW);
delay(1000);
}
Ejemplo1
48
49. http://SolEpcc.unex.es
@SolEpcc
• Hacer que el LED se
encienda cuando
toquemos un
pulsador
• Conectar el pulsador
o el sensor táctil a I0
(#define I0 A0)
• digitalRead
– True
– False
#define O0 11
#define I0 A0
void setup() {
pinMode(O0,OUTPUT);
pinMode(I0,INPUT);
}
void loop() {
if(digitalRead(I0)){
digitalWrite(O0, HIGH);
}else{
digitalWrite(O0, LOW);
}
delay(10);
}
Ejemplo2
49
50. http://SolEpcc.unex.es
@SolEpcc
• Controlar la potencia de luz de
un LED con un eje de un
joystick
• Conectar a I0 uno de los
zócalos del joystick
• analogRead
• map
– Re-mapea un número de un
rango a otro
– y=map(x,1,150,0,20);
– 1,150rango original de x
– 0,20rango destino de y
• analogWrite
#define O0 11
#define I0 A0
int analogInputValue = 0;
int analogOutputValue = 0;
void setup() {
pinMode(O0,OUTPUT);
pinMode(I0,INPUT);
}
void loop() {
analogInputValue = analogRead(I0);
analogOutputValue =
map(analogInputValue,0,1023,0,255);
analogWrite(O0,analogOutputValue);
delay(10);
}
Ejemplo3
50
51. http://SolEpcc.unex.es
@SolEpcc
• Controlar la potencia de
luz de dos LEDs con los
dos ejes de un joystick
• Pines O0 y O1
configurados como
salidas analógicas
(conectar dos LEDs)
• Pines I0 e I1
configurados como
entradas analógicas
(conectar los dos zócalos
del joystick)
• Mapear las entradas con
las salidas
• #define O0 11
• #define O1 10
• #define O2 9
• #define O3 6
• #define O4 5
• #define O5 3
• #define I0 A0
• #define I1 A1
• #define I2 A2
• #define I3 A3
• #define I4 A4
• #define I5 A5
Ejemplo4
51
53. http://SolEpcc.unex.es
@SolEpcc
• Relé interruptor
– permite que señales de
baja potencia accionen
mecanismos de potencia
elevada
– NO: Normally Open
– NC: Normally Close
ENCENDERYAPAGAROBJETOSELECTRICOS: RELÉ