JoboLike

Les différents montages et réalisations personnelles.
Avatar du membre
Réginald
Modérateur
Modérateur
Messages : 11570
Enregistré le : jeudi 31 juillet 2014 10:34
Localisation : Haute-savoie
Contact :

Re: JoboLike

Message par Réginald »

Classe, tu arrives au bout de ton projet
Avatar du membre
Jerome
Super Gourou
Super Gourou
Messages : 1322
Enregistré le : mardi 09 avril 2013 12:56
Localisation : Grenoble

Re: JoboLike

Message par Jerome »

ça y est c'est bientôt l'aboutissement !
Avatar du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

ç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 du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

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 du membre
ithaca
Super Gourou
Super Gourou
Messages : 3818
Enregistré le : samedi 17 octobre 2009 10:09
Localisation : Clamart 92
Contact :

Re: JoboLike

Message par ithaca »

Simplement impressionnant :bravo:
Avatar du membre
Réginald
Modérateur
Modérateur
Messages : 11570
Enregistré le : jeudi 31 juillet 2014 10:34
Localisation : Haute-savoie
Contact :

Re: JoboLike

Message par Réginald »

Joli boulot Bruno.

De ton coté tu n'es pas loin du but non plus avec ton retourneur David
Avatar du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

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 du membre
Rever
Passionné
Passionné
Messages : 126
Enregistré le : samedi 23 mai 2009 23:20
Localisation : LaChapelle aux pots (60650)

Re: JoboLike

Message par Rever »

Bonsoir a tous
incroyable ce projet
Ce projet est il portable sur un rasp ?
Sinon je vais devoir acheter un arduino lol
Avatar du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

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 du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

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 du membre
Gekos
Super Gourou
Super Gourou
Messages : 9379
Enregistré le : dimanche 21 novembre 2010 19:32
Localisation : 44 - Nantes
Contact :

Re: JoboLike

Message par Gekos »

Moi qui ne sais pas brancher 3 LED en série ( :lol: :mrgreen: ) je suis plus qu'impressionné !
:bienjoue:
Avatar du membre
Armand29
Membre de l'association
Membre de l'association
Messages : 4783
Enregistré le : lundi 11 juin 2007 12:58
Localisation : Bretagne Nord

Re: JoboLike

Message par Armand29 »

C'est du très beau boulot :bienjoue:
Avatar du membre
Oriu
Membre de l'association
Membre de l'association
Messages : 33334
Enregistré le : lundi 21 avril 2008 18:37
Localisation : 37 mais 2A par le coeur

Re: JoboLike

Message par Oriu »

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 du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

ce sont des crochets pour jardinière, mais qui on la fâcheuse manie de rouiller :twisted:
Avatar du membre
Oriu
Membre de l'association
Membre de l'association
Messages : 33334
Enregistré le : lundi 21 avril 2008 18:37
Localisation : 37 mais 2A par le coeur

Re: JoboLike

Message par Oriu »

Alors il faut faire les pattes avec du plat Aluminium, courbées à l'étau :roll:
Avatar du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

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
HYCday
Débutant
Débutant
Messages : 35
Enregistré le : jeudi 28 février 2013 18:17

Re: JoboLike

Message par HYCday »

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
Avatar du membre
GillesM
Messages : 4
Enregistré le : mardi 09 mai 2017 17:18
Localisation : Verneuil en Halatte - Oise

Re: JoboLike

Message par GillesM »

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.
Avatar du membre
numérix
Membre de l'association
Membre de l'association
Messages : 8448
Enregistré le : lundi 10 avril 2006 20:37
Localisation : pas loin de Tours
Contact :

Re: JoboLike

Message par numérix »

Bonjour GillesM et bienvenue ici

je doit l'avoir quelque part, faut juste que je remette la main dessus
Avatar du membre
GillesM
Messages : 4
Enregistré le : mardi 09 mai 2017 17:18
Localisation : Verneuil en Halatte - Oise

Re: JoboLike

Message par GillesM »

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 http://35mm-compact.com/forum/posting.p ... 92&t=48197#
Répondre

Retourner vers « Projets et réalisations »