Share My Creation Smart Laundry: Automating Your Washing Machine with ESP8266

Hey guys:

I want to share my successfully completed project now with auto sensor using ADCIN of ESP8266 Follow the manual and diagram

B4R:
Sub Process_Globals
    Public Serial1 As Serial
    Private Timer1 As Timer
    Private Timer2 As Timer
    Private Timer3 As Timer
    Private Timer4 As Timer
    Private Timer5 As Timer
    Private Timer6 As Timer
    Private Timer7 As Timer
    Private Timer8 As Timer
    Private Timer9 As Timer
    Private ssd As AdafruitSSD1306
    Private ESPin As D1Pins
    Private Relays As Int = 9
    Private Registers(Relays) As Boolean
    Private DS,STCP,SHCP As Pin
    Private ssd As AdafruitSSD1306
    Dim Ligar_Desligar As Pin
    Dim Start As Pin
    'Dim Set_Sensor As Pin
    Dim EncoderPinA As Pin
    Dim EncoderPinB As Pin
    Private LastStateTime As Long = 0'Enconder
    Private Counter As Int = 1 ' Enconder
    Private lastButtonState As Boolean = True ' O estado anterior do botão, assume que começa não pressionado.

    Private Sensor_nivel As Int
    Private LastStateTime As Long = 0
    Private Const NUM_LEITURAS_ADC As Int = 10 ' Número de leituras ADC para média

    Private PinADC As Pin ' Declaração do pino ADC
    Public AdcValue As Int
    Dim Nivel_detectado As Boolean = False
    
'    TEMP_1 CON 210   'MILE SEGUNDOS LAVAGEM NORMAL
'    TEMP_2 CON 220   'MILE SEGUNDOS LAVAGEM PESADO
'    TEMP_3 CON 200   'MILE SEGUNDOS LAVAGEM RAPIDO
    
    Dim Lavangem_Normal As Int = 300  ' Delay Lavangem  Normal
    Dim Lavangem_Rapido As Int = 250  ' Delay Lavangem  Rapido
    Dim Lavangem_Dia_Dia As Int = 330 ' Delay Lavangem  Dia a Dia
    Dim Lavangem_Pesado As Int = 370  ' Delay Lavangem  Pesado
    Dim ENXAG As Int = 250            ' Delay Lavangem_Normal
  
End Sub
Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    PinADC.Initialize(PinADC.A0,PinADC.MODE_INPUT)' Inicializa o pino ADC (A0) do ESP8266
    ' Inicializa os pinos como entrada  do enconder
    EncoderPinA.Initialize(13, EncoderPinA.MODE_INPUT_PULLUP)'Inicializa o botão 1 com pull-up interno
    EncoderPinB.Initialize(10, EncoderPinB.MODE_INPUT_PULLUP)'Inicializa o botão 2 com pull-up interno
    EncoderPinA.AddListener("EncoderPinA_Changed")'Enconder de 3 pinos
    
    Start.Initialize(ESPin.D3,Start.MODE_INPUT_PULLUP)      'Inicializa o botão 3 com pull-up interno
    'Set_Sensor.Initialize(ESPin.D4,Set_Sensor.MODE_INPUT_PULLUP)   'Inicializa o botão 4 com pull-up interno
    
    Ligar_Desligar.Initialize(ESPin.D4,Ligar_Desligar.MODE_INPUT_PULLUP) 'Inicializa o botão 3 com pull-up interno
    Ligar_Desligar.AddListener("Liga_Desligar")'Ligar e Desligar Maquina
    
    Timer1.Initialize("Menu",500) 'Menu de função aguardar 500 ms
    Timer5.Initialize("Verificar_Sensor",1000)'Verificar Sensor de Nivel a Acada 1 ms
    Timer5.Enabled=True'Ligar Timer1 Varredura
    
    
    Timer2.Initialize("Star_lavagem_Normal",300)'Start de Lavagem Normal
    Timer6.Initialize("Star_lavagem_Rapido",300)'Start de Lavagem Rpido
    Timer7.Initialize("Star_lavagem_Dia_Dia",300)'Start de Lavagem Dia Dia
    Timer8.Initialize("Star_lavagem_Pesado",300)'Start de Lavagem Pesado
    Timer3.Initialize("Enchimento",300)  'Timer Start  Valvola Enchimento
    Timer4.Initialize("Molho_Longo",300) 'Timer Start Valvola Molho
    Timer9.Initialize("Centrifugar",300) 'Timer Start Centrifugar
    
    DS.Initialize(ESPin.D0,DS.MODE_OUTPUT)      'HS Pin 11 Serial In     ESP D6 GPIO 12
    STCP.Initialize(ESPin.D5,STCP.MODE_OUTPUT)  'HS Pin 12 RCK           ESP D5 GPIO 14
    SHCP.Initialize(ESPin.D6,SHCP.MODE_OUTPUT)  'HS Pin 14 Serial Clock  ESP D7 GPIO 16
    'Clear Register Values
    ClearAllReg
    
    ssd.InitializeI2C(ESPin.D6,0x3C)            'initialise SSD1306 0x78
    AtualizarDisplay("MAQUINA", "DESLIGADA")

End Sub

' Método chamado quando o pino A do encoder muda de estado
Sub EncoderPinA_Changed (State As Boolean)
    Dim StateTime As Long = Millis()
    If StateTime - LastStateTime > 500 Then 'Execute apenas se o intervalo de disparo da mudança de estado for maior que 50 ms, ajuste para se adequar
        If EncoderPinB.DigitalRead Then
            Counter = Counter - 1
        Else
            Counter = Counter + 1
        End If
        Counter = Min(10, Max(1, Counter)) 'Limit the counter between 0 and 4
        LastStateTime = StateTime 'Armazenar a hora do último estado
        Log("Position: ", Counter)
    End If
End Sub

Sub Menu'Ligar  O Menu  Timer 1
    
    Select (Counter)
        Case 1
            Log("Nivel 1")
            AtualizarDisplay("NIVEL 1 AG", "BAIXO")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Sensor_nivel = 1' Incrementa o nível de 1 a 3
            End If
        Case 2
            Log("Nivel 2")
            AtualizarDisplay("NIVEL 2 AG", "MEDIO")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Sensor_nivel = 2'Incrementa o nível de 1 a 3
            End If
        Case 3
            Log("Nivel 3")
            AtualizarDisplay("NIVEL 3 AG", "ALTO ")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Sensor_nivel = 3' Incrementa o nível de 1 a 3
            End If
        Case 4
            Log("Menu 1")
            AtualizarDisplay("PROGRAMA:", "NORMAL")
             If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True 'Lavagem Normal
            End If
        Case 5
            Log("Menu 2")
            AtualizarDisplay("PROGRAMA:", "RAPIDO")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer6.Enabled = True 'Lavangem Rapido
            End If
        Case 6
            Log("Menu 3")
            AtualizarDisplay("PROGRAMA:", "DIA A DIA")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer8.Enabled = True ' Lavangem Pesado
            End If
        Case 7
            Log("Menu 4")
            AtualizarDisplay("PROGRAMA:", "PESADO")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer7.Enabled = True' Lavangem Dia  a Dia
            End If
        Case 8
            Log("Menu 5")
            AtualizarDisplay("PROGRAMA:", "ENXAGUAR")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer3.Enabled = True'Start Enchimento
            End If
        Case 9
            Log("Menu 6")
            AtualizarDisplay("PROGRAMA:", "CENTRIFUGAR")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer9.Enabled=True'Ligar Timer1 centrifugar
            End If
        Case 10
            Log("Menu 7")
            AtualizarDisplay("PROGRAMA:", "MOLHO LONGO")
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer4.Enabled = True 'Botao Start Molho Longo
            End If
    End Select
End Sub
' Método para atualizar o display
Sub AtualizarDisplay(Titulo As String, Valor As String)
    ssd.ClearDisplay
    ssd.GFX.SetCursor(2,0)
    ssd.GFX.ConfigureText(2, ssd.WHITE, False)
    ssd.GFX.DrawText(Titulo).DrawText(CRLF).DrawText(Valor).DrawText(CRLF)
    ssd.Display
End Sub

Sub Verificar_Sensor
    AdcValue = AverageADCRead(NUM_LEITURAS_ADC)
    AdcValue = AdcValue / 10
    Log("Sensor ", Sensor_nivel," ADCIN ", AdcValue)
    Nivel_detectado = False
    Select Case Sensor_nivel
        Case 1
            If AdcValue = 31 Then Nivel_detectado = True
            Registers(6) = True'Ligar o Led endicador de nivel
            WriteToReg
        Case 2
            If AdcValue = 16 Then Nivel_detectado = True
            Registers(6) = True'Ligar o Led endicador de nivel
            WriteToReg
        Case 3
            If AdcValue = 11 Then Nivel_detectado = True
            Registers(6) = True'Ligar o Led endicador de nivel
            WriteToReg
    End Select
End Sub

'Função para fazer a média de várias leituras do ADC
Sub AverageADCRead(NumReadings As Int) As Int
        Dim Total As Int = 0
        For i = 1 To NumReadings
        Total = Total + PinADC.AnalogRead
        Delay(10)
        Next
        Return Total / NumReadings
End Sub

Sub Liga_Desligar (State As Boolean)
        Dim currentState As Boolean = Ligar_Desligar.DigitalRead
        If currentState = False And lastButtonState = True Then ' Detecta borda de descida (botão pressionado)
        Timer1.Enabled = Not(Timer1.Enabled) ' Alterna o estado do timer
        If Timer1.Enabled Then
        AtualizarDisplay("MAQUINA", "LIGADA  ")
        Registers(5) = True'Ligar o Buzzer
        WriteToReg
        Delay(60)
        Registers(5) = False'Ligar o Buzzer
        WriteToReg
        Delay(1000)
        Timer5.Enabled=True  'Verificar Sensor de Nivel a Acada 1 ms
        Timer1.Enabled=True  'Menu de função aguardar 500 ms
        Else
        AtualizarDisplay("MAQUINA", "DESLIGADA")
        Timer1.Enabled = False 'Menu
        Timer2.Enabled = False 'Lavagem Normal
        Timer3.Enabled = False 'Enchimento
        Timer5.Enabled = False 'Sensor
        Timer6.Enabled = False 'Lavangem Rapido
        Timer7.Enabled = False 'Lavangem Pesado
        Timer8.Enabled = False 'Lavangem Dia a Dia
        Timer9.Enabled = False 'Enchimento
        
        Registers(1) = False 'Desligar Motor direito
        Registers(6) = False 'Desligar o Led endicador de nival
        Registers(3) = False 'Desligar Motor dreno
        WriteToReg
        End If
        End If
        lastButtonState = currentState ' Atualiza o estado anterior do botão
End Sub

Sub Star_lavagem_normal'Start de lavangem normal Timer 2
        Timer1.Enabled = False'Desligar o Menu
        AtualizarDisplay("LAVANDO:", "NORMAL")
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
    
        If Nivel_detectado Then
        Registers(4) = False'Fechar Valvola de água
        Registers(6) = False'Ligar o Led endicador de nivel
        WriteToReg
        Lavando_Normal
        End If
End Sub

Private Sub Lavando_Normal()
        Timer2.Enabled = False'Desligar o  Star_lavagem_normal
        AtualizarDisplay("LAVANDO:", "AGUARDE....")
        For i = 0 To 1499   '1499 Passos 50 minutos
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Dele de 2 segundo
        Next
        
        Delay(60000)'PAUSA DE 1 SEGUNDO
                
        For i = 0 To 1499       '1499 Passos 50 minutos
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay(Lavangem_Normal)  'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Dele de 2 segundo
        Next
        Dreno_1
End Sub

Sub Star_lavagem_Rapido
        Timer1.Enabled = False'Menu
        AtualizarDisplay("LAVANDO:", "RAPIDO")
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
          
        If Nivel_detectado Then
        Registers(4) = False'Fechar Valvola de água
        Registers(6) = False'Ligar o Led endicador de nival
        WriteToReg
        Lavando_Rapida
        End If
End Sub

Sub Lavando_Rapida
        Timer6.Enabled = False'Desligar o  Star_lavagem_normal
        AtualizarDisplay("LAVANDO:", "AGUARDE....")
        For i = 0 To 449    'Passos  449   30 minutos
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Rapido) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (Lavangem_Rapido) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Rapido) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Rapido) 'Dele de 2 segundo
        Next
            
        Delay(60000)'PAUSA DE 1 SEGUNDO
                    
        For i = 0 To 449        'Passos  449   30 minutos
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Rapido) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay(Lavangem_Rapido)  'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Rapido) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Rapido) 'Dele de 2 segundo
        Next
        Dreno_1
End Sub
Sub Star_lavagem_Dia_Dia
        Timer1.Enabled = False'Menu
        AtualizarDisplay("LAVANDO:", "DIA A DIA")
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
          
        If Nivel_detectado Then
        Registers(4) = False'Fechar Valvola de água
        Registers(6) = False'Ligar o Led endicador de nival
        WriteToReg
        Lavando_Dia_Dia
        End If
End Sub
Sub Lavando_Dia_Dia
        Timer7.Enabled = False'Desligar o  Star_lavagem_normal
        AtualizarDisplay("LAVANDO:", "AGUARDE....")
        For i = 0 To  1349'1349 Passos + o - 30 minutos
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Dele de 2 segundo
        Next
            
        Delay(60000)'PAUSA DE 1 SEGUNDO
                    
        For i = 0 To 1349'1349 Passos  + o - 30 minutos
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay(Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Dia_Dia) 'Dele de 2 segundo
        Next
        Dreno_1
End Sub
Sub Star_lavagem_Pesado
        Timer1.Enabled = False'Menu
        AtualizarDisplay("LAVANDO:", "PESADO")
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
          
        If Nivel_detectado Then
        Registers(4) = False'Fechar Valvola de água
        Registers(6) = False'Ligar o Led endicador de nival
        WriteToReg
        Lavando_pesado
        End If
End Sub

Sub Lavando_pesado
        Timer8.Enabled = False'Desligar o  Star_lavagem_normal
        AtualizarDisplay("LAVANDO:", "AGUARDE....")
       For i = 0 To 230         '230 Passoas
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Pesado) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay (Lavangem_Pesado) 'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Pesado) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Pesado) 'Dele de 2 segundo
        Delay(5000)
        Next
            
        Delay(60000)'PAUSA DE 1 SEGUNDO
                    
        For i = 0 To 230        '230 Passoas
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Pesado) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay(Lavangem_Pesado)  'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Pesado) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Pesado) 'Dele de 2 segundo
        Delay(5000)
        Next
        Dreno_1
End Sub

Private Sub Dreno_1()'DRENANDO A ÁGUA
        Timer1.Enabled = False 'Desligar Menu
        Timer2.Enabled = False 'Desligar Start Lavagem Normal
        Timer3.Enabled = False 'DesligarEnchimento
        Timer6.Enabled = False 'DesligarLavangem Rapido
        Timer7.Enabled = False 'DesligarLavangem Pesado
        Timer8.Enabled = False 'DesligarLavangem Dia a Dia
        Timer9.Enabled = False 'DesligarLavangem Dia a Dia
        AtualizarDisplay("DRENANDO 1", "AGUARDE....")   
        For i = 0 To 35     'Aguardar 4 Minuto
        Registers(3) = True 'Ligar Motor Dreno
        WriteToReg
        Delay(6000)
        Next
        
        For i = 0 To 35     'Aguardar 2 Minuto
        Registers(1) = True 'Ligar Motor Esquerdo
        WriteToReg
        Delay(6000)
        Next
        
        Registers(3) = False 'Desligar Motor Dreno
        Registers(1) = False 'Desligar Motor esquerdo para exaguar
        Registers(6) = False 'Desligar o Led endicador de nivel
        WriteToReg
        Timer3.Enabled = True'Start Enchimento
End Sub

Private Sub Enchimento()       'Enchendo de água
        Timer1.Enabled = False 'Desligar Menu
        Timer2.Enabled = False 'DesligarLavagem Normal
        AtualizarDisplay("ENCHENDO", "AGUARDE....")
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg

        If Nivel_detectado Then
        Registers(4) = False'Fechar Valvola de água
        Registers(6) = False'Ligar o Led endicador de nivel
        WriteToReg
        Enxagua
        End If
End Sub

Private Sub Enxagua()
        Timer1.Enabled = False 'Desligar Menu
        Timer2.Enabled = False 'Desligar Lavagem Normal
        Timer3.Enabled = False 'Desligar  Enchimento
        AtualizarDisplay("ENXAGUAR", "AGUARDE....")
        For i = 0 To  150   'Com 21 minutos
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (ENXAG)        'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (ENXAG)        'Delei de 2 Mile Segundos
        Registers(2) = True  'Ligar Motor esquerdo
        WriteToReg
        Delay (ENXAG)        'Delei de 2 Mile Segundos
        Registers(2) = False 'Desligar Motor esquerdo
        WriteToReg
        Delay (ENXAG)        'Dele de 2 segundo
        Next
    
            
        Registers(8)= True   'Abrir Valvola 2 do Amaciante
        WriteToReg
        Delay(60000)         'PAUSA DE 1 SEGUNDO
        Registers(8) = False 'Desligar Valvola 2 do Amaciante
        WriteToReg
                
        For i = 0 To  150    'Com 21 minutos
        Registers(1) = True  'Ligar Motor direito
        WriteToReg
        Delay (ENXAG)        'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay(ENXAG)         'Delei de 2 Mile Segundos
        Registers(2) = True  'Ligar Motor esquerdo
        WriteToReg
        Delay (ENXAG)        'Delei de 2 Mile Segundos
        Registers(2) = False 'Desligar Motor esquerdo
        WriteToReg
        Delay (ENXAG)        'Dele de 2 segundo
        Next
            
        Registers(3) = False 'Desligar Motor do dreno Esperar água baixar
        Registers(1) = False 'Desligar Motor esquerdo para exaguar
        WriteToReg
        Dreno_2
End Sub
Private Sub Dreno_2()
        Timer1.Enabled = False 'Desligar  O Menu
        Timer2.Enabled = False 'Desligar Lavagem Normal
        Timer3.Enabled = False 'Desligar Enchimento
        Timer6.Enabled = False 'Desligar Lavangem Rapido
        Timer7.Enabled = False 'Desligar Lavangem Pesado
        Timer8.Enabled = False 'Desligar Lavangem Dia a Dia
        Timer9.Enabled = False 'Desligar Centrifugar
        AtualizarDisplay("DRENANDO 2", "AGUARDE....")
        For i = 0 To 35     '1 iterações (representando 300 segundos, ou 5 minutos)
        Registers(3) = True 'Ligar Motor do dreno Esperar água baixar
        WriteToReg
        Delay(6000)
        Next
        
        For i = 0 To 35     'Aguardar 1 Minuto
        Registers(1) = True 'Ligar Motor Esquerdo
        WriteToReg
        Delay(6000)
        Next
          
        Registers(3) = False 'Desligar Motor do dreno
        Registers(1) = False 'Desligar Motor esquerdo
        WriteToReg
        Timer9.Enabled=True  'Ligar Timer9 centrifugar
End Sub

Sub Centrifugar
        Timer1.Enabled = False 'Desligar Menu
        Timer2.Enabled = False 'Desligar Lavagem Normal
        Timer3.Enabled = False 'Desligar Enchimento
        Timer6.Enabled = False 'Desligar Lavangem Rapido
        Timer7.Enabled = False 'Desligar Lavangem Pesado
        Timer8.Enabled = False 'Desligar Lavangem Dia a Dia
        
        AtualizarDisplay("CENTRIGUGAR", "AGUARDE....")
        For i = 0 To 40     'Com 11 minutos
        Registers(3) = True 'Ligar Motor do dreno Esperar água baixar
        WriteToReg
        Delay(6000)
        Next
                
        For i = 0 To 80     'Com 11 minutos
        Registers(1) = True 'Ligar Motor esquerdo para exaguar
        Registers(6) = False'Ligar o Led endicador de nival
        WriteToReg
        Delay(6000)
        Next
            
        Registers(4) = False 'Desligar Valvola
        Registers(1) = False 'Desligar Motor direito
        Registers(2) = False 'Desligar Motor Esquenrdo
        Registers(3) = False 'Desligar Motor dreno
        Registers(6) = True  'Ligar o Led endicador de nival
        WriteToReg
                
        For  I = 0 To 5     'LIGAR O BUZZER DEPOIS DE TERMINA A LAVANGEM
        Registers(5) = True 'Ligar O Buzzer
        WriteToReg
        Delay(100)
        Registers(5) = False'Desligar O Buzzer
        WriteToReg
        Delay(100)
        Next
        AtualizarDisplay("TERMINANDO", "A TE LOGO")
        Delay(6000)  'Aguandar 1 minito
      
        Timer2.Enabled = False 'Desligar Lavangem normal
        Timer3.Enabled = False 'Desligar Enchimento
        Timer4.Enabled = False 'Desligar Molho
        Timer6.Enabled = False 'Desligar Lavangem Rapido
        Timer7.Enabled = False 'Desligar Lavangem Dia a Dia
        Timer8.Enabled = False 'Desligar Lavagem Pesado
        Timer9.Enabled = False 'Desligar Centrifugar
        Timer1.Enabled = True  'Voltar para o menu
End Sub

Private Sub Molho_Longo()' Botão  Start  Valvola Molho
        Timer1.Enabled = False 'Menu
        Timer2.Enabled = False 'Lavagem Normal
        Timer3.Enabled = False 'Enchimento
        Timer6.Enabled = False 'Lavangem Rapido
        Timer7.Enabled = False 'Lavangem Pesado
        Timer8.Enabled = False 'Lavangem Dia a Dia
        Timer9.Enabled = False 'Lavangem Dia a Dia
        AtualizarDisplay("MOLHO LONGO", "AGUARDE....")
        Delay(300)
        Registers(4) = True     'Abrir Valvola de Água
        WriteToReg
        
        If Nivel_detectado Then
        Registers(4) = False    'Fechar Valvola de água
        Registers(6) = False    'Ligar o Led endicador de nival
        WriteToReg
        MOLHO
        End If
End Sub

Private Sub MOLHO()
        For i = 0 To 150        '150 PASSOS
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Dele de 2 segundo
        Next
            
        Delay(10000)  'PAUSA DE 1 SEGUNDO
                    
        For i = 0 To 150        '150 PASSOS
        Registers(1) = True     'Ligar Motor direito
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(1) = False    'Desligar Motor direito
        WriteToReg
        Delay(Lavangem_Normal)  'Delei de 2 Mile Segundos
        Registers(2) = True     'Ligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Delei de 2 Mile Segundos
        Registers(2) = False    'Desligar Motor esquerdo
        WriteToReg
        Delay (Lavangem_Normal) 'Dele de 2 segundo
        Next
        For I = 0 To 6000
        Delay(5000)
        Next
        Timer4.Enabled = False 'Desligar funcão  Molho
        Lavando_Normal
End Sub

'Write To Registers
Private Sub WriteToReg()
        STCP.DigitalWrite(False)
        Dim i As Int = 0
        Do While i <= Relays - 1
        SHCP.DigitalWrite(False)
        DS.DigitalWrite(Registers(i))
        SHCP.DigitalWrite(True)
        i = i + 1
        Loop
        STCP.DigitalWrite(True)
End Sub

'Clear All Registers
Private Sub ClearAllReg()
        Dim i As Int = Relays - 1
        Do While i >= 0
        Registers(i) = False 'True = NO
        i = i - 1
        WriteToReg
        Loop
End Sub

Basic Operation
Initialization
Turn on the machine:
Press the on/off button. The machine will start and the display will show "MACHINE ON".
The sensor check and menu timers will activate.
Menu Navigation
Using the Encoder:

Rotate the encoder to navigate through the menu options.
Menu options include water level selection and wash program.
Water Level Selection:

Level 1: "LEVEL 1 AG" - Low
Level 2: "LEVEL 2 AG" - Medium
Level 3: "LEVEL 3 AG" - High
Wash Program Selection:

Normal Program: "PROGRAM: NORMAL"
Quick Program: "PROGRAM: FAST"
Day by Day Program: "PROGRAM: DAY BY DAY"
Heavy Program: "PROGRAM: HEAVY"
Rinse: "PROGRAM: RINSE"
Spin: "PROGRAM: SPIN"
Long Sauce: "PROGRAM: LONG SAUCE"
Running a Wash Program
Start Normal Wash:

Select "PROGRAM: NORMAL" and press the Start button.
The water valve will open until the desired water level is reached.
The motor will begin to operate alternating between left and right movements.
Start Quick Wash:

Select "PROGRAM: FAST" and press the Start button.
Similar to the normal program, but with reduced operating times.
Start Day by Day Wash:

Select "PROGRAM: DAY BY DAY" and press the Start button.
Similar to the normal program, but with operating times adjusted for everyday clothes.
Start Heavy Wash:

Select "PROGRAM: HEAVY" and press the Start button.
Similar to the normal program, but with longer operating times and additional pauses.
Other Functions
Rinse off:

Select "PROGRAM: RINSE" and press the Start button.
The machine will perform a fill and drain cycle to rinse the clothes.
Centrifuge:

Select "PROGRAM: SPIN" and press the Start button.
The machine will spin the clothes to remove excess water.
Long Sauce:

Select "PROGRAM: LONG SAUCE" and press the Start button.
The machine will soak clothes for an extended period of time before starting to wash.

Technical details
Timer Functions
Timer1 (Menu): Controls menu navigation and selection.
Timer2 (Star_lavagem_Normal): Starts the normal washing program.
Timer3 (Filling): Control the filling of the machine.
Timer4 (Long_Sauce): Controls the long sauce.
Timer5 (Check_Sensor): Checks the water level.
Timer6 (Star_lavagem_Rapido): Starts the quick wash program.
Timer7 (Star_lavagem_Dia_Dia): Starts the washing program day by day.
Timer8 (Star_lavagem_Pesado): Starts the heavy wash program.
Timer9 (Spin): Starts centrifugation.
Pins and Relays
DS, STCP, SHCP: Pins for controlling the shift registers.
On_ Off, Start, EncoderPinA, EncoderPinB: Pins for input control (buttons and encoder).
Relays: Control water valves, motors and other actuators.
Display control
UpdateDisplay: Method to update the information displayed on the SSD1306 screen.
Maintenance and Troubleshooting
Check connections: Make sure all pins and connectors are securely connected.
Reset the machine: Turn the machine off and on again if it does not respond to commands.
Monitor Logs: Use a serial interface to monitor logs and identify potential problems.
Conclusion
This manual covers the main operations and functions of the washing machine. By following these instructions, you will be able to use a machine efficiently and solve possible problems. For more technical details, see the source code and documentation of the components used.


[MÍDIA=youtube] FYjHMPBRNg8[/MÍDIA]
 

Attachments

  • esquema_maquina.jpg
    215.7 KB · Views: 649
  • 20240309_072708.jpg
    127.3 KB · Views: 114
  • 20240313_140515.jpg
    77.9 KB · Views: 107
  • Manual.txt
    3.7 KB · Views: 75
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…