Práctica

PROYECTOS

ARDUINO

BÁSICOS

Prof. Daniel Tedesco

Presentamos una serie de proyectos Arduino de conexionado simple, ideal para tomar contacto con los componentes

Todo proyecto maker cuenta con la siguiente estructura
-Diagramas y conexionado
-Programa
-Guía paso a paso
¿Dónde buscarlos?
¿Dónde simular proyectos?

Son dispositivos electrónicos conectados a Arduino que actúan mediante una resistencia y pueden programarse a voluntad del usuario

LEDS

Primer contacto con Arduino

Código


/*código inicial "Hola mundo" en Arduino.
**DESAFIO 1:
-¿Cómo variarías la intensidad y el parpadeo del led?
**DESAFIO 2:
-Agregar otro led
-Crear un código para encender ámbos en forma paralela
-Crear otro código para encender ámbos en forma desigual
***DESAFIO 3:
-Agregar un tercer led y formar un semáforo
-Crear un código para que funcione el semáforo
Prof. Daniel Tedesco */

// C++ code

int rojo = 13; //asignamos nombre y pin al led

void setup()
{
  pinMode(rojo, OUTPUT); //configiramos el pin como salida
}

void loop()
{
  digitalWrite(rojo, HIGH); //encendemos el led rojo
  delay(1000); // retardo de 1000 milisegundos
  digitalWrite(rojo, LOW); //apagamos el led rojo
  delay(1000); // retardo de 1000 milisegundos
}

Si tenés experiencia con Arduino

Código


/*Código para led RGB o módulo led RGB.
**DESAFIO 1:
-¿Cómo apagarías el led en color blanco?
**DESAFIO 2:
¿Cómo crearías una secuencia de colores Blanco,
rojo, verde y azul?
***DESAFIO 3:
¿Cócmo crearías colores estridentes o no convencionales?
puedes buscar colores en: https://htmlcolorcodes.com/es/
Prof. Daniel Tedesco */

// C++ code

int led_verde = 5;
int led_azul = 3;
int led_rojo = 6;


void setup()
{
pinMode (led_verde, OUTPUT);
pinMode (led_azul, OUTPUT); 
pinMode (led_rojo, OUTPUT); 
  
}

void loop()
{
 analogWrite(led_verde,255);
 analogWrite(led_azul, 255);
 analogWrite(led_rojo, 255);
 delay(1000);
 
 } 

LED con potenciometro

Código

/*Variación de la intensidad del LED con potenciómetro.
Seguir las conexiones y una vez energizado, variar la 
del potenciómetro para cambiar la intensidad del LED
Prof. Daniel Tedesco */


int led = 3;
int pot = A0;

void setup() {
pinMode(led, OUTPUT);

}

void loop() {
analogWrite(led, analogRead(pot)/4);
}

Varios LEDS con potenciómetro

Código

// C++ code
//

#define verde1 13
#define verde2 12
#define amarillo1 11
#define amarillo2 10
#define rojo1 9
#define rojo2 8
#define pote 5


void setup()
{
 pinMode (verde1, OUTPUT);
 pinMode (verde2, OUTPUT);
 pinMode (amarillo1, OUTPUT);
 pinMode (amarillo2, OUTPUT);
 pinMode (rojo1, OUTPUT);
 pinMode (rojo2, OUTPUT);
 pinMode (pote, INPUT);
}

void loop()
{
 int ValorPote = analogRead(pote);
 int Valor = map(ValorPote,0,1023,0,6);
  
  if (Valor==0)
  {
   digitalWrite(verde1, LOW);
   digitalWrite(verde2, LOW);
   digitalWrite(amarillo1, LOW);
   digitalWrite(amarillo2, LOW);
   digitalWrite(rojo1, LOW);
   digitalWrite(rojo2, LOW);
  }
  else if (Valor==1)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, LOW);
   digitalWrite(amarillo1, LOW);
   digitalWrite(amarillo2, LOW);
   digitalWrite(rojo1, LOW);
   digitalWrite(rojo2, LOW);
  }  
  else if (Valor==2)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, HIGH);
   digitalWrite(amarillo1, LOW);
   digitalWrite(amarillo2, LOW);
   digitalWrite(rojo1, LOW);
   digitalWrite(rojo2, LOW);   
  }
  else if (Valor==3)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, HIGH);
   digitalWrite(amarillo1, HIGH);
   digitalWrite(amarillo2, LOW);
   digitalWrite(rojo1, LOW);
   digitalWrite(rojo2, LOW);   
  }  
  else if(Valor==4)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, HIGH);
   digitalWrite(amarillo1, HIGH);
   digitalWrite(amarillo2, HIGH);
   digitalWrite(rojo1, LOW);
   digitalWrite(rojo2, LOW);  
  }
  else if(Valor==5)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, HIGH);
   digitalWrite(amarillo1, HIGH);
   digitalWrite(amarillo2, HIGH);
   digitalWrite(rojo1, HIGH);
   digitalWrite(rojo2, LOW);   
  }
  else if(Valor==6)
  {
   digitalWrite(verde1, HIGH);
   digitalWrite(verde2, HIGH);
   digitalWrite(amarillo1, HIGH);
   digitalWrite(amarillo2, HIGH);
   digitalWrite(rojo1, HIGH);
   digitalWrite(rojo2, HIGH);   
  }

}

Son dispositivos electrónicos conectados a Arduino que sirven para comunicarse con el mundo real actuando en base al programa cargado

ACTUADORES

LED y potenciómetro

Código

/*Variación de la intensidad del LED con potenciómetro.
Seguir las conexiones y una vez energizado, variar la 
del potenciómetro para cambiar la intensidad del LED
Prof. Daniel Tedesco */


int led = 3;
int pot = A0;

void setup() {
pinMode(led, OUTPUT);

}

void loop() {
analogWrite(led, analogRead(pot)/4);
}

Servomotor

Código

/* Funcionamiento básico de un microservo

**Desafío 1:
¿Cómo girar el servo 45 grados?
**Desafío 2:
¿Cómo girar el servo 120 grados?
**Desafío 3:
Generar un programa que cambie el nombre del servo 
y que gire de 45 grados a 120 grados 
en otro pin ¿Cuál podrías elegir?

Prof. Daniel Tedesco */



#include <Servo.h>

Servo servo;


void setup() {
servo.attach(9);
}

void loop() {
servo.write(0);
delay(2000);

servo.write(90);
delay(2000);
}

Pantalla LCD

Código

/* Imprimir mensajes de prueba y comunicaciones
en pantalla LCD I2C
Prof. Daniel Tedesco*/


#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16,2);

void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("LabTI");
lcd.setCursor(1, 1);
lcd.print("hola");
delay(1000);
lcd.clear();
delay(2000);

}

void loop() {
 lcd.setCursor(2, 0);
lcd.print("6TO");
delay(200);
lcd.clear();
delay(100);

}

Piedra, pepel o tijera

Código

/* Juego de piedra, papel o tijera, con pulsadores
Prof. Daniel Tedesco*/

const int PIEDRA = 2;
const int PAPEL = 3;
const int TIJERA = 4;

const int BUZZER = 5;
const int PULSADOR = 6;

int azar=0;

void setup()
{
  pinMode(PIEDRA, OUTPUT);
  pinMode(PAPEL, OUTPUT);
  pinMode(TIJERA, OUTPUT);

  pinMode(PULSADOR, INPUT_PULLUP);
  randomSeed(analogRead(A0));
}

void loop()
{
  if(digitalRead(PULSADOR)==LOW)
  {
    activacion_leds();
    activacion_leds();
    activacion_leds(); 
    azar=random(1,4);
      
    if(azar==1)
    {
       digitalWrite(PIEDRA,HIGH);
       tone(BUZZER,600,300);
      delay(5000);
      digitalWrite(PIEDRA,LOW);
    }
    if(azar==2)
    {
       digitalWrite(PAPEL,HIGH);
       tone(BUZZER,600,300);
      delay(5000);
      digitalWrite(PAPEL,LOW);
    }
    if(azar==3)
    {
      digitalWrite(TIJERA,HIGH);
       tone(BUZZER,600,300);
      delay(5000);
      digitalWrite(TIJERA,LOW);
    }
  }
 
}

void activacion_leds()
{
    digitalWrite(PIEDRA,HIGH);
    digitalWrite(PAPEL,HIGH);
    digitalWrite(TIJERA,HIGH);
    tone(BUZZER,400,100);
    delay(500);
    digitalWrite(PIEDRA,LOW);
    digitalWrite(PAPEL,LOW);
    digitalWrite(TIJERA,LOW);
    delay(500);
}

Rotador de planetas

/*Programa que realiza un giro completo en sentido horario o antihorario de un motor paso a paso con driver UNL2003A.
 Para girar en un único sentido, incluír en Void Loop solamente Motorcito.step(PasosGiro)
 Para girar en ambos sentidos, incluír:
 Motorcito.step(PasosGiro) Horario (incluír delay)
 Motorcito.step(-PasosGiro)Antihorario (incluír delay)
 Para variar la velocidad del motor modifcar la variable VelMotor en un rango de 1 a 12.
 Prof. Daniel Tedesco
 */

#include <Stepper.h> // Inckuír la librería externa <Stepper.h>
int PasosGiro = 2048; //Indicar la cantidad de pasos que dará el motor
int VelMotor = 2; //Velocidad de rotación (1-12)
Stepper Motorcito(PasosGiro,8,10,9,11); // Nombrar motor e indicar los pines
int dt = 1500; // DelayTime, tiempo de espera en milisegundos

void setup() {
  
  Motorcito.setSpeed(VelMotor); //Setear la velocidad del motor
  
}

void loop() {
  
  Motorcito.step(PasosGiro);//Indicar la cantidad de pasos a girar
  delay(dt);//Borrar a partir de acá si se quiere un giro completo
  Motorcito.step(-PasosGiro);//Giro en sentido antihorario
  delay(dt);
  
}

Código elemental

Código 1

/*
	Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
	basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
	paso completo simple (wave drive) energizando de a una bobina por vez utilizando una
	matriz para su definicion. 
	Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.

*/

int IN1 = 8;			// pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9;			// pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10;			// pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11;			// pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20;   		// demora entre pasos, no debe ser menor a 10 ms.
// paso completo simple
int paso [4][4] =		// matriz (array bidimensional) con la secuencia de pasos
{
  {1, 0, 0, 0},
  {0, 1, 0, 0},
  {0, 0, 1, 0},
  {0, 0, 0, 1}
};

void setup() {
  pinMode(IN1, OUTPUT);		// todos los pines como salida
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  for (int i = 0; i < 512; i++)	// 512*4 = 2048 pasos
  {
    for (int i = 0; i < 4; i++)		// bucle recorre la matriz de a una fila por vez
    {					// para obtener los valores logicos a aplicar
      digitalWrite(IN1, paso[i][0]);	// a IN1, IN2, IN3 e IN4
      digitalWrite(IN2, paso[i][1]);
      digitalWrite(IN3, paso[i][2]);
      digitalWrite(IN4, paso[i][3]);
      delay(demora);
    }
  }

  digitalWrite(IN1, LOW);	// detiene por 5 seg.
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(5000);

}

Código 2

/*
  Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
  basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
  paso completo con dos bobinas para una maximo torque utilizando una matriz para su 
  definicion. 
  Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.
 

*/

int IN1 = 8;      // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9;      // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10;     // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11;     // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20;      // demora entre pasos, no debe ser menor a 10 ms.
// paso completo con maximo torque
int paso [4][4] =   // matriz (array bidimensional) con la secuencia de pasos
{
  {1, 1, 0, 0},
  {0, 1, 1, 0},
  {0, 0, 1, 1},
  {1, 0, 0, 1}
};

void setup() {
  pinMode(IN1, OUTPUT);   // todos los pines como salida
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  for (int i = 0; i < 512; i++) // 512*4 = 2048 pasos
  {
    for (int i = 0; i < 4; i++)   // bucle recorre la matriz de a una fila por vez
    {         // para obtener los valores logicos a aplicar
      digitalWrite(IN1, paso[i][0]);  // a IN1, IN2, IN3 e IN4
      digitalWrite(IN2, paso[i][1]);
      digitalWrite(IN3, paso[i][2]);
      digitalWrite(IN4, paso[i][3]);
      delay(demora);
    }
  }

  digitalWrite(IN1, LOW); // detiene por 5 seg.
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(5000);

}

Código 3

/*
	Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
	basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
	medio paso para maxima precision y torque medio utilizando una matriz para su 
	definicion. 
	Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.

	
*/

int IN1 = 8;			// pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9;			// pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10;			// pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11;			// pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20;   		// demora entre pasos, no debe ser menor a 10 ms.
// medio paso
int paso [8][4] =		// matriz (array bidimensional) con la secuencia de pasos
{
  {1, 0, 0, 0},
  {1, 1, 0, 0},
  {0, 1, 0, 0},
  {0, 1, 1, 0},
  {0, 0, 1, 0},
  {0, 0, 1, 1},
  {0, 0, 0, 1},
  {1, 0, 0, 1}
};

void setup() {
  pinMode(IN1, OUTPUT);		// todos los pines como salida
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  for (int i = 0; i < 512; i++)	// 512*8 = 4096 pasos
  {
    for (int i = 0; i < 8; i++)		// bucle recorre la matriz de a una fila por vez
    {					// para obtener los valores logicos a aplicar
      digitalWrite(IN1, paso[i][0]);	// a IN1, IN2, IN3 e IN4
      digitalWrite(IN2, paso[i][1]);
      digitalWrite(IN3, paso[i][2]);
      digitalWrite(IN4, paso[i][3]);
      delay(demora);
    }
  }

  digitalWrite(IN1, LOW);	// detiene por 5 seg.
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(5000);

}

Son dispositivos de entrada que proveen datos para procesar sobre la medición de una variable. Poseen la capacidad de detectar magnitudes físicas o químicas,  entregando señales eléctricas a la salida (analógicas o digitales).

 

Sensores

Fotoresistencia (Novel)

Código

/*Fotoresistencia con IF:

En el funcionamiento de la estructura IF se dan las siguientes 
condiciones: 
if (Condición){
Acción 1}
else {
Acción 2}

Prof. Daniel Tedesco */

int sensor = A0;
int rojo = 8;
int amarillo = 9;
int verde = 10;
int lectura;

void setup() {
 Serial.begin(9600);
 pinMode(rojo, OUTPUT);
  pinMode(amarillo, OUTPUT);
   pinMode(verde, OUTPUT);

}

void loop() {
 lectura = analogRead(sensor);
 Serial.println(lectura);
 if (lectura <300) {
  digitalWrite( rojo, HIGH);
  digitalWrite( amarillo, HIGH);
  digitalWrite( verde, HIGH);
 }
else {
  digitalWrite( rojo, LOW);
  digitalWrite( amarillo, LOW);
  digitalWrite( verde, LOW);
}
}

¿Cómo configurarías los valores para un ambiente más o menos iluminado?

Ultrasonido+Alarma (Experimentado)

Código

¿Cómo cambiarías la distancia y la intensidad del led?

/* Encendemos la alarma mediante el buzzer y el led
cuando la distancia sea inferior a 10 cm.
Luego imprimimos en monitor serial el valoor de la distancia
Prof. Daniel Tedesco */

int trig = 2; //Asignamos el emisor al pin 2
int echo =3;//Asignamos el receptor al pin 3
int duracion; //Creamos las variables duracion y distancia
int distancia;
int led = 7;//asignamos el led al pin 7
int buzzer = 8;//asignamos el buzzer al pin 8

void setup()
{
  Serial.begin(9600);//inicializamos monitor serie a 9600 baudios
  pinMode(trig, OUTPUT);//configuramos los parametros de entrada y salida
  pinMode(echo, INPUT);
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);
}

void loop()
{
  digitalWrite(trig, HIGH);
  delay(10); // Wait for 10 millisecond(s)
  digitalWrite(trig, LOW);
  duracion = pulseIn(echo, HIGH);//una de las tantas fórmulas para calcular distancia
  distancia=(duracion/2) /29;
  Serial.println(distancia);// imprimimos en monitor serial el valor de la distancia
  
  if (distancia<10){    //si la distancia es menor a 10cm se enciende el buzzer y el led
    digitalWrite(led, HIGH);
    digitalWrite(buzzer, HIGH);
    delay(200);
    digitalWrite(led, LOW);
    digitalWrite(buzzer, LOW);
    delay(200);
  }
}

Alarma Sensor PIR

Código

// Alarma de presencia con sensor PIR
// Prof. Daniel Tedesco

#define pirsensor 13
#define buzzer 8
#define led1 6
#define led2 4
#define led3 2

void setup()
{
 pinMode (buzzer, OUTPUT);
 pinMode (led1, OUTPUT);
 pinMode (led2, OUTPUT);
 pinMode (led3, OUTPUT);
 pinMode (pirsensor, INPUT);
}

void loop()
{
  if(digitalRead(pirsensor)==HIGH)
  {
  digitalWrite(buzzer, HIGH);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  delay(3000);
  }
  else
  {
   digitalWrite(buzzer, LOW);
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
  }
}

Audiorítmico

Aplausómetro

 

Integrador

Módulo micrófono

Electet

Aplausómetro (novel)

Pin A0 - No se conecta

Código

/* Aplausómetro con LED 
Prof. Daniel Tedesco */

int led = 9;
int sensor = 2;

void setup() {
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);

}

void loop() {
while(digitalRead(sensor)==LOW);
digitalWrite(led, !digitalRead(led));
while(digitalRead(sensor)==HIGH);


}

Audiorítmico (experimentado)

Audiorítmico (Código)

/* Código audiorítmico con módulo
micrófono y LEDS
Prof. Daniel Tedesco */

int led1 = 9;
int led2 = 10;
int led3 = 11;
int led4 = 12;
int sensor = 2;
int valor;

void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}

void loop() {
valor = digitalRead(sensor);
Serial.println(valor);
if(valor == HIGH){
  digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
     digitalWrite(led4, HIGH);
}
 else{
  digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
     digitalWrite(led4, LOW);
 }
}

Básicos Arduino

By profdanieltedesco

Básicos Arduino

Introducing Slides AI, an innovative tool that will streamline the way you create presentations. Powered by OpenAI GPT.

  • 217