Project

General

Profile

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

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