Académique Documents
Professionnel Documents
Culture Documents
1
18/05/2017
2
18/05/2017
ndice de Contenidos
2. Desmenuzando Arduino
3. Programacin y simulacin
3
18/05/2017
VS
Aplicaciones
4
18/05/2017
IoT
2. Desmenuzando Arduino
Arduino Uno
16 Mhz, Flash 32 KB, SRam 2KB, EEPROM 1KB, Rango tensin 7/12V. BootLoader 05 KB. ICSP.
14 IO Digitales (De las cuales: 6 PWM, 2 Serie, 2 Interrupciones, 4 SPI), 6 In Analgicas (2 I2C).
5
18/05/2017
BUSES
SPI Serial Peripheral
Interface
I2C Inter-Integrated
Circuit
6
18/05/2017
Arduino Nano
Caractersticas similares al Arduino Uno, pero diminuto, ideal para empotrar.
7
18/05/2017
Arduino Atiny85
Tan solo 6 I/Os, 2 de ellas admiten PWM y 3 analgicas. 8Kb de memoria de
programa Flash. 512 bytes de EEPROM. 512 bytes de SRAM. 20Mhz usando un cristal
externo
8
18/05/2017
CLONES: http://www.pinguino.cc/
Clon con
Microcontrolador
PIC de Microchip Inc.
9
18/05/2017
Escudos (Shield)
LCD
Entrenador
EtherNet
GamePad
10
18/05/2017
Sensores
Ana./Dig.
Humedad
Choque
Ultrasonidos
Color
Presencia/Mov.
Giroscopio
Temperatura
Tensin
Intensidad
Luz
RFID
Acstico
Lluvia
Calidad del Aire
Tctil
Proximidad
IR
Actuadores
Controladoras
de motores
Rels
Motor DC
11
18/05/2017
Servo
Controladora mini de
motores DC
Paso a paso (Stepper)
Reloj
Mdulos BlueTooth
Mando IR
Wi-Fi
Amplificador
12
18/05/2017
Lector/Grabador SD Mp3
Cmara
Teclado
13
18/05/2017
14
18/05/2017
15
18/05/2017
16
18/05/2017
17
18/05/2017
CABLEADO DE LA ALIMENTACIN DC A 6V
18
18/05/2017
19
18/05/2017
3. Programacin y Simulacin
Scratch S4A http://s4a.cat/index_es.html
20
18/05/2017
Programacin mediante C.
https://www.arduino.cc/ (V. Actual IDE 1.8.2)
PARTES DE UN
PROGRAMA
Comentarios
Libreras
Constantes
Variables globales
Funciones
Configuracin{
Bucle main{
Programa
HolaMundo.ino
21
18/05/2017
Simulaciones online
123d.circuits.io (https://circuits.io/)
/* Comentarios de int v;
varias int v=5;
lneas
*/ char ch; // x
char * msg; // xx
// Comentario de una lnea
float distancia;
float distancia=0.0;
#define SF 2 boolean toggle=false;
const int SF=2; long F;
long F1, F2;
#include<Servo.h> long F=0x00FFA25D // 64 bits en hex
double x;
char str1[3]={a,b,c}; // \0
char str2[]=arduino; static double x=0;
unsigned int;
char * strs[]={uno,dos} ; volatile int cnt=0; // usado en interrupciones
22
18/05/2017
// Ejemplo
pinMode(2, OUTPUT);
pinMode(variable, INPUT); // admite variable
// Ejemplos
digitalWrite(2, HIGH);
digitalWrite(2, 0); // admite 0|1
digitalWrite(variable, 1); // admite variable
digitalWrite(variable, LOW);
// Ejemplos
analogWrite(npin, 0); // mnimo
analogWrite(npin, 254); // mximo
analogWrite(npin, variable); // admite variable
23
18/05/2017
PROCEDIMIENTOS Y FUNCIONES
24
18/05/2017
void setup() {
pinMode(SLI, INPUT); // Configuracion pin SENSOR como entrada
pinMode(LED, OUTPUT); // Led13 como salida
}
void loop(){
sensorI=digitalRead(SLI); // lee sensor
void loop(){
if (Serial.available()){
inChar = Serial.read();
string+=inChar;
25
18/05/2017
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin); // realizar la lectura
analogReference(DEFAULT|INTERNAL|INTERNAL1V1|INTERNAL2V56|EXTERNAL);
void setup() {
Serial.begin(9600); // Para mostrar respuesta en la consola serie
pinMode(SF_TRIG, OUTPUT); // Configuracion de los pines SENSOR distancia
pinMode(SF_ECO, INPUT);
} // Fin de setup
void loop(){
digitalWrite(SF_TRIG, LOW); // Medida de distancia sensor SF
delayMicroseconds(2);
digitalWrite(SF_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(SF_TRIG, LOW);
duracion_SF = pulseIn(SF_ECO, HIGH);
distancia_SF = (duracion_SF/2) / 29;
Serial.print(distancia_SF); // Imprimo distancia
Serial.println("cm SF");
delay(500); // Espero para nueva medida
} // Fin loop
26
18/05/2017
void setup() {
pinMode(MIF, OUTPUT); // Configuracin de los pines MOTORES como salidas
pinMode(MIB, OUTPUT);
pinMode(MDF, OUTPUT);
pinMode(MDB, OUTPUT);
}// Fin de setup
void loop(){
//adelante
analogWrite(MIB,0);
analogWrite(MDB,0);
analogWrite(MIF,vvel);
analogWrite(MDF,vvel);
delay(2000);
//derecha_tanque
//atrs analogWrite(MIB, 0);
analogWrite(MIF, 0); analogWrite(MDF, 0);
analogWrite(MDF, 0); analogWrite(MIF, vvel);
analogWrite(MIB, vvel); analogWrite(MDB, vvel);
analogWrite(MDB, vvel); delay(1000);
delay(2000);
//parar
//izquierda_tanque analogWrite(MIB,0);
analogWrite(MIF, 0); analogWrite(MDB,0);
analogWrite(MDB, 0); analogWrite(MIF,0);
analogWrite(MIB, vvel); analogWrite(MDF,0);
analogWrite(MDF, vvel);
delay(1000); } // Fin de loop
27
18/05/2017
void setup(){
Serial.begin(9600);
randomSeed(analogRead(A0));
}
void loop() {
if(i<7){
for (i=1;i<7;i++){
// Obtiene un random numero de 1 a 49
randNumber = random(1, 50);
28
18/05/2017
EJEMPLO: Bluetooht
// OJO existe la librera #include <SoftwareSerial.h> para cualquier entrada.
char inChar;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop(){
if (Serial.available()){
inChar = Serial.read();
Serial.println(inChar);
if (inChar=='e'){
digitalWrite(13, HIGH);
Serial.println("Enciendo LED ");
}else if(inChar=='a'){
digitalWrite(13, LOW);
Serial.println("Apago LED ");
}
}
}
MANEJO DE INTERRUPCIONES
Para la lectura de un dato en una entrada de un microcontrolador podemos emplear los
mtodos de Consulta de Estado (Pulling) o las Interrupciones.
(Los microprocesadores admiten tambin el DMA)
29
18/05/2017
void leyoSLI(){
digitalWrite(LED,HIGH); // Enciende LED 13
Serial.println("sensorI a: 0");
}
void leyoSLD(){
digitalWrite(LED,LOW); // Apaga LED 13 interno
Serial.println("sensorD a: 0");
}
void setup() {
attachInterrupt(0,leyoSLD,LOW); // Activa interrupcin y asigna funcin de respuesta
attachInterrupt(1,leyoSLI,LOW); // Activa interrupcin y asigna funcin de respuesta
// Con int's NO se requiere pinMode(SLI, INPUT)...
Serial.begin(9600);
pinMode(LED, OUTPUT); // Led13 como salida
}
void loop(){
while(1){
delay(1000); // Bucle infinito
}
} // Fin de loop
LIBRERAS (https://www.arduino.cc/en/pmwiki.php?n=Reference/Libraries)
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
30
18/05/2017
Programacin EXTRA
EJEMPLO: CONTROL DE MOTORES SERVO (*)
#include <Servo.h>
void setup() {
servomotor.attach(PINSERVO); // Asigna pin al motor servo
servomotor.write(angulo); // Situa motor en x
delay(1500);
}
void loop() {
angulo=47;
servomotor.write(angulo); // Situa motor en x
delay(1500);
angulo=112;
servomotor.write(angulo); // Situa motor en x
delay(1500);
angulo=177;
servomotor.write(angulo); // Situa motor en x
delay(1500);
angulo=112;
servomotor.write(angulo); // Situa motor en x
delay(1500);
}
int RECV_PIN = 2;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Inicia el receptor IR
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); // HEX opcional (si no DEC)
irrecv.resume(); // Se prepara para el prximo valor
}
delay(100);
}
31
18/05/2017
// FUNCIONES /////////////////////
void mandoir(){
if (irrecv.decode(&results)) { //
Serial.println(results.value); // Vemos comando recibido. Admite (results.value, HEX)
datorx=results.value;
irrecv.resume(); // Espera siguiente valor
}
} // FIN FUNCIONES ////////////////
void setup() {
Serial.begin (9600); // Para analizar respuesta
irrecv.enableIRIn(); // Arranca receptor IR
// Activa interrupcin a funcin para el mando IR en el pin 2 (flanco subida)
attachInterrupt(digitalPinToInterrupt(2),mandoir,RISING);
}// Fin de setup
void loop(){
while(true){ // Bucle infinito
delay(1000);
}
} // Fin de loop
Modelos comerciales
32
18/05/2017
33
18/05/2017
Otto Build
Build You Own Robot in Two Hours!
http://www.instructables.com/id/Otto-Build-You-Own-Robot-in-Two-Hours/
34
18/05/2017
Maxibot
Gx386 Max
(Reformado)
35
18/05/2017
36
18/05/2017
// PRCTICAS (Mnimas)
NM1 Hola mundo (a b c d e)
NM2 Sensor digital IR (a b)
NM3 Entrada analgica (a b)
NM4 Sensor ultrasnico (a b)
NM5 Control motor DC (a b)
NM6 Esquiva objetos (a b)
NM7 Sigue lneas (a b)
NM8 Control remoto serie (a b)
// PRCTICAS (Ampliacin)
NA1 Motor Servo
NA2 Robot de Ivn
NA3 Esquiva objetos con 3 sensores
NA4 Teclado
NA5 Caja de Sensores y Actuadores
NA6 Mando IR
NA7 Arduino Nano
NA8 Arduino Mega
NA9 Mezclemos todo
37
18/05/2017
38