Project

General

Profile

Código e Implementación » History » Version 12

Javier Huanca, 12/16/2023 05:10 PM

1 1 Javier Huanca
h1. Código e Implementación 
2 1 Javier Huanca
3 1 Javier Huanca
h2. +Funciones+
4 2 Javier Huanca
5 7 Javier Huanca
<pre>
6 2 Javier Huanca
from ev3dev2.motor import LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedRPM, MoveTank
7 2 Javier Huanca
from ev3dev2.sound import Sound
8 2 Javier Huanca
import math
9 2 Javier Huanca
import os
10 2 Javier Huanca
import sys
11 2 Javier Huanca
from time import sleep
12 8 Javier Huanca
#movimiento simultáneo de las ruedas(rueda izquierda, rueda derecha)
13 8 Javier Huanca
movimiento_ruedas = MoveTank(OUTPUT_A, OUTPUT_B)
14 8 Javier Huanca
#movimiento del palo del robot
15 8 Javier Huanca
mPalo = LargeMotor(OUTPUT_C)
16 8 Javier Huanca
#movimiento de rotación de las ruedas delanteras
17 8 Javier Huanca
mRotar = MediumMotor(OUTPUT_D)
18 8 Javier Huanca
19 8 Javier Huanca
20 8 Javier Huanca
#función para lanzar un objeto con el palo
21 8 Javier Huanca
def lanzar(distancia):
22 8 Javier Huanca
    pi = math.pi
23 8 Javier Huanca
    vel_necesaria = math.sqrt((4.9*distancia)/math.cos(pi/4)*math.sin(pi/4))
24 8 Javier Huanca
    vel_rpm = (60*vel_necesaria)/(2*pi*0.189)
25 8 Javier Huanca
    # Rotar el motor en -180 grados al 6% de velocidad
26 8 Javier Huanca
    mPalo.on_for_degrees(6,-180)
27 8 Javier Huanca
    # Rotar el motor en 225 grados al porcentaje de velocidad de vel_rpm
28 8 Javier Huanca
    mPalo.on_for_degrees(SpeedRPM(round(vel_rpm)),225)
29 8 Javier Huanca
    # Rotar el motor en -45 grados al 6% de la velocidad
30 8 Javier Huanca
    mPalo.on_for_degrees(6,-45)
31 8 Javier Huanca
32 8 Javier Huanca
#función para mover el robot hacia adelante
33 8 Javier Huanca
def mover_adelante():
34 8 Javier Huanca
    movimiento_ruedas.on(-100, -100)
35 8 Javier Huanca
36 8 Javier Huanca
#función para mover el robot hacia atras
37 8 Javier Huanca
def mover_atras():
38 8 Javier Huanca
    movimiento_ruedas.on(100, 100)
39 8 Javier Huanca
40 8 Javier Huanca
#función para mover el robot hacia la izquierda
41 8 Javier Huanca
def mover_izquierda():
42 8 Javier Huanca
    mRotar.on(50)
43 8 Javier Huanca
44 8 Javier Huanca
#función para mover el robot hacia la derecha
45 8 Javier Huanca
def mover_derecha():
46 8 Javier Huanca
    mRotar.on(-50)
47 8 Javier Huanca
48 8 Javier Huanca
#función para detener el robot
49 8 Javier Huanca
def detener():
50 8 Javier Huanca
    movimiento_ruedas.stop()
51 5 Javier Huanca
</pre>
52 9 Javier Huanca
53 11 Javier Huanca
h2. +Servidor+
54 11 Javier Huanca
55 10 Javier Huanca
<pre>
56 9 Javier Huanca
import socket
57 9 Javier Huanca
from funciones import *
58 9 Javier Huanca
59 9 Javier Huanca
#se crea un socket
60 9 Javier Huanca
s = socket.socket()
61 9 Javier Huanca
s.settimeout(5)
62 9 Javier Huanca
print("Socket creado")
63 9 Javier Huanca
port = 2222
64 9 Javier Huanca
#se asocia una dirección IP y un número de puerto al socket
65 9 Javier Huanca
s.bind(("", port))
66 9 Javier Huanca
print("El socket se creo con puerto:{}".format(port))
67 9 Javier Huanca
#se comienza a escuchar conexiones entrantes (máximo 5 conexiones pendientes)
68 9 Javier Huanca
s.listen(5)
69 9 Javier Huanca
print("The socket is listening....")
70 9 Javier Huanca
#se acepta la conexión, creando un nuevo socket a partir de la conexion entrante y la dirección del cliente
71 9 Javier Huanca
connect, addr = s.accept()
72 9 Javier Huanca
print("Se conecto a {}".format(addr))
73 9 Javier Huanca
while True:
74 9 Javier Huanca
    #se define el carácter que el socket del cliente recibe como dato
75 9 Javier Huanca
    rawByte = connect.recv(1)
76 9 Javier Huanca
    #se traduce el carácter recibido
77 9 Javier Huanca
    char = rawByte.decode('utf-8')
78 9 Javier Huanca
    if (char == 'w'):
79 9 Javier Huanca
        mover_adelante()
80 9 Javier Huanca
    if (char == 's'):
81 9 Javier Huanca
        mover_atras()
82 9 Javier Huanca
    if (char == 'a'):
83 9 Javier Huanca
        mover_izquierda()
84 9 Javier Huanca
    if (char == 'd'):
85 9 Javier Huanca
        mover_derecha()
86 9 Javier Huanca
    if (char == ' '):
87 9 Javier Huanca
        detener()
88 9 Javier Huanca
    if (char == 'l'):
89 9 Javier Huanca
        lanzar(2)
90 9 Javier Huanca
</pre>
91 12 Javier Huanca
92 12 Javier Huanca
h2. +Interfaz+
93 12 Javier Huanca
94 12 Javier Huanca
<pre>
95 12 Javier Huanca
import tkinter as tk
96 12 Javier Huanca
from tkinter import ttk
97 12 Javier Huanca
from tkinter import messagebox
98 12 Javier Huanca
from tkinter import *
99 12 Javier Huanca
import socket
100 12 Javier Huanca
import sys
101 12 Javier Huanca
102 12 Javier Huanca
ev3_ip = "192.168.70.147"
103 12 Javier Huanca
104 12 Javier Huanca
#Ventana
105 12 Javier Huanca
root = tk.Tk()
106 12 Javier Huanca
root.config(width=1000, height=500)
107 12 Javier Huanca
root.config(bg="darkred")
108 12 Javier Huanca
root.title("ANT-0T0")
109 12 Javier Huanca
110 12 Javier Huanca
#Acciones del robot
111 12 Javier Huanca
def irAdelante():
112 12 Javier Huanca
    clientSocket.send(bytes([ord('w')]))
113 12 Javier Huanca
114 12 Javier Huanca
def irAtras():
115 12 Javier Huanca
    clientSocket.send(bytes([ord('s')]))
116 12 Javier Huanca
    
117 12 Javier Huanca
def irIzquierda():
118 12 Javier Huanca
    clientSocket.send(bytes([ord('a')]))
119 12 Javier Huanca
120 12 Javier Huanca
def irDerecha():
121 12 Javier Huanca
    clientSocket.send(bytes([ord('d')]))
122 12 Javier Huanca
123 12 Javier Huanca
def inicioLanzar():
124 12 Javier Huanca
    clientSocket.send(bytes([ord('l')]))
125 12 Javier Huanca
126 12 Javier Huanca
def soltar(event):
127 12 Javier Huanca
    clientSocket.send(bytes([ord(' ')]))
128 12 Javier Huanca
129 12 Javier Huanca
def conectar(address):
130 12 Javier Huanca
    try:
131 12 Javier Huanca
        clientSocket.connect((address,port))
132 12 Javier Huanca
        messagebox.showinfo("Mensaje Servido","Cliente conectado al robot: {0} : {1}".format(address,port))
133 12 Javier Huanca
    except socket.error:
134 12 Javier Huanca
        messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la ip {0}".format(address))
135 12 Javier Huanca
        clientSocket.close()
136 12 Javier Huanca
        
137 12 Javier Huanca
#Imagenes
138 12 Javier Huanca
imgLogo = tk.PhotoImage(file="logo_ant0t0.png")
139 12 Javier Huanca
imgFlechaIzq = tk.PhotoImage(file="flecha_izquierda.png")
140 12 Javier Huanca
imgFlechaSup = tk.PhotoImage(file="flecha_superior.png")
141 12 Javier Huanca
imgFlechaDer = tk.PhotoImage(file="flecha_derecha.png")
142 12 Javier Huanca
imgFlechaInf = tk.PhotoImage(file="flecha_inferior.png")
143 12 Javier Huanca
imgApagar = tk.PhotoImage(file="Boton_Apagar.png")
144 12 Javier Huanca
imgLanzar = tk.PhotoImage(file="imgLanzar.png")
145 12 Javier Huanca
146 12 Javier Huanca
etiqueta_logo = tk.Label(root, image=imgLogo, bg = "darkred").place(x=350,y=150)
147 12 Javier Huanca
#Boton Flecha Izquierda
148 12 Javier Huanca
Bt_FlechaIzq = Button(root, image=imgFlechaIzq, command=irIzquierda)
149 12 Javier Huanca
Bt_FlechaIzq.place(x=50,y=190)
150 12 Javier Huanca
#Boton Flecha Superior
151 12 Javier Huanca
Bt_FlechaSup = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaSup, command=irAdelante)
152 12 Javier Huanca
Bt_FlechaSup.place(x=150,y=100)
153 12 Javier Huanca
Bt_FlechaSup.bind('<ButtonRelease-1>', soltar)
154 12 Javier Huanca
#Boton Flecha Derecha
155 12 Javier Huanca
Bt_FlechaDer = Button(root, image=imgFlechaDer, command=irDerecha)
156 12 Javier Huanca
Bt_FlechaDer.place(x=250,y=190)
157 12 Javier Huanca
#Boton Flecha Inferior
158 12 Javier Huanca
Bt_FlechaInf = Button(root, repeatdelay=50, repeatinterval=50, image=imgFlechaInf, command=irAtras)
159 12 Javier Huanca
Bt_FlechaInf.place(x=150,y=280)
160 12 Javier Huanca
Bt_FlechaInf.bind('<ButtonRelease-1>', soltar)
161 12 Javier Huanca
162 12 Javier Huanca
#Boton Apagado
163 12 Javier Huanca
Bt_Apagar = Button(root, image=imgApagar, command=root.destroy).place(x=440,y=370)
164 12 Javier Huanca
165 12 Javier Huanca
#Boton Lanzar
166 12 Javier Huanca
Bt_Lanzar = Button(root, image=imgLanzar, bg = "darkred", command=inicioLanzar)
167 12 Javier Huanca
Bt_Lanzar.place(x=670, y=160)
168 12 Javier Huanca
169 12 Javier Huanca
#Boton Conectar
170 12 Javier Huanca
button_connect = tk.Button(root, text="Conectar", command= lambda: {conectar(ev3_ip)}, font=("Arial",12)).place(x=440,y=90)
171 12 Javier Huanca
172 12 Javier Huanca
if len(sys.argv) > 2:
173 12 Javier Huanca
    print("usage:client-laptop,py [IP-addr-of-robot]")
174 12 Javier Huanca
    sys.exit(1)
175 12 Javier Huanca
176 12 Javier Huanca
elif len(sys.argv) == 2:
177 12 Javier Huanca
    ipAddress = sys.argv[1]
178 12 Javier Huanca
    print("using specified IP address: {}".format(ipAddress))
179 12 Javier Huanca
180 12 Javier Huanca
else:
181 12 Javier Huanca
    print("using default IP address: {}".format(ev3_ip))
182 12 Javier Huanca
    
183 12 Javier Huanca
clientSocket = socket.socket()
184 12 Javier Huanca
port = 2222
185 12 Javier Huanca
186 12 Javier Huanca
root.mainloop()
187 12 Javier Huanca
</pre>