Project

General

Profile

Código e implementación » History » Version 11

Version 10 (Esteban Gutierrez, 12/12/2023 07:16 PM) → Version 11/13 (Esteban Gutierrez, 12/26/2023 10:10 PM)

h1. ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤWikipedia

{{thumbnail(LogoPASCALITO.png, size=180, title=Thumbnail)}}

----

+*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:*
* [[Introducción]]
* [[Objetivos]]
* [[Organización y planificación]]
* [[Análisis y diseño]]
* [[Código e implementación]]

---

h1. Código e implementación

---

h2. Funciones

{{collapse(Código
El robot utiliza este codigo para realizar su conexión y enviarle acciones de las funciones: )
<pre><code class="python">
#!/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
movimiento/golpe

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()

</code></pre>
}}

h2. Servidor

{{collapse(Código del servidor: )
<pre><code class="python">
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)

</code></pre>
}}

h2. Interfaz Gráfica

{{collapse(Código
interfaz gráfica: gráfica y conexión: )
<pre><code class="python">
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()

</code></pre>
}}

---

*Ficheros*