Commit bd7edb10 authored by hichbra's avatar hichbra

Lancement du test

parent e02f1246
......@@ -20,7 +20,7 @@ void loop(){
// ---------------------------------- Lecture et calcul du champ magnétique ----------------------------------------
// lecture de la valeur analogique (entre 0 et 1024) pour une tension entre 0 et 5V
int hallAnalogique = analogRead(PORT_HALL);
hallAnalogique = analogRead(PORT_HALL);
// transforme la valeur lue en Gauss
// les valeurs évoluant entre 102 et 922 sont transformées en valeur évoluant entre -640 et 640
......@@ -37,6 +37,7 @@ void loop(){
//Serial.print("Lecture de la tension en mV = "); Serial.println(fsrVoltage);
if (fsrVoltage == 0) {
Serial.println("Aucune pression");
newton = 0 ;
} else {
// La tension = Vcc * R / (R + FSR) où R = 10K et Vcc = 5V
// d'où FSR = ((Vcc - V) * R) / V
......@@ -64,6 +65,6 @@ void loop(){
Serial.print("=> Force Analogique = "); Serial.print(fsrAnalogique); Serial.print(" || Force en Newtons: "); Serial.println(newton);
// attendre 100 millisecondes
delay(100);
delay(1000);
}
/*
GaussPlot 27/12/2011 Arduining.com
Showing Gauss measured by the SS495B in the serial monitor.
(Miniature Radiometric Linear Hall Efect Sensor)
Sensor connected to Analog channel 0.
Translated and commented by Meurisse D. for the tutorial
http://wiki.mchobby.be/index.php?title=Senseur-Hall-SS495A
*/
#define XRANGE 50
#define PORT_HALL A0
#define PORT_FSR A2
int x,gss ;
int fsrAnalogique ; // La lecture analogique depuis le pont diviseur FSR+Resistance.
int fsrVoltage; // La lecture analogique convertie en tension
unsigned long fsrResistance; // La tension convertie en resistance
unsigned long fsrConductance;
long fsrForce; // La resistance convertie en force (Newton)
void setup(){
Serial.begin(9600);
}
void loop(){
// lecture de la valeur analogique du Gaussmètre (entre 0 et 1024) pour une tension entre 0 et 5V
int aValue = analogRead(PORT_HALL);
//Serial.print(aValue);
// lecture de la valeur analogique du capteur de force (entre 0 et 1024) pour une tension entre 0 et 5V
int fsrAnalogique = analogRead(PORT_FSR);
// transforme la valeur de 0 à 1024 vers 0 à 50
x = map(aValue, 0, 1024, 0, XRANGE);
// transforme la valeur lue en Gauss
gss = map(aValue, 102, 922, -640, 640);
// ------ Affichage d'un bargraph sur le moniteur série ----
/*Serial.print("|");
for (int i=0;i<x;i++){
if(i==XRANGE/2-1)Serial.print("|");
else Serial.print("-");
}
Serial.print("O");
for (int i=x+1;i<XRANGE;i++){
if(i==XRANGE/2-1)Serial.print("|");
else Serial.print("-");
}
Serial.print("|");*/
// ----------------------------------------------------------
// affiche la valeur en Gauss
Serial.println(gss);
//Serial.println(" Gauss");
// lecture de la valeur analogique (entre 0 et 1023) pour une tension entre 0 et 5V (= 5000mV)
/*fsrVoltage = map(fsrAnalogique, 0, 1023, 0, 5000);
Serial.print("Lecture de la tension en mV = ");
Serial.println(fsrVoltage);
if (fsrVoltage == 0) {
Serial.println("Aucune pression");
} else {
// La tension = Vcc * R / (R + FSR) où R = 10K et Vcc = 5V
// d'où FSR = ((Vcc - V) * R) / V
fsrResistance = 5000 - fsrVoltage; // fsrVoltage est en millivolts donc 5V = 5000mV
fsrResistance *= 10000; // 10K resistance
fsrResistance /= fsrVoltage;
Serial.print("FSR resistance en ohms = "); Serial.println(fsrResistance);
fsrConductance = 1000000; // on mesure en micro-ohm
fsrConductance /= fsrResistance;
Serial.print("Conductance en micro-ohm : "); Serial.println(fsrConductance);
// Use the two FSR guide graphs to approximate the force
if (fsrConductance <= 1000) {
fsrForce = fsrConductance / 80;
Serial.print("Force en Newtons: "); Serial.println(fsrForce);
} else {
fsrForce = fsrConductance - 1000;
fsrForce /= 30;
Serial.print("Force en Newtons: "); Serial.println(fsrForce);
}
}*/
// attendre 1/10 de seconde
delay(200);
}
##############
## Script listens to serial port and writes contents into a file
##############
## requires pySerial to be installed
import serial
import paho.mqtt.client as mqtt
import time
import sys
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
global Connected
Connected = True
else:
print("Connection failed")
Connected = False
client = mqtt.Client(transport="websockets")
client.on_connect = on_connect
client.connect("pil-09.univlehavre.lan", 9001, 60)
client.loop_start()
while Connected != True:
time.sleep(0.1)
serial_port = '/dev/ttyACM0';
baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
ser = serial.Serial(serial_port, baud_rate)
try:
while True:
line = ser.readline();
line = line.decode("utf-8") #ser.readline returns a binary, convert to string
if "-" in line:
prefix = '-'
else:
prefix = ''
value = ''.join(c for c in line if c.isdigit())
if value.isdigit():
value = prefix+value;
print(int(value));
client.publish("capteurs/gauss1", int(value));
else:
print("Error bad value", value);
except KeyboardInterrupt:
client.disconnect()
client.loop_stop()
# UTILISATION
# sans argument = full time
# avec argument =>
# arg1 = date de debut
# arg2 = date de fin
import matplotlib.pyplot as plt
import csv
import sys
from datetime import datetime
x = []
y = []
moy = []
CONST_MOYENNE = 50
fullTime = False
if len(sys.argv) == 1:
fullTime = True
elif len(sys.argv) == 3 :
try:
date1 = datetime.strptime(sys.argv[1], '%Y-%m-%d %H:%M:%S')
date2 = datetime.strptime(sys.argv[2], '%Y-%m-%d %H:%M:%S')
except:
print("Erreur, arguments incorrect. Les dates doivent etre sous la forme \"AAAA-MM-JJ HH-mm-SS\"")
exit(1)
else :
print("Erreur, arguments incorrect. Les dates doivent etre sous la forme \"AAAA-MM-JJ HH-mm-SS\"")
exit(1)
i = 0
with open('mytable.csv','r') as csvfile:
next(csvfile, None)
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
if not fullTime:
date = datetime.strptime(row[1],'%Y-%m-%d %H:%M:%S')
if (date1-date).total_seconds() > 0:
continue
if fullTime or (date2-date).total_seconds() > 0 :
x.append(i)
y.append(int(row[2]))
if i >= CONST_MOYENNE :
moyenne = 0
for j in range(i-CONST_MOYENNE, i, 1) :
moyenne = moyenne+y[j]
moy.append(moyenne / CONST_MOYENNE)
else:
moy.append(int(row[2]))
i = i+1
plt.plot(x,y, label='Donnes brut')
plt.plot(x,moy, label='Moyenne mobile (50)')
plt.xlabel('Gauss')
plt.ylabel('temps (200ms)')
plt.title('Astreos')
plt.legend()
plt.show()
\ No newline at end of file
# Astreos
## Lancement d'un test simple
- Mettre en fonctionnement [Firediag](https://git.litislab.fr/hicham.brahimi/firediag) (Lancer le script [Verification.py](https://git.litislab.fr/hicham.brahimi/firediag/blob/master/Verification.py) en desactivant GenerationDonneesMQTT)
- Installer et lancer les scripts respectivement dans l'Arduino et le Raspberry Pi
```sh
# Pour le Raspberry Pi
$ source .profile
$ workon cv
$ python RecuperationValeur_MQTT.py &
$ disown # Si lancé par SSH
```
- Si la BDD est trop grosse pour être lu sur http://website.cs-dc.org/apps/ci1/firediag/index.php/controller/ :
- Exporter la table valeur
```sh
mysql -u firediag -p ********** -e "select * from valeur;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > mytable.csv # Ajouter une clause WHERE si plusieurs capteurs
```
- Executer [VisualisationValeur.py](https://git.litislab.fr/hicham.brahimi/astreos_arduino/blob/master/VisualisationValeur.py)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment