Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relays association #3

Closed
emaschas opened this issue Mar 23, 2018 · 23 comments
Closed

Relays association #3

emaschas opened this issue Mar 23, 2018 · 23 comments

Comments

@emaschas
Copy link
Owner

Relays and their associated pins, shall be assigned to washing machine interface.
The related macros shall be created (by renaming RELAYxx_ON and RELAYxx_OFF) .

@costas233
Copy link
Collaborator

Relays :

Relay #1 Verrou porte
Com : 6E
NO : 5E (Verrou electrique)
NC : STOP light

Relay #2 Vanne froid
Com : Com Relay#3, #10 et #11 (hydrostat)
NO : 4E (electrovanne froid)
NC : -

Relay #3 vanne chaud
Com : Comme relay #2, #10 et #11 (hydrostat)
NO : 3D
NC : -

Relay #4 Chauffe
Com : 6E
NO : 12C (résistance chauffante)
NC : -

Relay #5 Vidange
Com : 6E
NO : 11C (pompe de vidange)
NC : -

Relay #6 Marche moteur
Com : 6E
NO : com relay #7 (Inversion moteur)
NC : -

Relay #7 Inversion moteur
Com : NO Relay #6
NO : 6D et com Relay #8 (vitesse lavage)
NC : 2E

Relay #8 Vitesse lavage ! couplé avec relay #9 (toujours dans le même état que relay #9)
Com : NO relay #6
NO : 2C (= moteur fil bleu/blanc, pin 3)
NC : 2D (= moteur fil rouge , pin 6)

Relay #9 Vitesse essorage ! couplé avec relay #8 (toujours dans le même état que relay #8)
Com : NO relay #6
NO : 6C (= moteur fil jaune, pin 2)
NC : 4D (= moteur fil bleu , pin 5)

! Avant de changer l'état des relais #7 #8 et #9 le moteur doit être arreté (relais #6 sur NC). Les deux relais #7 et #8 doivent changer d'état simultanément pour passe du mode vitesse lavage au mode vitesse essorage.

Relay #10 Niveau d'eau A. Ce relais fontionne à l'envers. (2 entrées une sortie)
Com : Com relay #2 et #3 (electrovannes)
NO : 8C Hydrostat A
NC : 7C Hydrostat A

Relay #11 Niveau d'eau B (extra wasser) Ce relais fontionne à l'envers. (2 entrées une sortie)
Com : Com relay #2 et #3 (electrovannes)
NO : 8C Hydrostat B
NC : 7C Hydrostat B

Relay #12 nc
Relay #13 nc
Relay #14 nc
Relay #15 nc
Relay #16 nc

@costas233
Copy link
Collaborator

6E = phase 240V
9E, 10D, 12E, 11E, 11C, 10C = neutre 240V

@costas233
Copy link
Collaborator

/////////////////////////////////////////////
// KostasWash v1.11 //
// --------------- //
// Target CPU : Atmega8535 at 8MHz (int.) //
/////////////////////////////////////////////

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include "TIMER.h"
#include "LCD.h"

//-----------------------------------------------------------------------------------
// WIRING
//-----------------------------------------------------------------------------------
// Human Interface
//-----------------------------------------------------------------------------------
// Encoder:
// PD2 : Switch
// PD3 : Clock
// PD4 : Data
// LCD Display
// PD7 : LCD_EN
// PB0 : LCD_RS
// PB3 : LCD_DB4
// PB2 : LCD_DB5
// PD6 : LCD_DB6
// PD5 : LCD_DB7
//-----------------------------------------------------------------------------------
// Washing machine
//-----------------------------------------------------------------------------------
// PA1 : Relay R01 Verrou porte Com : 6E NO : 5E (Verrou electrique) NC : STOP light
// PA0 : Relay R02 Vanne froid Com : Com Relay#3#10#11 (hydrostat)NO : 4E (electrovanne froid) NC : -
// PA3 : Relay R03 vanne chaud Com : Comme relay #2, #10 et #11 (hydrostat) NO : 3D NC : -
// PA2 : Relay R04 Chauffe Com : 6EChauffe Com : 6E NO : 12C (résistance chauffante)
// PA5 : Relay R05 Vidange Com : 6E NO : 11C (pompe de vidange)NC : -
// PA4 : Relay R06 Marche moteur Com : 6E NO : com relay #7 (Inversion moteur)NC : -
// PA7 : Relay R07 Inversion moteur Com : NO Relay #6 NO : 6D et com Relay #8 (vitesse lavage) NC : 2E
// PA6 : Relay R08 Vitesse lavage Com : NO relay #6NO : 2C NC : 2D
// PC7 : Relay R09 Vitesse essorage Com : NO relay #6 NO : 6C NC : 4D
// PC3 : Relay R10 Niveau d'eau A Com : Com relay #2 et #3 (electrovannes)NO : 8C NC : 7C Hydrostat A
// PC6 : Relay R11 Niveau d'eau B Com : Com relay #2 et #3 (electrovannes)NO : 8C NC : 7C Hydrostat B
// PC2 : Relay R12 nc
// PC5 : Relay R13 nc
// PC1 : Relay R14 nc
// PC4 : Relay R15 nc
// PC0 : Relay R16 nc
//-----------------------------------------------------------------------------------

#define false 0
#define true (!0)
#define off 0
#define on 1

// Shared Enumerations
// -------------------
enum SwitchStatus
{
NO_PRESS,
SHORT_PRESS,
LONG_PRESS
};
enum MenuStatus
{
WAIT_MENU,
PROGRAM_MENU,
DELAY_MENU,
EXIT_MENU
};
enum WashStatus
{
NO_WASH,
PRE_WASH,
MAIN_WASH,
RINCE,
DRY,
END_WASH
};
enum RotationStatus
{
NO_ROTATION,
RUN1_ROTATION,
PAUSE1_ROTATION,
RUN2_ROTATION,
PAUSE2_ROTATION
};

// Shared Variables
// ----------------
// System variables
volatile uint8_t SwitchPressed = NO_PRESS;
volatile uint8_t EncoderChanged = false;
volatile uint8_t EncoderCount = 0;
// Program Variables : Menus
volatile uint8_t MenuState = WAIT_MENU;
// Program Variables : Washing
volatile uint8_t WashState = NO_WASH;
// Program Variables : Rotation (during Washing)
volatile uint8_t RotationState = NO_ROTATION;

// Macros for Encoder
// ------------------
#define SWITCH (PIND & _BV(PIND2))
#define ENCODER_A (PIND & _BV(PIND3))
#define ENCODER_B (PIND & _BV(PIND4))

// Macros for Relays
// ---------------
#define RELAY01_ON() PORTA |= _BV(PINA1)
#define RELAY01_OFF() PORTA &= ~_BV(PINA1)
#define RELAY02_ON() PORTA |= _BV(PINA0)
#define RELAY02_OFF() PORTA &= ~_BV(PINA0)
#define RELAY03_ON() PORTA |= _BV(PINA3)
#define RELAY03_OFF() PORTA &= ~_BV(PINA3)
#define RELAY04_ON() PORTA |= _BV(PINA2)
#define RELAY04_OFF() PORTA &= ~_BV(PINA2)
#define RELAY05_ON() PORTA |= _BV(PINA5)
#define RELAY05_OFF() PORTA &= ~_BV(PINA5)
#define RELAY06_ON() PORTA |= _BV(PINA4)
#define RELAY06_OFF() PORTA &= ~_BV(PINA4)
#define RELAY07_ON() PORTA |= _BV(PINA7)
#define RELAY07_OFF() PORTA &= ~_BV(PINA7)
#define RELAY08_ON() PORTA |= _BV(PINA6)
#define RELAY08_OFF() PORTA &= ~_BV(PINA6)
#define RELAY09_ON() PORTC |= _BV(PINC7)
#define RELAY09_OFF() PORTC &= ~_BV(PINC7)
#define RELAY10_ON() PORTC |= _BV(PINC3)
#define RELAY10_OFF() PORTC &= ~_BV(PINC3)
#define RELAY11_ON() PORTC |= _BV(PINC6)
#define RELAY11_OFF() PORTC &= ~_BV(PINC6)
#define RELAY12_ON() PORTC |= _BV(PINC2)
#define RELAY12_OFF() PORTC &= ~_BV(PINC2)
#define RELAY13_ON() PORTC |= _BV(PINC5)
#define RELAY13_OFF() PORTC &= ~_BV(PINC5)
#define RELAY14_ON() PORTC |= _BV(PINC1)
#define RELAY14_OFF() PORTC &= ~_BV(PINC1)
#define RELAY15_ON() PORTC |= _BV(PINC4)
#define RELAY15_OFF() PORTC &= ~_BV(PINC4)
#define RELAY16_ON() PORTC |= _BV(PINC0)
#define RELAY16_OFF() PORTC &= ~_BV(PINC0)

@emaschas
Copy link
Owner Author

Ben maitenant faut leur donner des petits noms en majuscule et faire les macros du style VALVE_OPEN et VALVE_CLOSE...
Pour cela tu as juste a renommer les macros RELAYxx_ON et OFF.

@emaschas
Copy link
Owner Author

J'ai relu les affectations...
Est-ce qu'on a besoin de garder le montage en cascade de certains relais ?
On pourrait simplifier et retranscrire le fonctionnement en logiciel...

@costas233
Copy link
Collaborator

costas233 commented Mar 26, 2018 via email

@emaschas
Copy link
Owner Author

emaschas commented Apr 4, 2018

En fait ce que tu as fait, c'est bon.
Ça correspond à peu près au schéma que j'ai fait pour le nouveau câblage (au numéros des relais près et aussi qu'il y a trois niveaux (bas, moyen et haut) et non pas deux.
Du coup ça donnerai :

  • R01 : Verrou porte
  • R02 et R03 : Niveau d'eau (00 = Bas, 10 = Moyen, 01 ou 11= Haut)
  • R04 : Vanne froid
  • R05 : Deuxième vanne (pas sûr qu'elle existe vraiment et j'ai pas bien compris quoi elle sert)
  • R06 : Chauffage (résistance chauffante avec thermostat en série)
  • R07 : Pompe de Vidange
  • R08 : Marche moteur sens 1
  • R09 : Marche moteur sens 2
  • R10 et R11 : Sélection entre lavage et essorage
    Important : R10 et R11 doivent toujours être dans la même position pour la capacité !

Filia,
Manos.

@costas233
Copy link
Collaborator

costas233 commented Apr 5, 2018

/////////////////////////////////////////////
// KostasWash v1.11 //
// --------------- //
// Target CPU : Atmega8535 at 8MHz (int.) //
/////////////////////////////////////////////

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include "TIMER.h"
#include "LCD.h"

//-----------------------------------------------------------------------------------
// WIRING
//-----------------------------------------------------------------------------------
// Human Interface
//-----------------------------------------------------------------------------------
// Encoder:
// PD2 : Switch
// PD3 : Clock
// PD4 : Data
// LCD Display
// PD7 : LCD_EN
// PB0 : LCD_RS
// PB3 : LCD_DB4
// PB2 : LCD_DB5
// PD6 : LCD_DB6
// PD5 : LCD_DB7
//-----------------------------------------------------------------------------------
// Washing machine
//-----------------------------------------------------------------------------------
// PA1 : Relay R01 Verrou porte Com : 6E NO : 5E (Verrou electrique) NC : STOP light
// PC2 : Relay R04 Niveau d'eau A Com : Com relay #2 et #3 (electrovannes)NO : 8C NC : 7C Hydrostat A
// PC3 : Relay R03 Niveau d'eau B Com : Com relay #2 et #3 (electrovannes)NO : 8C NC : 7C Hydrostat B
// PA2 : Relay R04 Vanne froid Com : Com Relay#3#10#11 (hydrostat)NO : 4E (electrovanne froid) NC : -
// PA5 : Relay R05 vanne chaud Com : Comme relay #2, #10 et #11 (hydrostat) NO : 3D NC : -
// PA4 : Relay R06 Chauffe Com : 6EChauffe Com : 6E NO : 12C (résistance chauffante)
// PA7 : Relay R07 Vidange Com : 6E NO : 11C (pompe de vidange)NC : -
// PA6 : Relay R08 Marche moteur Com : 6E NO : com relay #7 (Inversion moteur)NC : -
// PA7 : Relay R09 Vanne froid Com : Com Relay#3#10#11 (hydrostat)NO : 4E (electrovanne froid) NC : -
// PA3 : Relay R10 Inversion moteur Com : NO Relay #6 NO : 6D et com Relay #8 (vitesse lavage) NC : 2E
// PA6 : Relay R11 Vitesse lavage Com : NO relay #6NO : 2C NC : 2D
// PC7 : Relay R12 Vitesse essorage Com : NO relay #6 NO : 6C NC : 4D
// PC2 : Relay R12 Lampe témoin
// PC5 : Relay R13 nc
// PC1 : Relay R14 nc
// PC4 : Relay R15 nc
// PC0 : Relay R16 nc
//-----------------------------------------------------------------------------------

#define false 0
#define true (!0)
#define off 0
#define on 1

// Shared Enumerations
// -------------------
enum SwitchStatus
{
NO_PRESS,
SHORT_PRESS,
LONG_PRESS
};
enum MenuStatus
{
WAIT_MENU,
PROGRAM_MENU,
DELAY_MENU,
EXIT_MENU
};
enum WashStatus
{
NO_WASH,
PRE_WASH,
MAIN_WASH,
RINCE,
DRY,
END_WASH
};
enum RotationStatus
{
NO_ROTATION,
RUN1_ROTATION,
PAUSE1_ROTATION,
RUN2_ROTATION,
PAUSE2_ROTATION
};

// Shared Variables
// ----------------
// System variables
volatile uint8_t SwitchPressed = NO_PRESS;
volatile uint8_t EncoderChanged = false;
volatile uint8_t EncoderCount = 0;
// Program Variables : Menus
volatile uint8_t MenuState = WAIT_MENU;
// Program Variables : Washing
volatile uint8_t WashState = NO_WASH;
// Program Variables : Rotation (during Washing)
volatile uint8_t RotationState = NO_ROTATION;

// Macros for Encoder
// ------------------
#define SWITCH (PIND & _BV(PIND2))
#define ENCODER_A (PIND & _BV(PIND3))
#define ENCODER_B (PIND & _BV(PIND4))

// Macros for Relays
// ---------------
define DOOR_LOCK() PORTA |= _BV(PINA1)
define DOOR_UNLOCK() PORTA &= ~_BV(PINA1)
define WATER_LEVEL_1_LOW() PORTA |= _BV(PINA0)
define WATER_LEVEL_1_HIGH() PORTA &= ~_BV(PINA0)
define WATER_LEVEL_2_LOW() PORTA |= _BV(PINA3)
define WATER_LEVEL_2_HIGH() PORTA &= ~_BV(PINA3)
define VALVE_COLD_OPEN() PORTA |= _BV(PINA2)
define VALVE_COLD_CLOSE() PORTA &= ~_BV(PINA2)
define VALVE_HOT_OPEN() PORTA |= _BV(PINA5)
define VALVE_HOT_CLOSE() PORTA &= ~_BV(PINA5)
define HEAT_ON() PORTA |= _BV(PINA4)
define HEAT_OFF() PORTA &= ~_BV(PINA4)
define DRAIN_ON() PORTA |= _BV(PINA7)
define DRAIN_OFF() PORTA &= ~_BV(PINA7)
define MOTOR_ON() PORTA |= _BV(PINA6)
define MOTOR_OFF() PORTA &= ~_BV(PINA6)
define REVERSE_ON() PORTC |= _BV(PINC7)
define REVERSE_OFF() PORTC &= ~_BV(PINC7)
define SPINNING_1_ON() PORTC |= _BV(PINC3)
define SPINNING_1_OFF() PORTC &= ~_BV(PINC3)
define SPINNING_2_ON() PORTC |= _BV(PINC6)
define SPINNING_2_OFF() PORTC &= ~_BV(PINC6)
define LIGHT_ON() PORTC |= _BV(PINC2)
define LIGHT_OFF() PORTC &= ~_BV(PINC2)
#define RELAY13_ON() PORTC |= _BV(PINC5)
#define RELAY13_OFF() PORTC &= ~_BV(PINC5)
#define RELAY14_ON() PORTC |= _BV(PINC1)
#define RELAY14_OFF() PORTC &= ~_BV(PINC1)
#define RELAY15_ON() PORTC |= _BV(PINC4)
#define RELAY15_OFF() PORTC &= ~_BV(PINC4)
#define RELAY16_ON() PORTC |= _BV(PINC0)
#define RELAY16_OFF() PORTC &= ~_BV(PINC0)

@costas233
Copy link
Collaborator

costas233 commented Apr 6, 2018 via email

@emaschas emaschas reopened this Apr 6, 2018
@emaschas
Copy link
Owner Author

emaschas commented Apr 6, 2018

Voir discussion sur le câblage.

@emaschas
Copy link
Owner Author

emaschas commented Apr 9, 2018

D'après Costas :

Les pins du programmeur mécanique sont reliés entre eux comme suit (si le pin n'est pas listé il n'existe pas. S'il est tout seul, il n'est relié qu'a l'interrupteur) :

A1-E2-A7
B1-D6-A8
C1-D1
E1-C5
C2-B3
D2-B4
A3-C6
C3-A5-A9
D3
A4-D4
C4
D5-B9-C9-D9
B6-B7
E6-E7-D7
C7
B8-C8
D8
E9-A10-C10-D10
A11-B11
C11
D11
E11
A12-B12
C12
D12
E12

Dans la pratique seuls C D et E sont reliés à des câbles. A et B n'étaient reliés qu'au moteur du programmeur.

Les relais mécaniques sont brochés comme suit :
1ere série de relais (il y a un relais par lettre) :
Ligne 1 : com
Ligne 2 : out1
Ligne 3 : out2

2 série de relais :
Ligne 4 : com
Ligne 5 : out1
Ligne 6 : out2

3e série de relais :
Ligne 7 : com
Ligne 8 : out1
Ligne 9 : out2

4e série de relais :
Ligne 10 : com
Ligne 11 : out1
Ligne 12 : out2

Les relais A(9-10-11) et B(9-10-11) sont connectés en // et pilotent le moteur d'avancée du programmeur et sont donc sont les plus sollicités. Ils étaient cramés en dépit de la redondance.

@emaschas
Copy link
Owner Author

emaschas commented Apr 9, 2018

C'est conforme au schéma sauf un point à vérifier : s'il n'y pas de liaisons :
D1-E1 (En fait : C1-D1-E1-C5)

Sinon, j'ai ajouté dans "Documents" un schéma où on trouve la correspondance entre les relais et les points de connexion.

Filia,
Manos.

@costas233
Copy link
Collaborator

costas233 commented Apr 9, 2018 via email

@costas233
Copy link
Collaborator

costas233 commented Apr 10, 2018 via email

@costas233
Copy link
Collaborator

costas233 commented Apr 10, 2018 via email

@costas233
Copy link
Collaborator

En y réfléchissant c'est pas suffisant, on n'a pas la position neutre. il faudrait un 3e relais pour pouvoir couper à la fois la chauffe et l'admission d'eau chaude. Mais sur le paprier c'est possible. A étudier pour une version ultérieure.

@emaschas
Copy link
Owner Author

Pas mal comme idée. Je vais y refléchir...
De toutes façons on a encore 5 relais disponibles...
Par contre on n'a pas de retour sur la température au niveau du micro-contrôleur.
Ou peut remplir en eau froide + eau chaude couplée au thermostat ce qui limite la température maximale, mais si l'eau est juste tiède on sera en dessous de la température souhaitée et il faudra compléter avec le chauffage.

@costas233
Copy link
Collaborator

costas233 commented Apr 10, 2018 via email

@emaschas
Copy link
Owner Author

emaschas commented Apr 17, 2018

J'ai pas trouvé de solution sans prendre le risque de faire un court-circuit si les relais ne sont pas actionnés ensemble.
Il faut faire attention avec la résistance chauffante : 2000 W ça fait 9 A, les relais supportent juste 10 A...

@costas233
Copy link
Collaborator

La solution, je pense, c'est d'inclure un fusible en série avec la resistance. Dans le cas ou un des relais colle (ou en cas de bug du programme) c'est le fusible qui saute.
Si les 10A sont trop justes, il y a la possibilité de coupler deux relais en // et de les déclencher le plus simultanément possible. Ca réduira la possibilité de création d'un arc electrique au moment de la rupture et ça baissera l'effet Joules dans les relais. On a assez de relais pour ça.

Au passage, le même risque existe avec l'inversion moteur qui demande l'opération simultanée de deux relais. Et un fusible ne serait pas un luxe là aussi.

@emaschas
Copy link
Owner Author

Pour avoir un câblage sans risques, il faudrait séparer les câbles des deux électrovannes du côté du connecteur D10 (câble bleu).
Peux-tu regarder si c'est faisable sans massacrer le câblage actuel ?

Sinon, pour l'inversion moteur, je ne vois pas où est le risque depuis qu'on a mis un relais pour le sens (R09) et un autre pour marche/arrêt (R08) ?
Les seuls relais qui doivent être synchrones sont R10 et R11 pour basculer la capacité entre lavage et essorage. S'ils ne sont pas synchrones on ne fait pas un court circuit on aura juste un moteur qui tourne mal ou pas du tout...

@costas233
Copy link
Collaborator

C'est tres facile de recâbler les electrovannes, elles sont en haut, donc très accessibles. Il suffit de déconnecter les cosses de l'une d'elles et de tirer une nouvelle paire de câbles // au faiseau existant.
En fait c'est même sans doute plus facile que de passer par le connecteur 12 pins existant. Le seul souci est de ne pas inverser phase et neutre, et encore, je ne pense pas que ça pose un problème à la l'electrovanne.
Pour l'anecdote, j'ai appelé le magasin grec qui vendait le programmeur à 70€ : ça ne se fait plus. :-(
Sinon, j'ai trouvé des cosses standard sur l'ile. Y'a tout ce qu'il faut pour le cablage.

@emaschas
Copy link
Owner Author

Dans ce cas il n'y a même pas besoin d'ajouter un relais...
Regarde la nouvelle version de NewWiring : j'ai mis le thermostat en commun sous la vanne d'eau chaude et sous le chauffage.
J'ai laissé la vanne d'eau froide sur D10.
Les électrovannes n'ont normalement pas de sens de branchement (courant alternatif).

@emaschas emaschas closed this as completed May 6, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

2 participants