Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERÍA MECATRÓNICA
Tecnologías de Software Aplicadas a Sistemas Mecatrónicos
PRUEBA PARCIAL
Integrantes:
• Curipallo Yanque Deysi Geomara
• Semblantes Aguirre Javier Eduardo
• Evelin Katherine Quishpe Sangoquiza
• Chuqui Llamba Alex Fabricio
Docente: Ing. Edwin Alejandro Caizalitin Quinaluisa
Nrc: 3186
def contar_normal():
'NORMAL'
contador = 0
while contador<15:
contador+=1
print(contador)
time.sleep(0.2)
def transformacion():
'decimal a binario'
contador = 0
while contador<15:
contador+=1
binario=bin(contador)
print(' ',format(contador,'0b'))
time.sleep(0.2)
def par():
contador = 0
while contador<15:
contador+=1
resto= contador%2
if resto==0:
print(' ',contador**(2))
time.sleep(0.2)
else:
print(' ',0)
time.sleep(0.2)
def contar_factorial():
'Factorial'
contador = 1
contador2 = 1
mul=1
while True:
while contador2 <= 15:
mul*=contador2
print(' ',mul)
time.sleep(0.2)
contador2+=1
contador+=1
def letras():
contador = 0
while contador<=15:
contador+=1
if contador== 1:
print('
',"UNO")
if contador== 2:
print('
',"DOS")
if contador== 3:
print('
',"TRES")
if contador== 4:
print('
',"CUATRO")
if contador== 5:
print('
',"CINCO")
if contador== 6:
print('
',"SEIS")
if contador== 7:
print('
',"SIETE")
if contador== 8:
print('
',"OCHO")
if contador== 9:
print('
',"NUEVE")
if contador== 10:
print('
',"DIEZ")
if contador== 11:
print('
',"ONCE")
if contador== 12:
print('
',"DOCE")
if contador== 13:
print('
',"TRECE")
if contador== 14:
print('
',"CATORCE")
if contador== 15:
print('
',"QUINCE")
time.sleep(0.2)
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p1.join()
p2.join()
p3.join()
p4.join()
p5.join()
SALIDA DE PANTALLA
EXPLICACIÓN:
Para poder realizar una programación por hilos debemos importar las librerías de nombre
time y threading, para el contador de 0 a 15 creamos un método de nombre contar norma
donde debemos inicializar la variable contador en 0 pues esta ingresara a un ciclo while hasta
conseguir el valor de 15, los mismos que se verán reflejados en la salida de pantalla, para la
transformación de decimal a binario declaramos el mismo contador y ciclo while de 0 a 15
para obtener los datos necesitados utilizamos el comando “ bin” que automáticamente nos
entrega el equivalente binario del número deseado, para detectar números pares e impares a
los valores del contador dividimos para 0 y si su resto es 0 es un valor par y para que se
refleje en la pantalla debe estar elevado al cuadrado y en caso de que la condición no se
cumpla en su lugar aparecerá un 0, para los números factoriales declaramos dos contadores y
una variable mul inicializados en 1 los cuales utilizamos un while True, después empleamos
un contador hasta 15 mientras que la variable mul se multiplicará con el contador 2 y de esta
manera imprimimos los valores factoriales, después de cada proceso de va aumentando en
uno cada contador para cumplir la condición, por último para ver los nombre de los números
creamos un contador con un ciclo while hasta 15 y creamos las condición de que si el valor
de contador es igual a 1 se imprime el nombre del número, el mismo proceso se aplicó para el
resto de números, cada uno de estos procesos representan un hilo independiente en su
funcionamiento.
#include <pt.h>
#include <Servo.h>
Servo servomotor;
float pot;
float sensorValorGrados =0;
struct pt hilo1;
struct pt hilo2;
struct pt hilo3;
void setup() {
PT_INIT(&hilo1);
PT_INIT(&hilo2);
PT_INIT(&hilo3);
}
void loop() {
proceso1(&hilo1);
proceso2(&hilo2);
proceso3(&hilo3);
t = millis();
servomotor.write(0);
Serial.println(0);
PT_WAIT_UNTIL(pt, (millis()-t)>=1500);
servomotor.write(180);
Serial.print(180);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1500);
} while(true);
PT_END(pt)
}
do {
t = millis(); //0
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
/////1 1000
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////2 0100
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
///3 1100
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////4 0010
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////5 1010
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////6 0110
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////7 1110
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////8 0001
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////9 1001
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////10 0101
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////11 1101
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////12 0011
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////13 1011
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////14 0111
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
////15 1111
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
t = millis();
PT_WAIT_UNTIL(pt, (millis()-t)>=1500);
} while(true);
PT_END(pt)
}
CIRCUITO
Potenciómetro
FUNCIONAMIENTO
El circuito implementado consta de un potenciómetro, un servomotor y un circuito de leds
que nos entrega un número binario, cuya programación fue realizada en arduino mediante
threading o programación por hilos, por lo cual fueron instaurados tres hilos, cada proceso
tiene su funcionamiento independiente del resto, mediante la librería pt.h.
El primer hilo consta del funcionamiento de un servomotor que gira de 0 a 180, se
implementó el circuito en físico y en arduino mediante la librería Servo.h, el segundo hilo
consta de un sensor para lo cual se colocó un potenciómetro escalado, de tal forma que solo
se imprimen los datos en el serial, y finalmente el tercer hilo con un circuito que consta de led
en los cuales podemos observar una secuencia de 1 a 15 en binario, al finalizar se reinicia al
igual que el servomotor.
CÓDIGO:
# SDTR LDR
import threading
import time
#enteros de 0 a 1023
def enteros():
contador = 0
while True:
for contador in range (1, 1024):
print(contador, ' ')
contador+=1
time.sleep(0.1)
#escalamiento a voltaje
def voltaje():
contador = 0
while True:
for contador in range (1, 1024):
print(' ', round(0.0049 * contador), 'V', ' ')
contador+=1
time.sleep(0.1)
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
SALIDA DE PANTALLA:
EXPLICACIÓN:
Para este ejercicio se escogió simular la lectura de datos de un LDR y su porcentaje de
luminosidad dependiendo del voltaje que recibe.
Para la lectura de los enteros entre 0 y 1023 se usó un ciclo for dentro de un while para que la
acción se repita cuantas veces sea necesario.
while True:
for contador in range (1, 1024):
print(contador, ' ')
contador+=1
time.sleep(0.1)
Mediante una adquisición de datos se logró escalar los valores hasta obtener una ecuación
característica 𝑦 = 0. 0049 𝑥 la cual fue usada en el código para obtener los valores del
voltaje entre 0 y 5 voltios.
Por ultimo aqui podemos ver de qué manera se van activando los hilos en la programación:
p1 = threading.Thread(name='HILO 1', target=enteros)
p2 = threading.Thread(name='HILO 2', target=voltaje)
p3 = threading.Thread(name='HILO 3', target=luminosidad)
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()