Autor Tema: Sistema automatizado de alumbrado con LDR  (Leído 1600 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kurt Cobain

  • PIC10
  • *
  • Mensajes: 29
Sistema automatizado de alumbrado con LDR
« en: 04 de Mayo de 2013, 16:40:44 »
Hola a todos, estoy desarrollando un proyecto de sistema de alumbrado con un LDR y con el PIC16F877A el cual a menos luz detecte el LDR el foco encenderá con mayor intensidad (No sé si me doy a entender)...... bueno el problema que tengo es en la parte del circuito ya que no estoy seguro de estarlo conectando bien, estoy utilizando un MOC (el cual tiene detector de cruce por cero? o con el triac lo estoy detectando? esa es una de mis dudas).

Bueno creé el código en c con el convertidor analógico digital para la entrada del LDR y también un PWM para regular (el cual tengo otra duda de este para la señal alterna por unos dicen que si se puede y otros que no) y estoy manejando los valores correctos para los 60hz? he leído bastante en lo cual supe que cada ciclo de la corriente alterna es de 1/60 = 0.016ms lo que dura un ciclo completo, media onda serà 0.008ms; de donde el 0.008 es el 100% para mantener el brillo total, 0.004 debe ser el 50%, 0.002 el 25% etc, la intensidad de la luz sera proporcional al tiempo que lo mantenga activo.

Son bastantes dudas pero realmente estoy apasionado en este proyecto, seguiré buscando e intentando hasta obtener los resultados pero cualquier ayuda será muy bienvenida  

Bueno dejare adjuntados el código y la simulación con una imagen del diagrama:

#include <16f877a.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP                
#use delay (clock=4000000)    

void main(void)
{

  int16 pwm=0;
  set_tris_c(0b00000000);
 
   setup_port_a( ALL_ANALOG );            
   setup_adc( ADC_CLOCK_INTERNAL );      
   set_adc_channel( 0 );
 
output_low(PIN_C2);    

setup_ccp1(CCP_PWM);    

setup_timer_2(T2_DIV_BY_16, 1023, 1);  // 16.3ms para los 60hz    
set_pwm1_duty(203);                    
set_pwm2_duty(820);                    

 while(TRUE){
 
 pwm= Read_ADC()/2;
 
 set_pwm1_duty(pwm);
 
}}
« Última modificación: 04 de Mayo de 2013, 21:51:36 por Kurt Cobain »