Licenta Autosaved21 [306032]

4.2. Structura programelor realizate

4.2.1. Program realizat pentru comanda roților

Program realizat pentru comanda rotilor este scris în Python și reprezintă o conexiune TCP de tip P2P (peer to peer) între componente.

import RPi.GPIO as GPIO
from time import sleep
import socket
import numpy
import cv2

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 12345))
s.listen(5)

in1 = 24
in2 = 23
en = 25

is1 = 27
is2 = 17
en2 = 22

capture = cv2.VideoCapture(0)
GPIO.setmode(GPIO.BCM)

GPIO.setup(in1,GPIO.OUT)
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(en,GPIO.OUT)

GPIO.setup(is1,GPIO.OUT)
GPIO.setup(is2,GPIO.OUT)
GPIO.setup(en2,GPIO.OUT)

GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
GPIO.output(is1,GPIO.LOW)
GPIO.output(is2,GPIO.LOW)
p=GPIO.PWM(en,1000)
p.start(25)
p2=GPIO.PWM(en2,1000)
p2.start(25)
def send_picture(conn):
ret, frame = capture.read()
encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),90]
result, imgencode = cv2.imencode('.jpg', frame, encode_param)
data = numpy.array(imgencode)
stringData = data.tostring()
conn.send( (str(len(stringData)).ljust(16)).encode())
conn.send( stringData );

def goFront():
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
GPIO.output(is1,GPIO.HIGH)
GPIO.output(is2,GPIO.LOW)
def goLeft():
GPIO.output(in1,GPIO.HIGH)
GPIO.output(in2,GPIO.LOW)
GPIO.output(is1,GPIO.LOW)
GPIO.output(is2,GPIO.HIGH)
def goRight():
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
GPIO.output(is1,GPIO.HIGH)
GPIO.output(is2,GPIO.LOW)
def goLeft():
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
GPIO.output(is1,GPIO.HIGH)
GPIO.output(is2,GPIO.LOW)
def goBack():
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.HIGH)
GPIO.output(is1,GPIO.LOW)
GPIO.output(is2,GPIO.HIGH)
def stopIt():
GPIO.output(in1,GPIO.LOW)
GPIO.output(in2,GPIO.LOW)
GPIO.output(is1,GPIO.LOW)
GPIO.output(is2,GPIO.LOW)
while True:
c, addr = s.accept()
msj = 's'
while msj != 'q':
msj = c.recv(1024).decode('ascii')
print(msj)
if msj == 'f':
goFront()
elif msj == 'd':
goRight()
elif msj == 's':
goLeft()
elif msj == 'b':
goLeft()
elif msj == 'o':
stopIt()
elif msj == 'poza':
print('saddas')
send_picture(c)

c.close()

4.2.2. Program realizat pentru utilizarea camerei

#!/usr/bin/python
import socket
import cv2
import numpy
import time
def zeroFirst(str):
if len(str) == 1:
return '0' + str
return str
def get_time(start_time):
dict = {
'1' : 'Ianuarie',
'2' : 'Februarie',
'3' : 'Martie',
'4' : 'Aprilie',
'5' : 'Mai',
'6' : 'Iunie',
'7' : 'Iulie',
'8' : 'August',
'9' : 'Septembrie',
'10' : 'Octombrie',
'11' : 'Noiembrie',
'12' : 'Decembrie',
}
date = str(start_time.tm_mday) + ' ' + dict[str(start_time.tm_mon)] + ' ' + str(start_time.tm_year) + ',' + zeroFirst(str(start_time.tm_hour)) + ':' + zeroFirst(str(start_time.tm_min)) + ':' + zeroFirst(str(start_time.tm_sec))
return date

def recvall(sock, count):
buf = b''
while count:
newbuf = sock.recv(count)
if not newbuf: return None
buf += newbuf
count -= len(newbuf)
return buf

start_time = time.localtime(time.time())
TCP_IP = socket.gethostname()
TCP_PORT = 12345
sock = socket.socket()
sock.connect(('192.168.1.118', TCP_PORT))
command = 't'
while command != 'q':
print "f,d,s,b,poza – fata, dreapta, stanga, back"
command = raw_input()
print command
sock.send(command)
if command == 'poza':
length = recvall(sock,16)
stringData = recvall(sock, int(length))
data = numpy.fromstring(stringData, dtype='uint8')
sock.close()

decimg = cv2.imdecode(data,1)
cv2.imwrite(get_time(start_time) + '.jpg', decimg)
s.close()

4.2.1. Program realizat pentru comanda brațului robotic

def close_claw():

if claw_closed_indicator is not True:

clawServo.write_position(170)

print “Claw was closed”

else:

print “Claw already closed”

def open_claw():

if claw_open_indicator is not True:

clawServo.write_position(10)

print “Claw was opened”

else:

print “Claw already opened”

5. Observații

Datorită dezvolatrii rapide a sistemelor actuale de informare și comunicare, roboții sunt proiectați pentru a fi utilizați pe scară largă în toate domeniile vieții cotidiene și ale industriei. Acestea sunt folosite pentru a reduce dependețele umane în îndeplinirea unei sarcini și pentru a reduce timpul de producție, menținând în același timp o calitate constantă a producției.

Obiectivul principal al acestui proiect este dezvoltarea și implementarea unui vehicul de suprabeghere care realizează automat sau manual patrularea unui perimetru. Astfel, resursele umane și financiare, timp, energie sunt optimizate neavând nevoie in primul rând de șofer. Au trecut de mult zilele în care realizarea automatizărilor într-un anumit domeniu erau minimale și foarte scumpe, bucurându-ne de o piață cu o ofertă mult mai lardgă si prețuri mult mai joase decât a fost vreodatâ.

Robotul de supraveghere poate surveni îmbunătățiri adiționale prin încorporarea unui sistem GPS pentru localizare constantă și setarea unui perimetru de matrulare mult mai relevant decât dotarea actuală.

Lucrarea este realizată ca un robot funcțional, el fiind o demonstrație practică a funcționării unei vehicul comandat, capabil să ruleze pe un traseu configurat sau în mod manual și să realizeze intrucțiunile pe care mașina le are implementate de ex utilizarea brațului robotic.

Arhitectura mașinii include un șasiu, patru motoare de curent continuu pentru tracțiune, un senzor de ultrasunete pentru detecția potențialelor obstacole si acționarea camerei.

Demonstrația practică este efectuată de către robot, acționând funcția de comandă a motoarelor, ghearei și camerei de fi

6. Bibliografie

Arduino Uno Rev3

https://www.microchip.com/wwwproducts/en/ATmega328P

https://www.allaboutcircuits.com/technical-articles/understanding-arduino-uno-hardware-design/

https://i2.wp.com/www.technobyte.org/wp-content/uploads/2016/08/Arduino-Uno-multiple-input-management-circuit-op-amp-comparator-min.jpg

http://www.ntu.edu.sg/home/ehchua/programming/arduino/arduino.html

https://learn.sparkfun.com/tutorials/what-is-an-arduino/whats-on-the-board â

https://electronics.stackexchange.com/questions/61537/what-is-the-cap-for-in-arduino-reset-circuit

https://arduino.stackexchange.com/questions/986/whats-the-2nd-icsp-header-for-in-arduino-uno-r3

https://startingelectronics.org/software/arduino/learn-to-program-course/01-program-structure-flow/

T. Mohammad Baloch and Timothy Thien Ching Kae, "Design and modelling a prototype of a robotic lawn mower," 2008 International Symposium on Information Technology, Kuala Lumpur, 2008, pp. 1-5.

Price Runner, „Top 22 best robotic lawn mowers of 2019.” : URL: https://www.pricerunner.com/test/robotic-lawn-mower

https://www.google.com/search?q=ingeniously+continental&source=lnms&tbm=isch&sa=X&ve d=0ahUKEwiswuvi3fPiAhVwSxUIHU3pBwwQ_AUIECgB&biw=1366&bih=657#imgrc=4JfD rVDiMuJAOM:

DFRobot – Pirate: 4WD Arduino : https://www.dfrobot.com/product-116.html

Fut-electronic Tech Co., Limited, Blue Ultrasonic Sensor, URL: https://fut688.en.made-in-china.com/

https://www.google.com/search?q=driver+de+motoare+pwm&source=lnms&tbm=isch&sa=X& ved=0ahUKEwj56OqH3_PiAhUPKuwKHW5mAuEQ_AUIECgB&biw=1366&bih=657#imgrc=i-urSDWQg4GXsM:

“Schottky Diodă”, RIVERGLENNAPTS, URL: https://riverglennapts.com/ro/diode/305-schottky-diode.html

Similar Posts