Voilà je vous montre un p'tit projet que je viens de terminer.
ceci es la version 3 du projet ... lol
Version 1 : arduino uno + afficheur 2*20 + bouton pour reglage
Version 2 : arduino uno + lecteur carte SD + logiciel pc pour reglage de la carte SD
Version 3 : arduino standalone + module Bluetooth + logiciel pc pour reglage via bluetooth
But du projet : piloter 4 sortie pwm pour Neon-led de l'aquarium avec un reglage toute les 30min
pour réduire les coûts je suis passer sur un standalone (photo 4)
je passe par des ips521 pour piloter les neon.
horloge standart DS1307
Bluetooth Linvor
pour le reglage logiciel créer en java
un mode test pour tester chaque rampe et faire des mixage de lumiere (les neon sont de couleur differente) (photo 1)
reglage des niveaux de lumiere de chaque sortie (photo 2)
reglage de l'horloge (photo 3)
caco74
August 5, 2012, 11:32am
2
c est un beau projet rudement mené mais pourrais tu nous faire partager ton code ?
hmm je sais pas.. un peut honte.. :p.. c'est pas du code de premiere.. ^^
bon .. je le met quand même.. lol.. honte a moi ..
/******************************* Programme Arduino ******************************/
/***************************** par Teal'couné - 2011 ****************************/
/********************************** Version 3.0 *********************************/
/**************************** Que fait ce programme ? ***************************/
/* Gestion d'allumage 4 ranger de luminaire d'aquarium
reglage d'instensité de lumiere toute les 30min avec variation entre
chaque changement */
/********************** Inclusion des librairies utilisées **********************/
#include <Wire.h>
#include <DS1307new.h>
#include <EEPROM.h>
/************************** Déclaration des constantes **************************/
const int LED1=6;
const int LED2=9;
const int LED3=10;
const int LED4=11;
const int debRampe[4] = {0, 48, 96, 144};
/************************** Déclaration des variables ***************************/
/* tableau de lumiere */
int rampe1[24][2];
int rampe2[24][2];
int rampe3[24][2];
int rampe4[24][2];
/* variable entrer mode test */
boolean test = false;
int testR1 = 0;
int testR2 = 0;
int testR3 = 0;
int testR4 = 0;
/* variable de reception */
/*
data de la fonction test
data[0] = 0
data[1] = 0 off - 1 on
data[2-4] = rampe 1 exemple : 050 = 50%
data[5-7] = rampe 2
data[8-10] = rampe 3
data[11-13] = rampe 4
*/
/*
data pour les rampe
data[0] = 1
data[1] = 0 get - 1 set
data[2] = 0 : rampe1 - 1 : rampe 2 - 2 : rampe 3 - 3 : rampe 4
data[3-5] = valeur pour 00h00
data[6-8] = valeur pour 00h30
data[9-11] = valeur pour 01h00
data[12-14] = valeur pour 01h30
etc..
*/
/*
data pour set heure
data[0] = 2
data[1] = 0 get - 1 set
data[2-3] = heure exemple 17
data[4-5] = minute exemple 45
*/
int iData = 0;
boolean finTram = false;
int data[147];
/* Autre variable */
int oldMinute = 0;
/**************************** Programme ****************************/
void setup(void) {
Serial.begin(115200);
pinMode(LED1, OUTPUT); //met la broche en entree
pinMode(LED2, OUTPUT); //met la broche en entree
pinMode(LED3, OUTPUT); //met la broche en entree
pinMode(LED4, OUTPUT); //met la broche en entree
initRampe();
RTC.getTime();
oldMinute = RTC.minute;
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
}
void loop(void) {
RTC.getTime();
if(test == true) {
int value = 0;
value = ((255*testR1)/100);
analogWrite(LED1, value);
value = ((255*testR2)/100);
analogWrite(LED2, value);
value = ((255*testR3)/100);
analogWrite(LED3, value);
value = ((255*testR4)/100);
analogWrite(LED4, value);
} else {
if(RTC.minute != oldMinute) {
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
oldMinute = RTC.minute;
}
}
}
void ligneRampe(int nbRampe) {
int h = RTC.hour;
int m = RTC.minute;
int val1 = 0;
int val2 = 0;
int baseMinute;
int inter = 0;
int sortie = 0;
float valeur = 0;
int value = 0;
boolean sup = false;
if(m < 30) {
if(nbRampe == 1) {
val1 = rampe1[h][0];
val2 = rampe1[h][1];
}
if(nbRampe == 2) {
val1 = rampe2[h][0];
val2 = rampe2[h][1];
}
if(nbRampe == 3) {
val1 = rampe3[h][0];
val2 = rampe3[h][1];
}
if(nbRampe == 4) {
val1 = rampe4[h][0];
val2 = rampe4[h][1];
}
baseMinute = 0;
} else if(m >=30) {
if(nbRampe == 1) {
val1 = rampe1[h][1];
if(h==23) val2 = rampe1[0][0];
else val2 = rampe1[h+1][0];
}
if(nbRampe == 2) {
val1 = rampe2[h][1];
if(h==23) val2 = rampe2[0][0];
else val2 = rampe2[h+1][0];
}
if(nbRampe == 3) {
val1 = rampe3[h][1];
if(h==23) val2 = rampe3[0][0];
else val2 = rampe3[h+1][0];
}
if(nbRampe == 4) {
val1 = rampe4[h][1];
if(h==23) val2 = rampe4[0][0];
else val2 = rampe4[h+1][0];
}
baseMinute = 1;
}
if(val1 != val2) {
if(val1 < val2) inter = val2 - val1;
else if(val1 > val2) {
inter = val1 - val2;
sup = true;
}
valeur = float(inter)/float(30);
int time = (baseMinute==0)?0:30;
sortie = valeur * (m-time);
int u = 0;
if(nbRampe == 1) u = rampe1[h][baseMinute];
if(nbRampe == 2) u = rampe2[h][baseMinute];
if(nbRampe == 3) u = rampe3[h][baseMinute];
if(nbRampe == 4) u = rampe4[h][baseMinute];
if(sup) value = ((255*(u-sortie))/100);
else value = ((255*(u+sortie))/100);
if(nbRampe == 1) analogWrite(LED1, value);
if(nbRampe == 2) analogWrite(LED2, value);
if(nbRampe == 3) analogWrite(LED3, value);
if(nbRampe == 4) analogWrite(LED4, value);
} else {
value = (255*val1)/100;
if(nbRampe == 1) analogWrite(LED1, value);
if(nbRampe == 2) analogWrite(LED2, value);
if(nbRampe == 3) analogWrite(LED3, value);
if(nbRampe == 4) analogWrite(LED4, value);
}
}
void initRampe() {
int u = 0;
int i = 0;
int y = 0;
for(int b = 0; b <= 3; b++) {
y = debRampe[b] + 48;
for(int x = debRampe[b]; x <= y; x++) {
if(b == 0) rampe1[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 1) rampe2[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 2) rampe3[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 3) rampe4[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(u == 1) {
u = 0;
i++;
}
else u = 1;
}
u = 0;
i = 0;
}
}
void serialEvent() {
while(Serial.available()) {
char serialRead = Serial.read();
if(serialRead != '|') {
data[iData] = (int)serialRead-48;
iData++;
} else {
finTram = true;
}
}
if(finTram) {
switch (data[0]) {
case 0:
teste();
break;
case 1:
if(data[1] == 1) setRampe();
if(data[1] == 0) getRampe();
break;
case 2:
if(data[1] == 1) setHeure();
if(data[1] == 0) getHeure();
break;
}
iData=0;
finTram = false;
}
}
void teste() {
if(data[1] == 1) {
test = true;
if(data[2] == 1) testR1 = 100;
else testR1 = data[3]*10 + data[4];
if(data[5] == 1) testR2 = 100;
else testR2 = data[6]*10 + data[7];
if(data[8] == 1) testR3 = 100;
else testR3 = data[9]*10 + data[10];
if(data[11] == 1) testR4 = 100;
else testR4 = data[12]*10 + data[13];
} else if(data[1] == 0) {
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
test = false;
}
}
void setRampe() {
int y;
int h = 0;
int m = 0;
y = debRampe[data[2]];
for(int i = 3; i <= 146; i++) {
int val;
if(data[i] == 1) val = 100;
else val = data[i+1]*10 + data[i+2];
i += 2;
EEPROM.write(y, val);
y++;
if(data[2] == 0) {
rampe1[h][m] = val;
}
if(data[2] == 1) rampe2[h][m] = val;
if(data[2] == 2) rampe3[h][m] = val;
if(data[2] == 3) rampe4[h][m] = val;
if(m == 1) {
m = 0;
h++;
} else m = 1;
}
ligneRampe(data[2]+1);
}
void getRampe() {
int val;
Serial.print("1");
Serial.print(data[2]);
for(int i = 0; i <= 23; i++) {
if(data[2] == 1) val = rampe1[i][0];
if(data[2] == 2) val = rampe2[i][0];
if(data[2] == 3) val = rampe3[i][0];
if(data[2] == 4) val = rampe4[i][0];
if(val < 100) Serial.print("0");
if(val < 10) Serial.print("0");
Serial.print(val);
if(data[2] == 1) val = rampe1[i][1];
if(data[2] == 2) val = rampe2[i][1];
if(data[2] == 3) val = rampe3[i][1];
if(data[2] == 4) val = rampe4[i][1];
if(val < 100) Serial.print("0");
if(val < 10) Serial.print("0");
Serial.print(val);
}
Serial.print("|");
}
void setHeure() {
int h = (data[2]*10 + data[3]);
int m = (data[4]*10 + data[5]);
RTC.stopClock();
RTC.fillByHMS(h,m,0);
RTC.setTime();
RTC.startClock();
RTC.getTime();
}
void getHeure() {
int minutes = RTC.minute;
int heures = RTC.hour;
String mess = "0";
if(heures < 10) mess += "0";
mess += (String) heures;
if(minutes < 10) mess += "0";
mess += (String) minutes;
mess += "|";
Serial.print(mess);
}
caco74
August 6, 2012, 5:27pm
5
Y a pas de honte à avoir et puis des fois d'autres te donnerons des astuces pour modifier intelligemment ton code. Merci du partage.
Youpi, la version Android du logiciel terminer.. :p.. il m'a embêter ce bluetooth Android ] ]