Project

General

Profile

• 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.

Ficheros

Python_Proyecto.rar (88.7 KB) Nelson Ramirez, 12/10/2023 02:03 PM