• Código y Implementación¶
Código de la Interfaz.
import os
import socket
class ControlRemotoGUI:
def __init__(self, master):
self.master = master
master.title("Control Remoto LEGO EV3")
server= socket.socket()
ip= "192.168.1.84"
port= 8080
def avanzar():
server.send(bytes([ord['w']]))
def retroceder():
server.send(bytes([ord['s']]))
def izquierda():
server.send(bytes([ord['a']]))
def derecha():
server.send(bytes([ord['d']]))
def golpear():
server.send(bytes([ord['e']]))
def detener():
server.send(bytes([ord[' ']]))
def conectar(addres):
try:
server.connect((addres, port))
messagebox.showinfo("Conectado, se establecio la conexion correctamente")
except socket.error:
messagebox.showwarning("Conexion erronea, verifique la direccion ip")
# Obtener la ruta actual
script_dir = os.path.dirname(os.path.abspath(__file__))
# Cargar imagenes desde la carpeta
self.img_avanzar = self.load_image(os.path.join(script_dir, "Arriba.gif"))
self.img_retroceder = self.load_image(os.path.join(script_dir, "Abajo.gif"))
self.img_izquierda = self.load_image(os.path.join(script_dir, "Izquierda.gif"))
self.img_derecha = self.load_image(os.path.join(script_dir, "Derecha.gif"))
self.img_golpear = self.load_image(os.path.join(script_dir, "Stop.gif"))
self.img_conectar = self.load_image(os.path.join(script_dir, "Conectar.gif"))
# Configuracion de la ventana
master.geometry("770x500")
master.resizable(width=False, height=False)
# Cargar la imagen de fondo y almacenarla como un atributo de instancia
self.bg_image = tk.PhotoImage(file=os.path.join(script_dir, "Background.gif"))
# Mostrar la imagen de fondo en un Label
label = tk.Label(master, image=self.bg_image)
label.place(x=0, y=0, relwidth=1, relheight=1)
self.btn_avanzar = tk.Button(master, image=self.img_avanzar, command=self.avanzar)
self.btn_avanzar.place(relx=0.5, rely=0.25, anchor=tk.CENTER)
self.btn_retroceder = tk.Button(master, image=self.img_retroceder, command=self.retroceder)
self.btn_retroceder.place(relx=0.5, rely=0.75, anchor=tk.CENTER)
self.btn_izquierda = tk.Button(master, image=self.img_izquierda, command=self.izquierda)
self.btn_izquierda.place(relx=0.25, rely=0.5, anchor=tk.CENTER)
self.btn_derecha = tk.Button(master, image=self.img_derecha, command=self.derecha)
self.btn_derecha.place(relx=0.75, rely=0.5, anchor=tk.CENTER)
# Boton de golpear
self.btn_golpear = tk.Button(master, image=self.img_golpear, command=self.golpear)
self.btn_golpear.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
# Boton de conectar con el servidor
self.btn_conectar = tk.Button(master, image=self.img_conectar, command=self.conectar(ip))
self.btn_conectar.place(relx=0.15, rely=0.1, anchor=tk.CENTER)
def load_image(self, path):
img = tk.PhotoImage(file=path)
return img
if __name__ == "__main__":
root = tk.Tk()
app = ControlRemotoGUI(root)
root.mainloop()
Codigo del servidor¶
import socket
s= socket.socket()
print("Socket creado")
port = 8080
s.bind(('', port))
print("El socket se creo con puerto: {}".format(port))
s.listen(5)
print("EL socket is listening....")
connect, addr = s.accept()
print("Se conecto a {}".format(addr))
while True:
rawByte = connect.recv(1)
char = rawByte.decode('utf-8')
if (char == 'w'):
Mov_Avanzar()
if (char == 's'):
Mov_Retroceder()
if (char == 'd'):
Mov_Izquierda()
if (char == 'a'):
Mov_Derecha()
if (char == 'e'):
Mov_Golpear()
if (char == ' '):
Mov_Detener()
Código de las funciones¶
from ev3dev2.motor import LargeMotor, MoveTank,OUTPUT_A, OUTPUT_B, OUTPUT_C
from time import sleep
m= MoveTank(OUTPUT_A,OUTPUT_B)
n= LargeMotor(OUTPUT_C)
l= LargeMotor(OUTPUT_A)
r= LargeMotor(OUTPUT_B)
def Mov_Avanzar():
m.run_forever(speed_sp=-400)
def Mov_Retrocer():
m.run_forever(speed_sp=400)
def Mov_Izquierda():
l.run_forever(speed_sp=-60)
r.run_forever(speed_sp=60)
def Mov_Derecha():
l.run_forever(speed_sp=60)
r.run_forever(speed_sp=-60)
def Mov_Golpear():
n.on_for_deggres(speed=10, deggres=45)
n.on_for_deggres(speed=100, deggres=-105)
n.off()
def Detener():
m.stop()
n.stop()
La física en el golpe del robot.¶
primera ley de Newton: Esta ley del movimiento establece que un cuerpo no puede cambiar su estado inicial de reposo o de movimiento recto con una velocidad constante si no se le aplica una o varias fuerzas externas.
segunda ley de Newton: Esta ley plantea que la fuerza neta aplicada sobre un objeto es directamente proporcional a la aceleración que este adquiere en su trayectoria.
tercera ley de Newton: Esta ley plantea que toda acción genera una reacción de igual intensidad, pero en sentido opuesto.
-La física se ocupa en el golf y para nuestro proyecto igual ya que, mediante el brazo del robot se efectúa un golpe hacia la pelota, mientras la pelota va disparada
en el vuelo de este se logra ver lo que es el movimiento parabólico.
grafico de la trayectoria de la pelota después del golpe.