Proiect Java Si Python
Proiect Java Si Python
Mecanică și Mecatronică
Student:
Stan Andrada-Mihaela
Grupa 531B
Coordonator:
prof. Victor Constantin
1.Introducere
Etapa 1.1. – Java
- Un fișier “date_temperatura.csv”;
- Un fisier “date_umiditate.csv”;
- Un fisier “viteza.csv”;
- Un fisier “prezenta.csv”.
Fiecare fișier va conține, pe lângă datele din titlu și coloana cu data la care au fost făcute citirile.
Afișați datele din fișierele obținute în etapa 1.1 în grafice în ferestre diferite, în funcție de
tipul datelor (un grafic cu toate citirile de temperatură în timp, unul pentru umiditate, etc.).
În paralel, în fire de execuție separate, realizați conectarea la un microcontroller prin interfața
RS232 și înregistrați datele primite într-un fișier csv nou (coloane date și timp).
2.Soluția proprie:
Etapa 1.1. – Java
import java.io.*; // se apelează biblioteca java.io.*
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.List;
public class proiect {
public static void main(String[] args) throws IOException {
System.out.println("Hello world!");//se afisează un mesaj
citire citire1 = new citire(); //instanțierea unui obiect
citire1.citire();
System.out.println("\n");//adăugare linie nouă
parcurgere temp = new parcurgere();//instanțierea unui obiect
parcurgere umid = new parcurgere();//instanțierea unui obiect
parcurgere viteza = new parcurgere();//instanțierea unui obiect
parcurgere prezenta = new parcurgere();//instanțierea unui obiect
temp.temperatura();//apelare metoda
umid.umiditate();//apelare metoda
viteza.viteza();//apelare metoda
prezenta.prezenta();//apelare metoda
}
}
class citire {
public void citire() {
try { //se încearca codul
BufferedReader citit = new BufferedReader(new FileReader("C:/Proiect/Date _orig.csv")); //se citesc datele din
fisierul csv
String rand;
while ( (rand = citit.readLine()) != null) { // se parcurg randurile pana se gaseste null
System.out.println(rand); //se afiseaza randul
}
}
catch (Exception e) {
System.err.println(e.getMessage()); // se afiseaza erorile posibile
}
}
}
class parcurgere {
int k = 0; //declarare contor
int z = 0; //declarare contor
File in = new File("C:/Proiect/Date _orig.csv");
List<String> lines = Files.readAllLines(in.toPath());
FileWriter date_temp = new FileWriter("C:/Proiect/Andrada/date_temperatura.csv"); //se realizeaza un fisier csv
pentru temperatura
FileWriter date_umid = new FileWriter("C:/Proiect/Andrada/date_umiditate.csv");//se realizeaza un fisier csv
pentru umiditate
FileWriter date_viteza = new FileWriter("C:/Proiect/Andrada/date_viteza.csv");//se realizeaza un fisier csv pentru
viteza
FileWriter date_prezenta = new FileWriter("C:/Proiect/Andrada/date_prezenta.csv");//se realizeaza un fisier csv
pentru prezenta
parcurgere() throws IOException {
}
public void temperatura() {
try {
char bom = '\uFEFF';
date_temp.write(bom);
for (String line:lines) { // se parcurge cu ajutorul structurii for fiecare rand si se adauga datele in fisierul
temperatura
String[] array = line.split(",");
if (k == 0) {
date_temp.write(array[0] + "," + array[1] + "," + array[2] + "," + array[array.length-1] + "\n");
k = k + 1;
}
else {
boolean y = false;
if (Double.parseDouble(array[0]) < -5) { //se verifica datele din fisierul temperatura daca se incadreaza in
intervalul (-5,5)
array[0] = String.valueOf(-5); //modificarea valorilor temperaturii
y = true;
}
if ( Double.parseDouble(array[1]) < -5) {
array[1] = String.valueOf(-5);
y = true;
}
if (Double.parseDouble(array[2]) < -5) {
array[2] = String.valueOf(-5);
y = true;
}
if (Double.parseDouble(array[0]) > 5) {
array[0] = String.valueOf(5);
y = true;
}
if ( Double.parseDouble(array[1]) > 5) {
array[1] = String.valueOf(5);
y = true;
}
if (Double.parseDouble(array[2]) > 5) {
array[2] = String.valueOf(5);
y = true;
}
if (y) {
z++;
}
date_temp.write(array[0] + ", " + array[1] + ", " + array[2] + ", " + array[array.length-3] + "\n");
k++;
}
} date_temp.close();
System.out.println("Numarul de erori in parsarea temperaturii: " + z); //afisarea erorilor in urma parsarii temperaturii
} catch (Exception e) {
System.err.println(e); // se afiseaza erorile posibile
}}
public void umiditate () {
try {
for (String line:lines) { { // se parcurge cu ajutorul structurii for fiecare rand si se adauga datele in fisierul umiditate
String[] array = line.split(",");
if (k == 0){
date_umid.write(array[3] + ", " + array[4] + ", " + array[5] + ", " + array[array.length-1] + "\n");
k = k + 1;
}
else {
boolean y = false;
if (Double.parseDouble(array[3]) < 40) {//se verifica datele din fisierul umiditate daca valoarea lor este mai mica de
40
array[3] = String.valueOf(40); // modificarea valorii umiditatii
y = true;
}
if ( Double.parseDouble(array[4]) < 40) {
array[4] = String.valueOf(40);
y = true;
}
if (Double.parseDouble(array[5]) < 40) {
array[5] = String.valueOf(40);
y = true;
}
if (y) {
z++;
}
date_umid.write(array[3] + ", " + array[4] + ", " + array[5] + ", " + array[array.length-3] + "\n");
k++;
}
} date_umid.close();
System.out.println("Numarul de erori in parsarea umiditatii: " + z); //afisarea erorilor in urma parsarii umiditatii
} catch (Exception e) {
System.err.println(e); // se afiseaza erorile posibile
}
}
public void viteza () {
try {
for (String line:lines) {// se parcurge cu ajutorul structurii for fiecare rand si se adauga datele in fisierul viteza
String[] array = line.split(",");
if (k == 0){
date_viteza.write(array[6] + ", " + array[array.length-1] + "\n");
k = k + 1;
}
else {
array[6] = String.valueOf(Double.parseDouble(array[6]) + 1);
date_viteza.write(array[6] + ", " + array[array.length-3] + "\n");
k++;
}
} date_viteza.close();
} catch (Exception e) {
System.err.println(e); // se afiseaza erorile posibile
}}
public void prezenta () {
try {
for (String line:lines) { // se parcurge cu ajutorul structurii for fiecare rand si se adauga datele in fisierul prezenta
String[] array = line.split(",");
if (k == 0){
date_prezenta.write(array[7] + ", " + array[8] + ", " + array[array.length-1] + "\n");
k = k + 1;}
else {
date_prezenta.write(array[7] + ", " + array[8] + ", " + array[array.length-3] + "\n");
k++;
}
} date_prezenta.close();
} catch (Exception e) {
System.err.println(e); // se afiseaza erorile posibile
}
}
}
Etapa 1.2. – Python
import csv
import matplotlib.pyplot as plt
import time
import threading
from threading import Thread
from queue import Queue
import serial
x=[]
y=[]
z=[]
w=[]
def connect_uc(self): #Connect to serial port of Arduino, returns 1 for ok connect #metoda de conectare cu
Arduino
self.tty = "COM7" # serial
self.baud = 115200 # baudrate
try:
self.port_uc=serial.Serial(self.tty, self.baud, timeout=3)
time.sleep(5) #setare timp de asteptare de 5 secunde
print ("Connected...") #mesaj conectare
return 1
except Exception as e:
print ("Error connecting to uC:\t",e) #mesaj in caz de eroare a conectarii
return 0
try:
y.append(float(row[0])) #se adauga datele de pe coloane
z.append(float(row[1]))
w.append(float(row[2]))
x.append(row[3])
except Exception as e:
#print ("Warning, error found: ", row) #in caz de eroare afisam un mesaj
pass
a=[]
b=[]
c=[]
d=[]
e=[]
f=[]
g=[]
if _name_ == '_main_':
grafice_stat=grafice_statice()
grafice_stat.start()
threader=thread_checker()
threader.start()
3.Testarea solutiei:
Fișierele csv realizate cu ajutorul programului în JAVA:
Grafice realizate în Python:
4.Concluzii
Valorile unor senzori au fost extrase cu ajutorul unui program realizat în Java fiind transferate în fișiere de tip csv, în
program am folosit parsarea pentru extragerea datelor. Urmând apoi cu ajutorul unui program în Python să realizam
grafice pentru valorile extrase din fisierele de tip csv.