Advertisement
RuiViana

Dimmer

Jun 8th, 2016
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.17 KB | None | 0 0
  1. /*
  2.    Nome do Projeto:  ALX
  3.    Nome do Aquivo:   Dimmer_ALX2.ino
  4.    link:
  5.    Dependencias:     Wire.h
  6.                      LiquidCrystal_I2C.h
  7.                      Thread.h
  8.                      ThreadController.h
  9.    MCU:              ATmega
  10.    Board:            Arduino Uno/Mega/Mini
  11.    Compilador        N/A
  12.    IDE:              Arduino IDE 1.6.6
  13.    Hardware:         Arduino UNO/MEGA/Mini
  14.    Escrito por:      Rui Viana
  15.    Modificado por:   N/A
  16.    Data:             08/06/2016
  17.    Uso:              Didático
  18.    Desenhos          Fase_Detec2.jpg
  19.    Copyright @       N/A
  20.    
  21.    Este programa é software livre;
  22.    e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
  23.    mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.
  24.  
  25.    REVISIONS: (latest entry first)  
  26.    08/06/2016   -   Dimmer_ALX2.ino - First release
  27.  
  28.   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  29.    Descrição:  
  30.    
  31.    Este código
  32. */
  33.   // Programa: Dimmer. Acionamento de um dimmer com Triac e potenciometro
  34.  
  35.   #include <Wire.h>
  36.   #include <LiquidCrystal_I2C.h>
  37.   LiquidCrystal_I2C lcd(0x38,  2, 1, 0, 7, 6, 5, 4, 3, POSITIVE);  // Set the LCD I2C address
  38.  
  39.   #include <Thread.h>                     // Bibioteca das threads
  40.   #include <ThreadController.h>           // Bibioteca de controle das threads  
  41.   Thread Calculo;                         // Define thread de calculo do trigger
  42.   Thread Display;                         // Define thread de display no LCD
  43.   Thread Temperatura;                     // Define thread de temperatura do forno
  44.  
  45.   #define Triac 3                         // Disparo do Triac: pino D3
  46.   #define Pot A0                          // Potenciometro: pino A4
  47.   #define ZeroC 2                         // Detetor de zero: pino D2
  48.   int t;                                  // Calculo do tempo de trigger
  49.   int time;                               // Tempo entre a detecao de zero e o acionamento do triac
  50.   //----------------------------------  
  51.   void setup()                            // Inicializa os pinos como entrada ou saida
  52.   {
  53.     lcd.begin(16,2);                      // Inicializa LCD
  54.     //Serial.begin(9600);
  55.     pinMode(Triac, OUTPUT);               // Pino de trigger do Triac como saida
  56.     pinMode(Pot, INPUT);                  // Pino do potenciometro como entrada anlogica
  57.     pinMode(ZeroC, INPUT);                // Pino do zerocross como entrada
  58.     attachInterrupt(0, Dimmer, FALLING);  // Associa a borda de descida do detetor de zero com a funcao dimmer(), que aciona o triac
  59.  
  60.     Calculo.setInterval(1);               // Thread de 1 ms para calcular o tempo de trigger
  61.     Calculo.onRun(Le_Pot);                // Executa função de ler o valor do pot e calcular o tempo de trigger
  62.     Display.setInterval(1);               // Thread de 1 ms para o display
  63.     Display.onRun(Escreve);               // Executa função de escreve no LCD
  64.     Temperatura.setInterval(1);           // Thread de 1 ms para medira a temperatura
  65.     Temperatura.onRun(Aquecimento);       // Executa função de medir o aquecimento do forno
  66.   }
  67.   //----------------------------------
  68.   void loop()
  69.   {
  70.     if(Calculo.shouldRun())               // Se deve executar a thread Calculo
  71.       Calculo.run();                      // Execute a thread Calculo
  72.  
  73.     if(Display.shouldRun())               // Se deve executar a thread Display
  74.       Display.run();                      // Execute a thread Display  
  75.  
  76.     if(Temperatura.shouldRun())           // Se deve executar a thread Temperatura
  77.       Temperatura.run();                  // Execute a thread Temperatura        
  78.   }
  79.   //----------------------------------
  80.   void Le_Pot()
  81.   {  
  82.     t = analogRead(Pot) * 7.1652 + 1;      // Le o valor do potenciometro (de 0 a 1023) e converte para o delay de acionamento do triac (de 1 a 7331us)
  83.     //t = map(analogRead(Pot),0,1023,0,7331);
  84.     noInterrupts();                        // Atualiza a variavel "time", desabilitando as interrupcoes para que nao haja conflito no acesso.
  85.     time = t;                              // Define time igual ao valor t
  86.     interrupts();                          // Habilita interrupcoes
  87.   }
  88.   //----------------------------------
  89.   void Dimmer()                           // passou por Zero
  90.   {  
  91.     delayMicroseconds(time);              // Espera ate o momento correto (variavel "time") e aciona o triac
  92.     digitalWrite(Triac, HIGH);            // Dispara o triac
  93.  
  94.     delayMicroseconds(200);               // Gera a borda de descida do pulso do triac com largura de 200us
  95.     digitalWrite(Triac, LOW);             // Desativa o disparo
  96.   }
  97.   //----------------------------------
  98.   void Escreve()                          // Escreve no display
  99.   {  
  100.     //lcd.clear();
  101.     lcd.setCursor(0,0);                   // Linha 0 posicao 0 do LCD
  102.     lcd.print("Pot ");                    // imprime
  103.     lcd.print(t);                         // imprime
  104.     lcd.print("    ");                    // imprime
  105.   }
  106.  //----------------------------------
  107.   void Aquecimento()                      // Mede o valor da temperatura no forno
  108.   {  
  109.      
  110.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement