Está en la página 1de 13

INSTITUTO ARNAIZ

NIVEL SECUNDARIA

Ciclo Escolar
2022-2023

Disciplina:

TECNOLOGÍA III
ROBÓTICA

Semestre B
Guía de estudio
¿Qué es una función? y como utilizarla
Es un segmento de código que está separado del código principal del programa, que realiza una
tarea específica y regresa a la zona del programa donde fue llamada.

Luego de declarar las funciones principales void setup y void loop


podemos agregar más funciones luego, pero la que Arduino correrá
será void loop. En este caso podemos llamar a la función “ejemplo”
desde void loop para correrla y que esta ejecute su código interno
podría ser una operación matemática como ejemplo.

Utilidades de las funciones.


Ayudan al programador a ser mucho más organizado separando por
nombres las funciones haciendo que el código sea legible.

Al utilizar funciones podemos hacer más compacto nuestro código organizándolo por bloques y
llamando a las funciones con solo utilizar su nombre para correr su código interno esto nos
permite que nuestro código sea más ligero y fácil de entender. Las funciones codifican una acción
en un lugar solo deben ser depuradas de errores una vez.

Declarando funciones

La función debe ser declarada fuera de cualquier otra


función, por lo tanto, puede antes o después de la función
loop.

Partes de una función.

Tipo de dato: int, doublé, void. (Tipo void, si no regresa ningún valor).

Nombre de la función: El nombre no puede llevar espacios puedes usar guion bajo “ejemplo_1” y
no puedes utilizar palabras reservadas del lenguaje de programación.

Parámetros: es una variable que envía la función loop, se utiliza para realizar algún cálculo o tarea.
Se dejan vacíos si no requiere ningún parámetro.

Código: El código que escribiremos debe estar entre las llaves y cada línea se cierra con punto y
coma.

Retorno: “return” es el valor que regresa la función, debe ser del mismo tipo del parámetro que se
escribió.

En el ejemplo la función “cincuenta_porciento” del tipo int, va a calcular el 50% de una


determinada cantidad, vamos a recibir un parámetro que es esa cantidad, si suponemos que es
100, en el código de la función tengo un int llamado resultado que será el valor 100 en este caso *
0.5 para calcular el 50% ahora mi variable resultada tendrá un valor de 50, entonces con return
devolverá este valor a la función void loop.

Llamar la función.

Para invocar la función en este caso para funciones que regresan un valor. Está compuesta por una
variable que va a almacenar el valor de retorno, en este caso la variable se llama “res” ahora esta
variable vale 50, seguido pondremos el nombre de la función “cincuenta_porciento (100)”.
Básicamente este es el código con el que se manda a llamar una función.

Declaración de funciones tipo Void.

La manera de declararla es parecida a la anterior, en este caso


no quiero que regrese ningún valor usaremos void, luego el
nombre de la función y cuando no se necesita que regresen
valores los paréntesis se dejan vacíos. Esta función también
calcula el 50% de un valor, pero aquí mismo se le asigna y aquí
mismo lo muestra, ya que no está recibiendo o enviando
valores a la función loop. Declaro mi variable llamada resultado
será igual a 100*0.5 que será 50, esto se mostrará en el
monitor serial. Por medio de Serial.print, y el delay es para
darle un tiempo a la respuesta del cálculo. No regresa ningún valor.

Llamando función tipo Void.

Es un código más sencillo solo cuenta con el nombre de la


función que se desea llamar, y por los parámetros que se le
enviaran a la función, en este caso no enviaremos ningún
parámetro por lo que los paréntesis se dejan vacíos. Y así de
esta manera llamaremos a la función.

REALIZA LOS SIGUIENTES EJERCICIOS ESCRIBIENDO EL NUEVO


CÓDIGO EN TU LIBRETA
Ejercicio 1: En el siguiente código debes crear tus propias funciones para que en la sección void
loop() solo estén llamadas a funciones

NOTA: Puedes crear una función para hacer los 2 ciclos for.

Código
void setup(){
for(int c=9;c<=13;c++){
pinMode(c,OUTPUT);
}
}

void loop(){
for(int i=9;i<=13;i++){
digitalWrite(i, HIGH);
delay(200);
digitalWrite(i, LOW);
delay(200);
}

for(int i=13;i>=9;i--){
digitalWrite(i, HIGH);
delay(200);
digitalWrite(i, LOW);
delay(200);
}
}

Ejercicio 2: En el siguiente código debes crear tus propias funciones para que en la sección void
loop() solo estén llamadas a funciones
NOTA: Puedes crear una función para hacer la comparación de distancia

Código
#define LED 9
#define TRIGGER 7
#define ECHO 6
int distancia = 0;
long duracion;
void setup(){
Serial.begin(9600);
pinMode(GND_M, OUTPUT);
pinMode(VCC_M, OUTPUT);
pinMode(LED,OUTPUT);
pinMode(TRIGGER,OUTPUT);
pinMode(ECHO,INPUT);
}
void loop(){
digitalWrite(LED,LOW);

digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
duracion = pulseIn(ECHO, HIGH);
distancia = duracion*0.034/2;
if(distancia > 10){
digitalWrite(LED,HIGH);
}else{
digitalWrite(LED,LOW);
}
Serial.print("Distnacia: ");
Serial.println(distancia);
}
Ejercicio 3: En el siguiente código debes crear tus propias funciones para que en la sección void
loop() solo estén llamadas a funciones
NOTA: Puedes crear una función para hacer los giros del motor.

Código
int GND = 7;
int VCC = 6;

void setup(){
pinMode(GND, OUTPUT);
pinMode(VCC, OUTPUT);
}

void loop(){
digitalWrite(GND, LOW);
digitalWrite(VCC, HIGH);
delay(500);

digitalWrite(GND, LOW);
digitalWrite(VCC, LOW);
delay(1000);
}

ABRE LAS PRÁCTICAS HECHAS CON LOS CODIGOS ANTERIORES Y


PRUEBA TUS CÓDIGOS CREANDO FUNCIONES
➢ Práctica SENSOR ULTRASONICO
➢ Práctica: MOTOR DC

➢ Práctica para AGREGAR PUENTE H CON 1 MOTOR

➢ Práctica para PUENTE H CON 2 MOTORES


CONCEPTOS BÁSICOS
Sensor Ultrasónico
Los sensores de ultrasonidos son detectores de proximidad que trabajan libres de roces mecánicos
y que detectan objetos a distancias que van desde pocos centímetros hasta varios metros. El sensor
emite un sonido y mide el tiempo que la señal tarda en regresar. Estos reflejan en un objeto, el
sensor recibe el eco producido y lo convierte en señales eléctricas, las cuales son elaboradas en el
aparato de valoración.

Estos sensores trabajan solamente en el aire, y pueden detectar objetos con diferentes formas,
colores, superficies y de diferentes materiales. Los materiales pueden ser sólidos, líquidos o
polvorientos, sin embargo, han de ser deflectores de sonido.

Los sensores trabajan según el tiempo de transcurso del eco, es decir, se valora la distancia temporal
entre el impulso de emisión y el impulso del eco.

Tiene 4 principales pines de conexión:

• VCC (+5V DC)


• TRIG (Disparo del ultrasonido)
• ECHO (Recepción del ultrasonido)
• GND (0V)

Como se puede observar en la siguiente ilustración.

Un sensor óptico tiene un transmisor y receptor, mientras que un sensor ultrasónico utiliza un
elemento ultrasónico único, tanto para la emisión como la recepción. En un sensor ultrasónico de
modelo reflectivo, un solo oscilador emite y recibe las ondas ultrasónicas, alternativamente. Esto
permite la miniaturización del cabezal del sensor.

La distancia se puede calcular con la siguiente fórmula:

Distancia L = 1/2 × T × C

donde L es la distancia, T es el tiempo entre la emisión y la recepción, y C es la velocidad del sonido.


(El valor se multiplica por 1/2 ya que T es el tiempo de recorrido de ida y vuelta).

ACTIVIDAD
En esta práctica vamos a aprender a medir la distancia desde un sensor a un objeto. Para ello,
usaremos el sensor de ultrasonidos HC-SR04. Se pide que por el serial salga la distancia, en cm, entre
el sensor de ultrasonidos y el primer objeto que se interponga con el sensor.

El rango de medición del HC-SR04 está entre los dos 2 cm y los 500 cm; fuera de estos límites no
mide con exactitud. La resolución es de 0,3 cm.

La idea básica es que el sensor lanza un ultrasonido que chocará con el objeto regresando al sensor.
Sabiendo el tiempo que dura este proceso y la velocidad del sonido (340 m/s), podremos calcular la
distancia a la que se encuentra el objeto.

Código
#define LEDVERDE 11
#define LEDAMARILLO 12
#define LEDROJO 13
#define TRIGGER 5
#define ECHO 4
#define BUZZER 8
const float sonido = 34300.0; // Velocidad del sonido en cm/s
const float umbral1 = 250.0;
const float umbral2 = 150.0;
const float umbral3 = 50.0;

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

pinMode(LEDVERDE,OUTPUT);
pinMode(LEDAMARILLO,OUTPUT);
pinMode(LEDROJO,OUTPUT);

pinMode(BUZZER,OUTPUT);
pinMode(TRIGGER,OUTPUT);

pinMode(ECHO,INPUT);
apagarLEDs();
}

void loop(){
iniciarTrigger();

float distancia = calcularDistancia();

apagarLEDs();

if (distancia < umbral1){


alertas(distancia);
}
}

void apagarLEDs(){
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDAMARILLO, LOW);
digitalWrite(LEDROJO, LOW);
}

void iniciarTrigger(){
digitalWrite(TRIGGER,LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER,HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER,LOW);
}

float calcularDistancia(){
// La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo = pulseIn(ECHO,HIGH);
// Obtenemos la distancia en cm, hay que convertir el tiempo en segundos ya que está en
microsegundos por eso se multiplica por 0.000001
float distancia = tiempo * 0.000001 * sonido / 2.0;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
delay(500);
return distancia;
}

void alertas(float distancia){


if(distancia < umbral1 && distancia >= umbral2){// Encendemos el LED verde
digitalWrite(LEDVERDE,HIGH);
tone(BUZZER,500,200);
}else if(distancia < umbral2 && distancia >= umbral3){// Encendemos el LED amarillo
digitalWrite(LEDAMARILLO,HIGH);
tone(BUZZER,1000,100);
}else if(distancia < umbral3){// Encendemos el LED rojo
digitalWrite(LEDROJO,HIGH);
tone(BUZZER,1500,50);
}
}

Montaje.
Debemos guiarnos del diagrama
mostrado en la siguiente ilustración

Driver L293D
El L293D es un controlador cuádruple de alta intensidad de media-H. El L293D está diseñado para
proporcionar corrientes de accionamiento bidireccionales de hasta 600 mA a tensiones de 4.5V a
36V. El dispositivo está diseñado para impulsar cargas inductivas, como relés, solenoides, motores
paso a paso bipolares y CC, así como otras cargas de alta corriente/alto voltaje en aplicaciones de
suministro positivo. Todas las entradas son TTL compatibles. Cada salida es un circuito de
accionamiento de tótem completo, con un sumidero de transistor darlington y una fuente pseudo-
Darlington. Los controladores se habilitan en pares, con los controladores 1 y 2 habilitados por 1,2EN
y los controladores 3 y 4 habilitados por 3,4EN. Cuando una entrada de habilitación es alta, los
controladores asociados están habilitados y sus salidas están activas y en fase con sus entradas.
Cuando la entrada de habilitación es baja, esos controladores están deshabilitados y sus salidas
están apagadas y en el estado de alta impedancia. Con las entradas de datos adecuadas, cada par
de conductores forma una unidad reversible-H completa (o puente) adecuada para aplicaciones de
solenoide o el motor.
PARA LAS PRÁCTICAS ANTERIORES “HECHAS EN TINKERCAD” DEBES
HACER SU REPORTE SIGUEINDO EL SIGUIENTE FORMATO EN TU
LIBRETA FIRMADO POR TU PADRE O TUTOR
Nombre de la práctica: Concepto:

Describe el procedimiento que realizaste:

Material y herramientas: Conclusiones:

Firma:

También podría gustarte