Hace un par de semanas quería configurar un circuito simple, que medirá la humedad y el nivel de temperatura en el aire. Cuando comienzo a investigar, no tengo ningún conocimiento sobre cómo configurar un circuito o cómo puedo incrustar un código en una unidad de microcontrolador y muchas preguntas similares.
Entonces, a continuación explicaré mi pequeño desafío paso a paso. Espero que te sea de utilidad. Antes de comenzar, debes volver a llenar tus tazas, puede que sea un poco largo.
Ahora aquí está mi lista de componentes;
Pic 16F877A (40 pines)
Cristal 4.0 MHz
Condensador 22pF
Condensador 100nJ (0.1uF)
Condensador 330nJ (0.3uF)
DHT11 (Sensor de humedad y temperatura)
Condensador 1uF (1 Micro F)
Condensador 10uF
max232
Conector DB2 RS232
Batería de 9V y amp; ajuste de batería
Configuración;
1) Breadboard
Algunos tipos de placas de prueba tienen una línea positiva o negativa a través de la tabla, por otro lado, las líneas eléctricas y de tierra de los otros tipos pueden dividirse en dos. Puedes resolver esto mirando las líneas rojas y azules en el tablero. Y en su parte interior, hay letras y números. Los números representan las columnas que están conectadas entre sí. Entonces, si conecto 5V a A-0, entonces B-0, C-0, D-0 y E-0 tienen el mismo voltaje.
2)7805Regulador(9Va5V)
Sileeslashojasdedatosdepic16f877aydht11,aprendistequefuncionancon5Vperonuestrabateríaesde9V.
Comopuedeverarriba,puederegularfácilmentesuvoltaje.Ahorapuedealimentarsu(s)terminal(s)positivo(s)desdelasalidadelregulador.
3)DHT11(Sensor)
Esteesunsensordetemperaturayhumedaddigitalbaratocon4pines.Aquíestálahojadedatosagradable(debidoamireputaciónnopudepublicarmásde2enlaces.Puedeencontrarlaengoogle,silaencuentra,miredosomáshojasdedatosporquealgunasdeellaspuedennoserlosuficientementeclaras),queesEsvitalentendercómofuncionadht11.Mientrastrabajaenproyectoselectrónicos,seencontraráconVcc,Vdd,Vss,Vee.Enunabreveexplicación,VccyVddsonalimentacióndetensiónpositiva,VeeyVsssonconexiónatierranegativa.AsíquepuedesasumirqueVccyVddsonigualesparalassiguientesimágenes.
4)Pic16F877A(40pin)
Estaesunaunidaddemicrocontroladormuyconocida,fácildeencontraryconsuficientesoporteparamiproyecto,poresoprefieroestafoto.Aquíestálahojadedatos:(desafortunadamentedebidoamireputaciónnopudepublicarmásde2enlaces.Lopuedesencontrarenlapáginawebdemikrochip)Lahojadedatostemuestraeldiagramadepines.Eneldiagrama,verálosnúmerosdel1al40.Enlasiguienteimagen,observeelpequeñopuntodehundimiento.Representalaprimeraetapa.
5) Cristal (Reloj)
Al igual que todos los procesadores, 877a también necesita reloj. Por favor, no considere el cristal Mhz del esquema, nuestro circuito funciona con cristal de cuarzo de 4MHz con capacitores de 22pF.
6)Max232
Bien,comodije,esteproyectovaamedirlatemperatura-humedadyenviarestosvaloresalacomputadora.Enestepunto,parapoderobtenerestosvaloresdenuestrocircuitoalaPC,tenemosqueconstruirunapartedecomunicaciónenserie.Notengamiedodelaspalabrasdetelecomunicaciones,conlaayudadelcableRS-232todoesrealmentesimple.Antesdeconectarelcabledebesconstruirelsiguienteesquema.Enlaimagen,veráquelosdoscablesTTLserialTXyRXseconectaránconlos25pines(TX)y26(RX)delaimagen.
El esquema anterior puede ser confuso, imagina que en la parte inferior de la imagen hay una tierra y cuatro nodos negros (que están cerca de la parte inferior) conectados a tierra.
Para ver el tutorial completo de proteus, puede encontrar mi video a continuación, pero no olvide que proteus es solo una simulación y no se garantiza que su hardware funcione correctamente. Especialmente la frecuencia puede causar algunos problemas. Aquí está
¡Mi video de YouTube!
En el código mikroC, configuro los leds de acuerdo con la humedad si es superior al 20%. El led superior se enciende, y si el nivel de humedad supera el 30%, el 2do led también se enciende.
CódigoMikroC;
sbitDataatRB0_bit;sbitDataDiratTRISB0_bit;unsignedshortk;unsignedshortT_Byte1,T_Byte2,RH_Byte1,RH_Byte2;chartemp[]="Temperature is 00.0 C";
char hum[] = "Humidity is 00.0 %";
void DHT11StartSignal(){
DataDir = 0;
Data = 0;
Delay_ms(25);
Data = 1;
Delay_us(30);
DataDir = 1;
}
unsigned short DHT11CheckResponse(){
k = 150;
while(!Data){
Delay_us(2);
k--;
if(k<1) return 0; // time out
}
k = 150;
while(Data){
Delay_us(2);
k--;
if(k<1) return 0; // time out
}
return 1;
}
unsigned short DHT11ReadByte(){
int i;
unsigned short num = 0;
DataDir = 1;
for (i=0; i<8; i++){
while(!Data);
Delay_us(40);
if(Data) num |= 1<<(7-i);
while(Data);
}
return num;
}
void main() {
UART1_Init(9600);
TRISC.RC0 = 0;
TRISC.RC1 = 0;
TRISC.RC2 = 0;
while(1){
DHT11StartSignal();
if(!DHT11CheckResponse()) continue;
RH_Byte1 = DHT11ReadByte();
RH_Byte2 = DHT11ReadByte();
T_Byte1 = DHT11ReadByte();
T_Byte2 = DHT11ReadByte();
DHT11ReadByte(); /* Checksum */
// Set temp
temp[15] = T_Byte1/10 + 48;
temp[16] = T_Byte1%10 + 48;
temp[18] = T_Byte2/10 + 48;
UART1_Write_Text(temp);
UART1_Write(10);
UART1_Write(13);
// Set hum
hum[12] = RH_Byte1/10 + 48;
hum[13] = RH_Byte1%10 + 48;
hum[15] = RH_Byte2/10 + 48;
UART1_Write_Text(hum);
UART1_Write(10);
UART1_Write(13);
UART1_Write(10);
UART1_Write(13);
PORTC.RC0 = (RH_Byte1) >= 20;
PORTC.RC1 = (RH_Byte1) >= 30;
PORTC.RC2 = (RH_Byte1) >= 40;
// Wait
Delay_ms(1000);
}
}
Y parte final:
Incrustar código en la MPU;