Wiki » Introducción »
Código e implementación » History » Version 11
« Previous -
Version 11/13
(diff) -
Next » -
Current version
Esteban Gutierrez, 12/26/2023 10:10 PM
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤWikipedia¶
Grupo 3B:
Integrantes: Denis Condori, Ignacio Gallardo, Esteban Gutierrez, Fernando Klinger, Martin Salinas
Nombre del Producto: PASCALITO
Modulo: Proyecto I
Docente: Humberto Urrutia
Fecha de Inicio: 2023-08-15
Fecha de Termino: 2023-12-29
ㅤㅤㅤㅤㅤㅤㅤÍndice:
Código e implementación¶
Funciones¶
Código de las funciones:Código de las funciones:
#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedPercent, MoveTank
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor .lego import UltrasonicSensor
from ev3dev2.sound import Sound
from ev3dev2.led import Leds
motor_angle= LargeMotor(OUTPUT_A)
cannon = MediumMotor(OUTPUT_D)
sonido = Sound()
sensor = UltrasonicSensor(INPUT_1)
sensor.mode = "US-DIST-CM"
tankmoves = MoveTank(OUTPUT_B,OUTPUT_C)
def moveUp():
print("Moving up...")
tankmoves.on(SpeedPercent(100),SpeedPercent(100))
def moveDown():
print("Moving down...")
tankmoves.on(SpeedPercent(-100),SpeedPercent(-100))
def moveRight():
print("Moving right...")
tankmoves.on(SpeedPercent(100),SpeedPercent(-100))
def moveLeft():
print("Moving left...")
tankmoves.on(SpeedPercent(-100),SpeedPercent(100))
def Stop():
tankmoves.stop()
Servidor¶
Código del servidor:Código del servidor:
import socket
from ev3dev2.motor import MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, SpeedPercent, MoveTank
tankmoves = MoveTank(OUTPUT_B,OUTPUT_C)
brazo = MediumMotor(OUTPUT_A)
ip_host = input("Ingrese la ip que muestra el robot: ")
host = ip_host
port = 8000
server = socket.socket()
server.bind((host, port))
server.listen(5)
conexion, addr = server.accept()
print("Nueva conexion establecida")
print("conectado a ", addr)
running = True
while running:
mensaje = conexion.recv(1024).decode("utf-8")
print(mensaje)
if mensaje == 'arriba':
tankmoves.on(SpeedPercent(10), SpeedPercent(10))
elif mensaje == 'abajo':
tankmoves.on(SpeedPercent(-10), SpeedPercent(-10))
elif mensaje == 'izquierda':
tankmoves.on(SpeedPercent(20), SpeedPercent(-20))
elif mensaje == 'derecha':
tankmoves.on(SpeedPercent(-20), SpeedPercent(20))
elif mensaje == 'detener':
tankmoves.on(SpeedPercent(0), SpeedPercent(0))
elif mensaje == 'apagar':
running = False
conexion.close()
print("La conexion termino!")
elif mensaje == 'golpear':
brazo.on_for_degrees(SpeedPercent(30), 45)
brazo.on_for_degrees(SpeedPercent(100), -95)
Interfaz Gráfica¶
Código interfaz gráfica:Código interfaz gráfica:
import tkinter as tk
import socket
def mover(direccion):
global mi_socket
if direccion == "arriba":
mi_socket.send("arriba".encode("utf-8"))
elif direccion == "abajo":
mi_socket.send("abajo".encode("utf-8"))
elif direccion == "izquierda":
mi_socket.send("izquierda".encode("utf-8"))
elif direccion == "derecha":
mi_socket.send("derecha".encode("utf-8"))
def conectar():
global mi_socket
# Función para manejar la conexión con la dirección IP ingresada
ip = entrada_ip.get()
host = str(ip)
port = 8000
mi_socket = socket.socket()
mi_socket.connect((host, port))
def detener():
global mi_socket
mi_socket.send("detener".encode("utf-8"))
def apagar():
global mi_socket
mi_socket.send("apagar".encode("utf-8"))
def disparar():
global mi_socket
mi_socket.send("disparar".encode("utf-8"))
# Crear la ventana principal
ventana = tk.Tk()
ventana.title("Interfaz gráfica de PASCALITO")
ventana.geometry("900x600")
ventana.config(bg="grey85")
# Etiqueta y entrada para la dirección IP
etiqueta_ip = tk.Label(ventana, text="Dirección IP", font=("Arial",18,"bold"),bg="grey85")
etiqueta_ip.place(x=100, y=50)
entrada_ip = tk.Entry(ventana, font=("bold",18))
entrada_ip.place(x=250, y=50)
img_boton_conectar= tk.PhotoImage(file="connect.png")
boton_conectar = tk.Button(ventana, text="Conectar",image=img_boton_conectar,bg="grey85", command=conectar)
boton_conectar.place(x=250, y=100)
img_boton_desconectar= tk.PhotoImage(file="disconnect.png")
boton_desconectar = tk.Button(ventana, text="Desconectar",image=img_boton_desconectar,bg="grey85", command=apagar)
boton_desconectar.place(x=420, y=100)
# Botones de disparo y detener
img_boton_45grados= tk.PhotoImage(file="45grados.png")
boton_45grados= tk.Button(ventana, text="45°",image=img_boton_45grados ,bg="grey85",command=disparar)
boton_45grados.place(x=400, y=280)
img_boton_60grados= tk.PhotoImage(file="60grados.png")
boton_60grados= tk.Button(ventana, text="60°",image=img_boton_60grados ,bg="grey85",command=disparar)
boton_60grados.place(x=550, y=200)
img_boton_90grados= tk.PhotoImage(file="90grados.png")
boton_90grados= tk.Button(ventana, text="90°",image=img_boton_90grados ,bg="grey85",command=disparar)
boton_90grados.place(x=700, y=280)
img_boton_disparar= tk.PhotoImage(file="shot.png")
boton_disparar= tk.Button(ventana, text="Disparar",image=img_boton_disparar ,command=disparar)
boton_disparar.place(x=540, y=300)
img_boton_stop= tk.PhotoImage(file="STOP.png")
boton_detener = tk.Button(ventana, text="Detener",image=img_boton_stop,bg="grey85",command=detener)
boton_detener.place(x=530, y=480)
# Botones de movimiento
img_boton_arriba = tk.PhotoImage(file="flecha-up1.png")
boton_arriba = tk.Button(ventana, image=img_boton_arriba,bg="grey85",command=lambda: mover("arriba"))
boton_arriba.place(x=145, y=240)
img_boton_izquierda = tk.PhotoImage(file="flecha-izquierda.png")
boton_izquierda = tk.Button(ventana, text="Izquierda",image=img_boton_izquierda,bg="grey85" ,command=lambda: mover("izquierda"))
boton_izquierda.place(x=25, y=315)
img_boton_derecha = tk.PhotoImage(file="flecha-derecha.png")
boton_derecha = tk.Button(ventana, text="Derecha",image=img_boton_derecha,bg="grey85", command=lambda: mover("derecha"))
boton_derecha.place(x=240, y=315)
img_boton_abajo = tk.PhotoImage(file="flecha-abajo.png")
boton_abajo = tk.Button(ventana, text="Abajo",image=img_boton_abajo,bg="grey85", command=lambda: mover("abajo"))
boton_abajo.place(x=145, y=360)
# Iniciar el bucle principal
ventana.mainloop()
Ficheros
LogoPASCALITO.png - LogoBETA (15.1 KB) Esteban Gutierrez, 09/09/2023 06:49 PM
Interfaz_Gráfica.rar - InterfazBETA (9.1 KB) Esteban Gutierrez, 12/12/2023 07:19 PM
Proyecto1.rar - Interfaz Final (101 KB) Esteban Gutierrez, 01/05/2024 02:49 AM