Project

General

Profile

• Código y Implementación » History » Version 4

« Previous - Version 4/5 (diff) - Next » - Current version
Nelson Ramirez, 12/26/2023 03:55 PM


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

segunda ley de Newton:

tercera ley de Newton:

Ficheros

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