Bonjour,
Je possede un arduino UNO, 1 capteur de distance (TOF IR Distance Sensor (0.2~12m) for Arduino Wiki - DFRobot), 1 GPS NEO6MV2 ainsi qu'un écran LCD.
J'ai comme projet de développer un système permettant d'avertir d'une collision entre voiture.
!! ATTENTION : Ce projet est uniquement fait pour m'amuser et développer mes compétences en Arduino et ne remplacera en aucun cas ma viligance au volant de ma voiture !!
J'ai donc rédigé un code temporaire (pas fini du tout). L'objectif est de connaitre la vitesse de mon véhicule grace au GPS. Ensuite grace au capteur de distance, il est possible de déterminer la vitesse du véhicule devant => cela permet de prévoir une différence de vitesse et grace à la mesure de distance : connaitre dans combien arrive la collision.
Cependant, un problème se pose quand j'upload mon code. La led "L" est allumé et ne veut pas partir. Quand j'ai réussi, une fois à la faire partir (j'ai fait bouger l'arduino ), mon code s'est bien exécuté, mais je ne trouve aucun moyen pour l'éteindre (meme en utilsant la méthode décrite sur ce forum The L LED Keeps Itself On - Arduino Stack Exchange, ou d'autres propositions).
J'ai comme supposition que le manque de mémoire dynamique signalé par l'IDE est responsable de ce problème (sur le code global :92%). Le programme mesurant la distance est responsable de 74% de son utilisation. Je vous mets son code juste en dessous.
Mais du coup : connaissez-vous un moyen de réduire cette utilisation ?
Code capteur de distance :
#include"DFRobot_LIDAR07.h"
#define USE_IIC
DFRobot_LIDAR07_IIC LIDAR07;
void setup() {
Serial.begin(115200);
while (!LIDAR07.begin()) {
Serial.println("The sensor returned data validation error");
delay(1000);
}
LIDAR07.startFilter();
while (!LIDAR07.setMeasureMode(LIDAR07.eLidar07Continuous));
while (!LIDAR07.setConMeasureFreq(100));
LIDAR07.startMeasure();
}
void loop() {
if (LIDAR07.getValue()) {
Serial.print("Distance:"); Serial.print(LIDAR07.getDistanceMM()); Serial.println(" mm");
//lcd.print(LIDAR07.getDistanceMM());
//delay(100);
//lcd.clear();
//delay(100);
}
}
Code global :
//LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
//FIN LCD
//Vitesse et distance
unsigned long myTime;
float distance1 = 20; //distance du véhicule devant nous à une première instance (en m)
float distance2 = 15; //distance du véhicule devant nous à une deuxième instance (en m)
float vitesse1 = 50; //vitesse de notre véhicule (en km/h)
float temps1 = 0; //première instance (en millisecondes)
float temps2 = 1000; //deuxième instance (en ms)
float diffvitesse; //différence de vitesse entre les 2 véhicules (en m/s)
float vitesse2; //vitesse du véhicule devant (en m)
float diffdistance; //différence de distance entre les 2 véhicules (en m)
float tempscollision; //temps avant une collision avec le véhicule devant (en s)
float test; //valeur utilisée pour les tests
//FIN Vitesse et distance
//Distance
#include"DFRobot_LIDAR07.h"
#define USE_IIC
DFRobot_LIDAR07_IIC LIDAR07;
//Fin Distance
//Vitesse
#define GPSTX A3 //pin number for GPS TX output - data from Arduino into GPS
#define GPSRX A2 //pin number for GPS RX input - to Arduino from GPS
#include <Arduino.h>
#include <SoftwareSerial.h>
SoftwareSerial GPS (GPSRX, GPSTX);
#include <TinyGPS++.h>
TinyGPSPlus gps;
char data;
double latitude;
double longitude;
double alt; //altitude
double vitesse;
unsigned long nbre_sat;
//Fin Vitesse
void setup() {
Serial.begin(115200);
Serial.println(F("Demarrage"));
//LCD
lcd.begin(16, 2);
//FIN LCD
//Distance
#ifdef USE_IIC
while (!LIDAR07.begin()) {
Serial.println(F("The sensor returned data validation error"));
delay(1000);
}
#endif
LIDAR07.startFilter();
while (!LIDAR07.setMeasureMode(LIDAR07.eLidar07Continuous));
while (!LIDAR07.setConMeasureFreq(100));
LIDAR07.startMeasure();
//Fin distance
//Vitesse
GPS.begin(9600);//start softserial for GPS at defined baud rate
//Fin Vitesse
}
void loop() {
while (GPS.available() > 0) {
//Serial.write(GPS.read());
data = GPS.read();
gps.encode(data);
if (gps.location.isUpdated())
{
latitude = gps.location.lat();
longitude = gps.location.lng();
alt = gps.altitude.meters();
vitesse = gps.speed.kmph();
nbre_sat = gps.satellites.value();
Serial.println(" ");
Serial.println("-------- DONNEES GPS DECODEES ------------");
Serial.print(F("Vitesse (km/h)=")); Serial.println(vitesse);
Serial.print(F("Nbre de satellites=")); Serial.println(nbre_sat);
}
}
//if(LIDAR07.getValue()){
//Serial.print("Distance:");Serial.print(LIDAR07.getDistanceMM());Serial.println(" mm");
//lcd.print(LIDAR07.getDistanceMM());
//delay(100);
//lcd.clear();
//delay(100);
}
//diffvitesse = (distance1 - distance2) / (temps2 - temps1);
//vitesse2 = vitesse1 - diffvitesse;
//diffvitesse = vitesse1 - vitesse2;
//tempscollision = distance2 / diffvitesse;