Project

General

Profile

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

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

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