Project

General

Profile

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

Javier Huanca, 12/18/2023 12:15 AM

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