Boutique Photo Argentique

JoboLike

Les différents montages et réalisations personnelles.

Re: JoboLike

Message par RĂ©ginald » Dimanche 17 Mai 2015 9:38

Classe, tu arrives au bout de ton projet
Avatar de l’utilisateur
RĂ©ginald
Super Gourou
Super Gourou
 
Message(s) : 8266
Inscription : Jeudi 31 Juillet 2014 9:34
Localisation : Haute-savoie

Re: JoboLike

Message par Jerome » Dimanche 17 Mai 2015 9:51

ça y est c'est bientôt l'aboutissement !
Avatar de l’utilisateur
Jerome
Super Gourou
Super Gourou
 
Message(s) : 1239
Inscription : Mardi 09 Avril 2013 11:56
Localisation : Annecy

Re: JoboLike

Message par bruno_l » Jeudi 28 Mai 2015 20:19

ça y est la machine est fonctionnelle,j'ai rajouté un mode manuel et une correction de T° de plus la dérive de T° est corrigée
ci joint le code Arduino
/*
JoboLike est :
constitué à partir d'un bac et contiendrait un système à bain régulé, pas de thermostat, mais des capteur de T°,
résistance chauffante et brassage du bain marie pour homogénéiser la T° (une pompe d'aquarium par exemple).
un moteur Ă  courant continu pour l'agitation avec inversions de la cuve (une Jobo serie 1500 avec son aimant bien sur)
il faut trouver celui avec les bons rpm.
un afficheur Lcd permettant de régler la T° de consigne, les Temps de dev (avec alarme à la fin)

le brochage suit le schéma du CompTraLED

*/
//-----------------------------------------------------------
// insertion des librairies
//-----------------------------------------------------------
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <Wire.h>
#include <Encoder.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 4
//#define TEMPERATURE_PRECISION 9
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress th1;
//------------------------------------------------------------
// initialize the library with the numbers of the interface pins
Encoder myEnc(3,2 );
int MemoEnc = 4;
// pour certain afficheur c'est 0x3F d'autres 0x27 ...
const int I2C_ADDR = 0x27; // cette variable est aussi utilisée plus bas pour afficher l'addresse du LCD
const int BACKLIGHT_PIN = 3;
const int En_pin = 2;
const int Rw_pin = 1;
const int Rs_pin = 0;
const int D4_pin = 4;
const int D5_pin = 5;
const int D6_pin = 6;
const int D7_pin = 7;
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSITIVE);
//-----------------------------------------------------------
// déclaration des variables de broches
//-----------------------------------------------------------
//const int bpNoir = 1; //bouton noir
// 2
// 3
// temperature sur D4
const int bpRouge = 5; //bouton rouge
const int Buzer = 6;
const int valide = 7; // bouton de l'encodeur
// 8
const int avant = 9; // constantes de broches du moteur
const int arriere = 10; // constantes de broches du moteur
// 11 chauffage
// 12 T° ok
const int GoTemps = 1; // top depart pour mode manuel
const int valDivis = 171;
const float corectTemp = 0.865;// correction de derive de T° (à evaluer pour chaque capteur)
const int anaCorTemp = 1; // entrée pour correction T°
//-----------------------------------------------------------
// déclaration des variables de programme
//-----------------------------------------------------------
float memoTemperature;
float Tbac = 0;
int initData = 255;
char MyChar;
int memoChar;
int vitMot = 90;
int intCol = 0;
int intRang = 0;
int minute = 0;
int seconde = 0;
float temperature = 0;
int MemoAdrr = 0;
unsigned long tempsRot = 0;
boolean tempOK = false;
boolean rotHorraire = true;
unsigned long tempsDev;
int valAna;
int valComo = 0;
int intDecal;
long tempsInit;
int intCoupCollier = 180;
//memorisationde la valeur de myEnc en position 4
// int intMyEnc4;
int intMyEncDev; //memorisation valeur de myEnc
float fltTempH; // T° arret chauffage
float fltTempB; // T° depart chauffage
//-----------------------------------------------------------
// initialisations
//-----------------------------------------------------------
void setup(){
// Start up the library DallasTemperature
pinMode(Buzer, OUTPUT);
analogWrite(Buzer, 10);
pinMode(11, OUTPUT);
analogWrite(11, 255);
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
pinMode(avant, OUTPUT);
pinMode(arriere, OUTPUT);
analogWrite(avant,0);
analogWrite(arriere, 0);
pinMode(GoTemps, INPUT);
digitalWrite(GoTemps, HIGH);
sensors.begin();
sensors.getAddress(th1, 0);
sensors.setResolution(th1, 12);
lcd.begin(16, 2);
lcd.print("Easy Process");
lcd.setCursor(0,1);
lcd.print("V2.0");
delay(5);
analogWrite(Buzer,0);
delay(1500);
lcd.clear();
lcd.print(" bl.ack.design ");
lcd.setCursor(0,1);
lcd.print(" @orange.fr ");
delay(3000);
lcd.clear();
// lcd.print("Td:38.4 T.i:");

pinMode(bpRouge, INPUT);
digitalWrite(bpRouge, HIGH);
//bp validation de l'encodeur rotatif
pinMode(valide, INPUT);
digitalWrite(valide, HIGH);
// pinMode(bpVert, INPUT);
// digitalWrite(bpVert, HIGH);
// pinMode(bpBleu, INPUT);
// digitalWrite(bpBleu, HIGH);
//myEnc.write(1512);//37.8°C
myEnc.write(800);//20°C
}
//-----------------------------------------------------------
// Boucle principale
//-----------------------------------------------------------
void loop() {
// etat du commutateur 6 positions
valAna = analogRead(0);
delay(300);
if (valAna > 0 && valAna < 200) {
valComo = 5;
}
if (valAna > 200 && valAna < 400) {
valComo = 4;
}
if (valAna > 400 && valAna < 600) {
valComo = 3;
}
if (valAna > 600 && valAna < 750) {
valComo = 2;
}
if (valAna > 750 && valAna < 900) {
valComo = 1;
}
if (valAna > 1000 ) {
valComo = 0;
}
switch (valComo) {

case 0: // traitement C41
if (initData != 0) {
initData = 0;
lcd.clear();
lcd.print("traitement C41");
digitalWrite(12, LOW);
//digitalWrite(13, LOW);
analogWrite(11, 255);
temperature = 38;
minute = 3;
seconde = 15;
fltTempH = 0.2;
fltTempB = 0.2;
analogWrite(avant, 0);
analogWrite(arriere, 0);
}
//lcd.clear();
C41();
break;
case 1:// traitement E6
if (initData != 1) {
initData = 1;
lcd.clear();
digitalWrite(12, LOW);
//digitalWrite(13, LOW);
analogWrite(11, 255);
lcd.print("traitement E6");
temperature = 38;
minute = 6;
seconde = 30;
fltTempH = 0.2;
fltTempB = 0.2;
analogWrite(avant, 0);
analogWrite(arriere, 0);
}
delay(2000);
lcd.clear();
E6();
break;
case 2: // choix traitement N&B manuel
if (initData != 2) {
initData = 2;
lcd.clear();
lcd.print("traitement Manu");
delay(500);
myEnc.write(80);
fltTempH = 0.5;
fltTempB = 0.5;
}
NoirEtBlanc();
break;
case 3: // choix traitement N&B semi auto
if (initData != 3) {
initData = 3;
myEnc.write(EEPROM.read(1023));
digitalWrite(12, LOW);
//digitalWrite(13, LOW);
analogWrite(11, 255);
analogWrite(avant, 0);
analogWrite(arriere, 0);
lcd.clear();
fltTempH = 0.5;
fltTempB = 0.5;
affMemo();
}
foncData();
break;

case 4:
if (initData != 4) {
initData = 4;
analogWrite(avant, 0);
analogWrite(arriere, 0);
//intMyEnc4 = myEnc.read();
myEnc.write(0);
tempsInit = (long (minute * 60) + seconde) * 1000;

//myEnc.write(0);
}
foncPrinc();
break;
case 5:
if (initData != 5) {
initData = 5;
tempOK = true;
analogWrite(avant, 0);
analogWrite(arriere, 0);
}
foncProg();
break;
}
}

// fonction principale traitement N&B (attente lancement dev)
// position 4 du commutateur

void foncPrinc() {
//float tempsInitBase;
regulTemp();
affTempBase();
//tempsInit = (long (minute * 60) + seconde) * 1000;
if (myEnc.read() != 0) {
memoTemperature = temperature;
temperature = temperature + (myEnc.read()/4);
myEnc.write(0);
tempsInit = exp((temperature - memoTemperature) *-0.081) * tempsInit;
}

if (digitalRead(bpRouge) == LOW ) {
//tempsInit = (long (minute * 60) + seconde) * 1000;
tempsDev = tempsInit + millis();
rotHorraire = false;
sequenceDev();
// stoper la rotation
analogWrite(avant, 0);
analogWrite(arriere, 0);
// attendre pour bain d'arret
lcd.clear();
lcd.print("bain d'arret");
analogWrite(Buzer, 150);
while (digitalRead(bpRouge) == HIGH ) {
regulTemp();
delay(200);
}

analogWrite(Buzer, 0);
tempsDev = 30000 + millis();
rotHorraire = false;
sequenceDev();
analogWrite(avant, 0);
analogWrite(arriere, 0);
lcd.clear();
lcd.print("Fixateur");
analogWrite(Buzer, 150);
while (digitalRead(bpRouge) == HIGH ) {
regulTemp();
delay(200);
}
analogWrite(Buzer, 0);
tempsDev = 300000 + millis();
rotHorraire = false;
sequenceDev();
analogWrite(avant, 0);
analogWrite(arriere, 0);
// attendre pour fixateur
// fin de traitement
analogWrite(Buzer, 0);
myEnc.write(0);
}
}
// lancement de la séquence de developpement
void sequenceDev(){
//intMyEncDev = myEnc.read();
//myEnc.write(vitMot);
analogWrite(avant, intCoupCollier);
delay(80);
analogWrite(avant, vitMot);
rotHorraire = true;
tempsRot = millis() + 1500;
while (millis() < tempsDev) {
if (millis() > tempsDev - 5000) {
analogWrite(Buzer, 25);
}
if (myEnc.read() > 255){
myEnc.write(255);
}
if (myEnc.read() < 25){
myEnc.write(25);
}

foncRot();
regulTemp();
affLCD();
}
//myEnc.write(intMyEncDev);

}
//
// controle et regulation de la Temperature
void regulTemp() {
float correctionTemp = float((analogRead(1)/51)-10)/10;
// acquisition T°
sensors.requestTemperatures(); // Send the command to get temperatures
//Tbac = sensors.getTempCByIndex(0);// - 0.5;
Tbac = ((((sensors.getTempCByIndex(0))-20) / corectTemp)+20) + correctionTemp;
//float Tbac = sensors.getTempC(0);// - 0.5;
// if (Tbac != MemoTbac) {
// MemoTbac = Tbac;
// }

// recherche de la T° de consigne
if ((Tbac + fltTempB) < temperature){
// enclenchement chauffage
//digitalWrite(13, HIGH);
analogWrite(11, 0);
if ((Tbac + (fltTempB / 2)) > temperature){
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
}
else {
//if ((Tbac - fltTempH) > temperature){
if ((Tbac - fltTempH) > temperature){
digitalWrite(12, LOW);
lcd.setCursor(0,1);
}
else {
// arret chauffage
//digitalWrite(13, LOW);
analogWrite(11, 255);
digitalWrite(12, HIGH);
tempOK = true;
}
// stop Chauffage
}
// /// fin régulation T°
//affLCD();
if (float(Tbac - (fltTempH * 1.5)) > float(temperature)){
//digitalWrite(13, LOW);
analogWrite(11, 255);
}
}

// enregistrement des données de fonctionnement
void foncData() {
if (digitalRead(valide) == LOW) {
EEPROM.write(1023, MemoEnc);
lcd.clear();
lcd.print("choix process");
lcd.setCursor(0,1);
lcd.print("par defaut");
delay(1000);
lcd.clear();
affMemo();
}
if (MemoEnc != myEnc.read()){
MemoEnc = myEnc.read();
intDecal = (MemoEnc / 4) * 19;
lcd.clear();
affMemo();

}

}
// affichage de la mémoire
void affMemo(){
if (myEnc.read() > 200){
myEnc.write(0);
}
if (myEnc.read() < 0){
myEnc.write(200);
}
for (int i = intDecal; i < intDecal + 16; i++){
MyChar = EEPROM.read(i);
lcd.print(MyChar);
}
lcd.setCursor(0,1);
lcd.print(EEPROM.read(intDecal + 16));
minute = EEPROM.read(intDecal + 16);
lcd.print(".");
lcd.print(EEPROM.read(intDecal + 17));
seconde = EEPROM.read(intDecal + 17);
lcd.print("mn a ");
lcd.print(EEPROM.read(intDecal + 18));
temperature = EEPROM.read(intDecal + 18);
MyChar = 223;
lcd.print(MyChar);
lcd.print("C.");
}
// traitement C41
void C41(){
boolean boolLavage = true;
valAna = analogRead(0);
while (valAna > 750 && valAna < 900){
regulTemp();
valAna = analogRead(0);
if (digitalRead(bpRouge) == LOW ) {
tempsDev = long (long (long (minute * 60) + seconde) * 1000) + long (millis());
// revelateur chromogene
sequenceDev();
// lavage
//lcd.clear();
while (digitalRead(bpRouge) == HIGH ){
if (boolLavage == true) {
boolLavage = false;
lcd.setCursor(0,0);
lcd.print("attente pour");
lcd.setCursor(0,1);
lcd.print("lavage film");
}
}
tempsDev = millis() + 180000;
sequenceDev();
while (digitalRead(bpRouge) == HIGH ){
if (boolLavage == true) {
boolLavage = false;
lcd.setCursor(0,0);
lcd.print("attente pour");
lcd.setCursor(0,1);
lcd.print("Blanchiment Fix");
}
}
tempsDev = millis() + 180000;
sequenceDev();
//
}
}
}
// fin C41----------------------------------------------------------------------------------

// traitement E6
void E6(){
valAna = analogRead(0);
while (valAna > 600 && valAna < 750){
regulTemp();
valAna = analogRead(0);
}
}


// fonction de programation des Temps et T° pour le N&B

void foncProg() {
int valCursorH = 0;
int valCursorV = 0;
char myChar = 0;
int myDecal = intDecal;
int myMn = -1;
int mySec = -1;
int myTemp = -1;
valAna = analogRead(0);
lcd.blink();
while (valAna > 0 && valAna < 200){
if (tempOK == true){
lcd.setCursor(0,0);
lcd.print("programation");
lcd.setCursor(0,1);
lcd.print("Temperature/Temps");
delay(1000);
lcd.clear();
tempOK = false;
affMemo();
myEnc.write(EEPROM.read(myDecal) * 4);
}
valAna = analogRead(0);
lcd.setCursor(valCursorH,valCursorV);
if (myDecal < intDecal + 16) {
if (myChar != myEnc.read()/4){
myChar = myEnc.read()/4;
lcd.print(myChar);
}
//}
//myEnc.write(EEPROM.read(myDecal) * 4);
if (digitalRead(valide) == LOW) {
//lcd.clear();
delay(300);
myChar = myEnc.read()/4;
//if (intDecal < 16) {
if (myChar != EEPROM.read(myDecal)){
EEPROM.write(myDecal, myChar);
}
myDecal++;
valCursorH++;
myEnc.write(EEPROM.read(myDecal) * 4);
delay(300);
//}
}
}
if (digitalRead(bpRouge) == LOW) {
lcd.clear();
//myDecal = intDecal + 16;
//valCursorH = 0;
//valCursorV = 0;
delay(300);
lcd.print("reglage mn :");
myMn = EEPROM.read(intDecal + 16);
mySec = EEPROM.read(intDecal + 17);
myTemp = EEPROM.read(intDecal + 18);
lcd.setCursor(12,0);
lcd.print(myMn);
lcd.setCursor(0,1);
lcd.print("secondes :");
lcd.print(mySec);
myEnc.write(myMn * 4);
lcd.setCursor(12,0);
while (digitalRead(bpRouge) == HIGH)
{
if (myMn != myEnc.read()/4) {
lcd.setCursor(12,0);
myMn = myEnc.read()/4;
lcd.print(" ");
lcd.setCursor(12,0);
lcd.print(myMn);
}
delay(300);
}

if (myMn != EEPROM.read(intDecal + 16)){
EEPROM.write(intDecal + 16,myMn);
delay(300);
}
delay(500);
myEnc.write(mySec * 4);
lcd.setCursor(12,1);
while (digitalRead(bpRouge) == HIGH)
{
if (mySec != myEnc.read()/4) {
lcd.setCursor(12,1);
mySec = myEnc.read()/4;
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print(mySec);
}
delay(300);
}
if (mySec != EEPROM.read(intDecal + 17)){
EEPROM.write(intDecal + 17,mySec);
delay(300);
}
valAna = analogRead(0);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rgl.temperature");
lcd.setCursor(3,1);
lcd.print(char(223));
lcd.print("C.");
lcd.setCursor(0,1);
myEnc.write(myTemp * 4);
delay(500);
while (digitalRead(bpRouge) == HIGH)
{
if (myTemp != myEnc.read()/4) {
lcd.setCursor(0,1);
myTemp = myEnc.read()/4;
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(myTemp);
}
}
if (myTemp != EEPROM.read(intDecal + 18)){
EEPROM.write(intDecal + 18,myTemp);
delay(300);
}
valAna = analogRead(0);
}
}
lcd.noBlink();
}

void affTempBase(){
//char tampon[25];
lcd.setCursor(0,0);
//lcd.print(minute);
lcd.print(tempsInit / 60000);
lcd.print(".");
//lcd.print(seconde);
lcd.print((tempsInit % 60000)/1000);
lcd.print("mn ");
lcd.setCursor(0,1);
//sprintf(tampon,"%f8.2",Tbac);
//lcd.print(tampon);
lcd.print(Tbac);
lcd.print("->");
lcd.print(temperature);
lcd.print(char(223));
lcd.print("C. ");
}

//
void affLCD() {
//char tampon[25];
//lcd.clear();
int tempsRest;
tempsRest = (tempsDev - millis()) / 1000;
lcd.setCursor(0,0);
lcd.print(tempsRest / 60);
lcd.print(".");
lcd.print(tempsRest % 60);
lcd.print("mn ");
lcd.setCursor(0,1);
//sprintf(tampon,"%f8.2",Tbac);
//lcd.print(tampon);
lcd.print(Tbac);
lcd.print("->");
lcd.print(temperature);
lcd.print(char(223));
lcd.print("C. ");

}

// fonction Noir et Blanc : choix T° / Temps
void NoirEtBlanc(){
if (digitalRead(GoTemps) == HIGH) {
tempsDev = millis();
rotHorraire = true;
tempsRot = millis() + 1500;
}
else {
tempsRot = millis()/ 3500;
foncRot();
}
temperature = myEnc.read()/4;
regulTemp();
affLCD();
}

//fonction de rotation avant / arriere du moteur
void foncRot(){
if (millis() > tempsRot) {
switch (rotHorraire) {
case false:
analogWrite(arriere, 0);
delay(250);
analogWrite(avant, intCoupCollier);
delay(80);
analogWrite(avant, vitMot);
rotHorraire = true;
tempsRot = millis() + 1500;
// faire tourner dans le sens horraire
break;
case true:
analogWrite(avant, 0);
delay(250);
analogWrite(arriere, intCoupCollier);
delay(80);
analogWrite(arriere, vitMot);
rotHorraire = false;
tempsRot = millis() + 1500;
// faire tourner dans le sens anti-horraire
break;
}
}
}
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par bruno_l » Jeudi 28 Mai 2015 20:59

une petite de photo de la bĂŞte en version finale (?)
Image
de haut en bas
sur le dessus
interrupteur chromé :marche /arrêt moteur (fonctionne en auto et manu)
interrupteur rouge :autorisation / inhibition chauffage
Led verte T° Ok
afficheur LCD
bouton poussoir de lancement des séquences en mode auto
sur le coté
interrupteur inhibitions alarmes (ça sonne en mode auto a 5sec avant fin du temps et encore plus fort si temps dépassé :lol: )
commutateur de choix auto / manu / programmation des temps / E6 /C41
sélecteur de choix du programme / changement T° (ça dépend ou on se trouve dans l'IMH)
et enfin affinage T° pour mettre en accord le thermomètre de précision avec le capteur de T° correction en plus ou en mois par pas de 0,1°C
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par ithaca » Jeudi 28 Mai 2015 22:39

Simplement impressionnant :bravo:
Avatar de l’utilisateur
ithaca
Super Gourou
Super Gourou
 
Message(s) : 3790
Inscription : Samedi 17 Octobre 2009 9:09
Localisation : Clamart 92

Re: JoboLike

Message par RĂ©ginald » Vendredi 29 Mai 2015 10:51

Joli boulot Bruno.

De ton coté tu n'es pas loin du but non plus avec ton retourneur David
Avatar de l’utilisateur
RĂ©ginald
Super Gourou
Super Gourou
 
Message(s) : 8266
Inscription : Jeudi 31 Juillet 2014 9:34
Localisation : Haute-savoie

Re: JoboLike

Message par bruno_l » Samedi 13 Juin 2015 12:40

des news
développement de 2 Tmax 400 dans du Xtol (préparé en mars/avril 2014 conservé en vinobag) les derniers 200ml ! préparation en 2+3 pour faire 500ml en rotatif
développement 12mn à 23°C
résultat belle gamme de gris impeccable
déjà séance de dev réalisés, trop cool de pouvoir traîner sur le forum tout en développant ses films :D
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par Rever » Jeudi 23 Juillet 2015 21:27

Bonsoir a tous
incroyable ce projet
Ce projet est il portable sur un rasp ?
Sinon je vais devoir acheter un arduino lol
Avatar de l’utilisateur
Rever
Passionné
Passionné
 
Message(s) : 126
Inscription : Samedi 23 Mai 2009 22:20
Localisation : LaChapelle aux pots (60650)

Re: JoboLike

Message par bruno_l » Jeudi 23 Juillet 2015 22:13

faut voir. mais l'utilisation de ce genre de truc c'est pas le marteau pilon pour Ă©craser une mouche
le système tourne avec une simple nano collé sur le l'afficheur LCD (comme ça l'usb est plus facile a brancher pour les maj)
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par bruno_l » Mardi 03 Mai 2016 19:39

des news, ayant reçu un capteur DS18b20 étanche et bien calibré, j'ai refait un peu le système et j'en ai profité pour revoir la régulation du chauffage
maintenant la cuve est précise à +/- 0,2°C, certains diront que ça ne sert à rien d'être aussi précis, mais comme ça ne coûte pas pus chère que d'être a +/- 1°C :-**
je lui ai fait subir un stress test en jetant 2 grosses poignées de glaçon dans la cuve à 22°C, résultat elle n'est pas descendu en dessous de 21,7 et pendant moins de 10sec.

quelques images de la cuve dans sa dernière version
Image

Image

ici on peut voir la sonde de T°, la pompe de brassage (pour aquarium) et les diverses commandes
Image
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par Gekos » Mardi 03 Mai 2016 19:58

Moi qui ne sais pas brancher 3 LED en série ( :lol: :mrgreen: ) je suis plus qu'impressionné !
:bienjoue:
Avatar de l’utilisateur
Gekos
Super Gourou
Super Gourou
 
Message(s) : 9304
Inscription : Dimanche 21 Novembre 2010 19:32
Localisation : 44 - Nantes

Re: JoboLike

Message par Armand29 » Mardi 03 Mai 2016 22:25

C'est du très beau boulot :bienjoue:
Avatar de l’utilisateur
Armand29
Super Gourou
Super Gourou
 
Message(s) : 2996
Inscription : Lundi 11 Juin 2007 11:58
Localisation : Bretagne Nord

Re: JoboLike

Message par Oriu » Mercredi 04 Mai 2016 5:44

Armand29 a écrit :C'est du très beau boulot :bienjoue:



c'est sûr :bienjoue:

j'aime bien les pattes de maintien qui semblent être des embases de roulette réutilisées 8)
Avatar de l’utilisateur
Oriu
Super Gourou
Super Gourou
 
Message(s) : 23160
Inscription : Lundi 21 Avril 2008 17:37
Localisation : 37 mais 2A par le coeur

Re: JoboLike

Message par bruno_l » Mercredi 04 Mai 2016 6:38

ce sont des crochets pour jardinière, mais qui on la fâcheuse manie de rouiller :twisted:
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par Oriu » Mercredi 04 Mai 2016 8:13

Alors il faut faire les pattes avec du plat Aluminium, courbées à l'étau :roll:
Avatar de l’utilisateur
Oriu
Super Gourou
Super Gourou
 
Message(s) : 23160
Inscription : Lundi 21 Avril 2008 17:37
Localisation : 37 mais 2A par le coeur

Re: JoboLike

Message par bruno_l » Mercredi 04 Mai 2016 10:29

oui ce serait bien, mais j'ai vissé ça et les écrous sont la :oops:
Image
bon ça a changé un peu depuis (en pire) mais j'ai plus envie de remettre les mains dedans :roll: :D :D
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par HYCday » Mardi 19 Juillet 2016 10:34

magnifique !!!
je pense pourquoi pas m'en faire une ! surtout que tu as posté pas mal d'infos dont le code arduino et le matériel necessaire (du moins en partie)....
il faudra d'abord que j'Ă©tudie le protocole de developpement E6 avant pour bien comprendre, mais je garde ton post sous le coude tellement c'est parfait :D
HYCday
DĂ©butant
DĂ©butant
 
Message(s) : 35
Inscription : Jeudi 28 FĂ©vrier 2013 18:17

Re: JoboLike

Message par GillesM » Samedi 20 Mai 2017 17:36

Bonjour Bruno,
C'est vraiment un travail remarquable. Bravo.
Je me suis fabriqué également un petit bac à bain thermostaté avec une cuve horizontale rotative pour film 24X6 et 6X6 mais sans Arduino. ( chauffage d'aquarium, thermostat à bulbe, moteur avec réducteur en 12V, cuve AP modifiée et quelques pièces imprimante 3D).
Ça fonctionne pas mal mais....
Serait-il possible d'avoir le plan de câblage de l'Arduino.
Je pense ne pas être le seul intéressé par ce projet.
Merci.
GillesM
 
Message(s) : 2
Inscription : Mardi 09 Mai 2017 16:18

Re: JoboLike

Message par bruno_l » Samedi 20 Mai 2017 17:55

Bonjour GillesM et bienvenue ici

je doit l'avoir quelque part, faut juste que je remette la main dessus
Avatar de l’utilisateur
bruno_l
Super Gourou
Super Gourou
 
Message(s) : 5596
Inscription : Lundi 10 Avril 2006 19:37
Localisation : pas loin de Tours

Re: JoboLike

Message par GillesM » Jeudi 03 AoĂ»t 2017 19:38

Bonjour bruno_I,

En lisant toutes les infos sur Jobolike, j'ai enfin terminé mon bac de développement avec un Arduino. Le système est simplifié avec seulement 6 Programmes , C41 38°C et Noir et Blanc. foma 400 20°C, TMax 40024°C, etc..
1 sélecteur 6 Positions, 1 BP avance de programme avec led verte intégrée ( température OK), 1 BP reset avec led rouge (température trop basse , système en attente, etc..)
Le connecteur USB est accessible pour modif programme.

Côté matériel

1 carte Arduino Uno
1 H-bridge
1 moteur 12Vcc
1 Alim 12Vcc 1A
1 commutateur 6 positions
2 boutons poussoir action et reset
6 resistances 1,8kOhm (a souder sur le commutateur)
1 dallas ds18b20 (capteur de Temperature)
1 led Verte (Temperature ok) + resistance de charge
1 led Rouge (chauffage) + resistance de charge
1 resistance etanche 230Vac aquarium 200w mini
1 mini pompe etanche 220v
1 buzzer
1 afficheur LCD 16x2 i2c
1 relais 230Vac 10A bobine 5v pour carte arduino
1 boite plastique
1 bac en plastique

quelques pièces imprimante 3D

Les entrailles de la bĂŞte
Image

Vue d'ensemble
Image

Le fond de la cuve, la pastille bleue cache une rondelle d'acier - accès USB par le trou dans le boitier de commande
Image

La rondelle Bleue d'entrainement et de centrage de cuve avec aimant de maintien au centre
Image

Le programme Arduino Uno

/*
1 carte Arduino Uno
1 H-bridge
1 moteur 12Vcc
1 Alim 12Vcc 1A
1 commutateur 6 positions
2 boutons poussoir action et reset
6 resistances 1,8kOhm (a souder sur le commutateur)
1 dallas ds18b20 (capteur de Temperature)
1 led Verte (Temperature ok) + resistance de charge
1 led Rouge (chauffage) + resistance de charge
1 resistance etanche 230Vac aquarium 200w mini
1 mini pompe etanche 220v
1 buzzer
1 afficheur LCD 16x2 i2c
1 relais 230Vac 10A bobine 5v pour carte arduino
1 boite plastique
1 bac en plastique
*/
//-----------------------------------------------------------
// insertion des librairies
//-----------------------------------------------------------
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <Wire.h>
//#include <Encoder.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>

// Data wire is plugged into port 4 on the Arduino
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress th1;
//------------------------------------------------------------
// initialize the library with the numbers of the interface pins
// pour certain afficheur c'est 0x3F d'autres 0x27 ...
const int I2C_ADDR = 0x3F;
const int BACKLIGHT_PIN = 3;
const int En_pin = 2;
const int Rw_pin = 1;
const int Rs_pin = 0;
const int D4_pin = 4;
const int D5_pin = 5;
const int D6_pin = 6;
const int D7_pin = 7;

LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin, BACKLIGHT_PIN, POSITIVE);
//-----------------------------------------------------------
// declaration des variables de broches
//-----------------------------------------------------------
// A0 commutateur 6 positions
// A1
// A2
// A3
// A4 SDA Afficheur
// A5 SCL Afficheur

// 1
// 2
// 3
// 4
const int BP = 5; //Bouton Poussoir
const int Buzzer = 6;
// 7
// 8
const int avant = 9; // constantes de broches du moteur
const int arriere = 10; // constantes de broches du moteur
// 11
// 12 Temperature ok / led verte
// 11 chauffage Led Rouge / Relais


//-----------------------------------------------------------
// declaration des variables de programme
//-----------------------------------------------------------
float Tbac = 0;
int initData = 255;
char MyChar;
int memoChar;
float temperature = 0;
unsigned long tempsRot = 0;
boolean tempOK = false;
boolean rothoraire = true;
unsigned long tempsDev;
int valAna;
int valComo = 0;
long tempsInit;
float fltTempH; // Temperature arret chauffage
float fltTempB; // Temperature depart chauffage
//-----------------------------------------------------------
// initialisations
//-----------------------------------------------------------
void setup() {

pinMode(Buzzer, OUTPUT);
analogWrite(Buzzer, 10);
delay(50);
analogWrite(Buzzer, 0);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(avant, OUTPUT);
pinMode(arriere, OUTPUT);
analogWrite(avant, 0);
analogWrite(arriere, 0);
sensors.begin();
sensors.getAddress(th1, 0);
sensors.setResolution(th1, 12);
lcd.begin(16, 2);
lcd.print(" Colorprocessor ");
lcd.setCursor(0, 1);
lcd.print("Dev. Color Film ");
delay(4000);
lcd.setCursor(0, 1);
lcd.print("Temp. regulated ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("1.Test program ");
lcd.setCursor(0, 1);
lcd.print("LCD, Motor, Led ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("2. Color C41 ");
lcd.setCursor(0, 1);
lcd.print(" 3mn15s - 38");
lcd.print(char(223));
lcd.print("C. ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("3. B&W Tmax 400 ");
lcd.setCursor(0, 1);
lcd.print(" 5mn30s Tmax 1+1");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("4. B&W HP5 400 ");
lcd.setCursor(0, 1);
lcd.print(" 11mn D76 1+1 ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("5. B&W FOMA 400 ");
lcd.setCursor(0, 1);
lcd.print(" 9mn LQN 1+10 ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print("6.Unoccupied ");
lcd.setCursor(0, 1);
lcd.print(" Not programmed ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print(" Turn the ");
lcd.setCursor(0, 1);
lcd.print(" selector now. ");
delay(5000);
pinMode(BP, INPUT);
digitalWrite(BP, HIGH);
}
//-----------------------------------------------------------
// Boucle principale
//-----------------------------------------------------------
void loop() {

// etat du commutateur 6 positions
valAna = analogRead(0);
delay(300);
if (valAna > 0 && valAna < 200) {
valComo = 5;
}
if (valAna > 200 && valAna < 400) {
valComo = 4;
}
if (valAna > 400 && valAna < 600) {
valComo = 3;
}
if (valAna > 600 && valAna < 750) {
valComo = 2;
}
if (valAna > 750 && valAna < 900) {
valComo = 1;
}
if (valAna > 1000 ) {
valComo = 0;
}
switch (valComo) {

case 0:
if (initData != 0) {
initData = 0;
lcd.clear();
lcd.print("1. Test program ");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 0;
//rotation vitesse nulle
analogWrite(avant, 0);
analogWrite(arriere, 0);
}
RESET();

break;
case 1: // traitement C41
if (initData != 1) {
initData = 1;
lcd.clear();
lcd.print("2. treatment C41 ");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 38;
fltTempH = 0.2;
fltTempB = 0.2;
}
C41();

break;
case 2:// TMAX 400 Noir et blanc
if (initData != 2) {
initData = 2;
lcd.clear();
lcd.print("3. B&W TMax 400 ");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 24;
fltTempH = 0.5;
fltTempB = 0.5;
}
TMAX400();

break;
case 3:// HP5 400 Noir et blanc
if (initData != 3) {
initData = 3;
lcd.clear();
lcd.print("4. B&W HP5 400 ");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 20;
fltTempH = 0.5;
fltTempB = 0.5;
}
HP5();

break;
case 4: // Foma 400 Noir et blanc
if (initData != 4) {
initData = 4;
lcd.clear();
lcd.print("5. B&W FOMA 400 ");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 20;
fltTempH = 0.5;
fltTempB = 0.5;
}
FOMA400();

break;

case 5:
if (initData != 5) {
initData = 5;
lcd.clear();
lcd.print("6. Not programmed");
digitalWrite(12, LOW);
analogWrite(11, 0);
temperature = 0;
fltTempH = 0.5;
fltTempB = 0.5;
}
break;
}
}

// traitement C41----------------------------------------------------------------------------
void C41() {
valAna = analogRead(0);
while (valAna > 750 && valAna < 900) {
valAna = analogRead(0);


while (digitalRead(BP) == HIGH ) {


regulTemp();
analogWrite(Buzzer, 0);

if ((Tbac + fltTempB) < temperature) {
lcd.setCursor(0, 1);
lcd.print(" Wait temp. OK ");
//rotation petite vitesse
analogWrite(avant, 50);
analogWrite(arriere, 0);
}
else
{

analogWrite(avant, 0);
analogWrite(arriere, 0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1. Prewash ");// premouillage 3mn
lcd.setCursor(0, 1);
lcd.print(" 3mn - 38");
lcd.print(char(223));
lcd.print("C. ");

}
}

tempsDev = millis() + 180000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(avant, 0);
analogWrite(arriere, 0);
analogWrite(Buzzer, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2. Developer ");//revelateur 3mn 15s a 38 degre C
lcd.setCursor(0, 1);
lcd.print(" 3mn 15s - 38");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 195000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3. Bleacher "); //blanchiment 3mn
lcd.setCursor(0, 1);
lcd.print(" 3mn - 38");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 180000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4. Fixier ");//fixateur 4mn 20s
lcd.setCursor(0, 1);
lcd.print(" 4mn 20s - 38");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 260000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5. Stabilizer ");//stabilisant 1mn
lcd.setCursor(0, 1);
lcd.print(" 1mn - 38");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 60000;
sequenceDev();


lcd.clear();
}
}

// fin C41----------------------------------------------------------------------------------


// traitement TMAX400-----------------------------------------------------------------------
void TMAX400() {
valAna = analogRead(0);
while (valAna > 600 && valAna < 750) {
valAna = analogRead(0);

while (digitalRead(BP) == HIGH ) {
regulTemp();
analogWrite(Buzzer, 0);

if ((Tbac + fltTempB) < temperature) {
lcd.setCursor(0, 1);
lcd.print(" Wait temp. OK ");
//rotation petite vitesse
analogWrite(avant, 50);
analogWrite(arriere, 0);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1. Developer ");// developpeur 5mn 30s Tmax 1+4 24 degre C
lcd.setCursor(0, 1);
lcd.print(" 5mn 30s - 24");
lcd.print(char(223));
lcd.print("C. ");

}
}

tempsDev = millis() + 330000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2. Stop bath "); //bain d'arret
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3. Fixier ");//fixateur 3mn Tmax
lcd.setCursor(0, 1);
lcd.print(" 3mn - 24");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 180000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4.First Wash ");//1er lavage
lcd.setCursor(0, 1);
lcd.print(" 2mn - 24");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 120000;
sequenceDev();



while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5.Second wash ");//2eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 24");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Third wash ");//3eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 24");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Photo Flo ");//agent mouillant photo flo
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();
lcd.clear();
}

}
// fin TMAX400 ----------------------------------------------------------------------------------

// traitement HP5-----------------------------------------------------------------------
void HP5() {
valAna = analogRead(0);
while (valAna > 400 && valAna < 600) {
valAna = analogRead(0);

while (digitalRead(BP) == HIGH ) {
regulTemp();
analogWrite(Buzzer, 0);

if ((Tbac + fltTempB) < temperature) {
lcd.setCursor(0, 1);
lcd.print(" Wait temp. OK ");
//rotation petite vitesse
analogWrite(avant, 50);
analogWrite(arriere, 0);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1. Developer ");// developpeur 11mn ID11/D76 1+1 20 degre C
lcd.setCursor(0, 1);
lcd.print(" 11mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
}

tempsDev = millis() + 660000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2. Stop bath "); //bain d'arret
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3. Fixier ");//fixateur 3mn Tmax
lcd.setCursor(0, 1);
lcd.print(" 3mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 180000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4.First Wash ");//1er lavage
lcd.setCursor(0, 1);
lcd.print(" 2mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 120000;
sequenceDev();



while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5.Second wash ");//2eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Third wash ");//3eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Photo Flo ");//agent mouillant photo flo
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();
lcd.clear();
}

}
// fin HP5 ----------------------------------------------------------------------------------

// traitement FOMA 400-----------------------------------------------------------------------
void FOMA400() {
valAna = analogRead(0);
while (valAna > 200 && valAna < 400) {
valAna = analogRead(0);

while (digitalRead(BP) == HIGH ) {
regulTemp();
analogWrite(Buzzer, 0);

if ((Tbac + fltTempB) < temperature) {
lcd.setCursor(0, 1);
lcd.print(" Wait temp. OK ");
//rotation petite vitesse
analogWrite(avant, 50);
analogWrite(arriere, 0);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1. Developer ");// developpeur 9mn LQN 1+10 20 degre C
lcd.setCursor(0, 1);
lcd.print(" 9mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
}

tempsDev = millis() + 540000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2. Stop bath "); //bain d'arret
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3. Fixier ");//fixateur 3mn Fomafix
lcd.setCursor(0, 1);
lcd.print(" 3mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 180000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4.First Wash ");//1er lavage
lcd.setCursor(0, 1);
lcd.print(" 2mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 120000;
sequenceDev();



while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5.Second wash ");//2eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Third wash ");//3eme lavage
lcd.setCursor(0, 1);
lcd.print(" 5mn - 20");
lcd.print(char(223));
lcd.print("C. ");

}
tempsDev = millis() + 300000;
sequenceDev();


while (digitalRead(BP) == HIGH ) {
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("6.Photo Flo ");//agent mouillant photo flo
lcd.setCursor(0, 1);
lcd.print("Manual action ");

}
tempsDev = millis() + 2000;
sequenceDev();
lcd.clear();
}

}
// fin HP5 -------------------------------------------------------------------------------
// traitement Reset-----------------------------------------------------------------------
void RESET() {

analogWrite(Buzzer, 5);
analogWrite(avant, 50);
analogWrite(arriere, 0);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Motor testing ");
lcd.setCursor(0, 1);
lcd.print(" Slow forward ");
delay(2000);
analogWrite(Buzzer, 5);
analogWrite(avant, 0);
analogWrite(arriere, 50);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Motor testing ");
lcd.setCursor(0, 1);
lcd.print(" Slow back ");
delay(2000);
analogWrite(Buzzer, 0);
analogWrite(avant, 0);
analogWrite(arriere, 0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("****************");
lcd.setCursor(0, 1);
lcd.print("****************");
digitalWrite(11, LOW);
digitalWrite(12, LOW);
delay(2000);
}

// fin reset ----------------------------------------------------------------------------------

void affLCD() {
lcd.clear();
int tempsRest;
tempsRest = (tempsDev - millis()) / 1000;
lcd.setCursor(0, 0);
lcd.print(tempsRest / 60);
lcd.print(".");
lcd.print(tempsRest % 60);
lcd.print("mn ");

lcd.setCursor(0, 1);

lcd.print(Tbac);
lcd.print("->");
lcd.print(temperature);
lcd.print(char(223));
lcd.print("C. ");

}
// controle et regulation de la Temperature-----------------------------------------------------
void regulTemp() {
// acquisition Temperature
sensors.requestTemperatures(); // Send the command to get temperatures
Tbac = sensors.getTempCByIndex(0);// - 0.5;
// recherche de la Temperature de consigne
if ((Tbac + fltTempB) < temperature) {
// enclenchement chauffage
analogWrite(11, 255);
if ((Tbac + (fltTempB / 2)) > temperature) {
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
}
else {
if ((Tbac - fltTempH) > temperature) {
digitalWrite(12, LOW);
}
else {
// arret chauffage
analogWrite(11, 0);
digitalWrite(12, HIGH);
tempOK = true;
}
// stop Chauffage
}
if (float(Tbac - (fltTempH * 1.5)) > float(temperature)) {
analogWrite(11, 0);
}
}

// lancement de la sequence de developpement-----------------------------------------------------
void sequenceDev() {


rothoraire = false;

analogWrite(avant, 0);
analogWrite(arriere, 0);

while (millis() < tempsDev) {

if (millis() > tempsDev - 2000) {
analogWrite(Buzzer, 20);
analogWrite(avant, 0);
analogWrite(arriere, 0);
}

// action moteur
if (tempsRot == 0) {
tempsRot = millis() + 2000;

}

if (millis() > tempsRot) {
switch (rothoraire) {

case false:
rothoraire = true;

analogWrite(arriere, 0);
analogWrite(avant, 0);
analogWrite(avant, 150);
tempsRot = millis() + 6000;

// faire tourner dans le sens horaire
break;

case true:
rothoraire = false;

analogWrite(arriere, 0);
analogWrite(avant, 0);
analogWrite(arriere, 150);
tempsRot = millis() + 6000;

// faire tourner dans le sens anti-horaire
break;
}
}
regulTemp();
affLCD();
}
}


MERCI posting.php?mode=reply&f=92&t=48197#
GillesM
 
Message(s) : 2
Inscription : Mardi 09 Mai 2017 16:18

PrécédentSuivant

Retour vers Projets et réalisations

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

  • PublicitĂ©