Project

General

Profile

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

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