Dziś przedstawię jak wyświetlić informacje z wbudowanego w moduł uruchomieniowy Gotronik, jednego z najpopularniejszych, czujnika DS18B20 na ekranie LCD zgodnym z HD44780.

Czego użyjemy:

Czujnik DS18B20

Czujnik DS18B20

Czujnik DS18B20 jest jednym z najpopularniejszych czujników temperatury dostępnych na rynku. Podłączenie, jak i obsługa są banalne. Jego zaletą jest możliwość pracy w trybie 1-Wire. Oznacza to, że czujnik może pracować jedynie z podłączoną linią danych i masą – nie potrzebna jest dodatkowa żyła zasilająca. Możliwe jest to dzięki zastosowaniu wbudowanego kondensatora, który ładując się w krótkich odstępach czasu, naprzemiennie z odczytem temperatury, zasila czujnik.

Jeśli chodzi o podłączenie, wystarczy że pin DQ podłączymy np. do pinu PC0. Jak pisałem wcześniej, zasilanie nie jest wymagane.

Biblioteki rozpakujmy do folderu: C:\WinAVR-20100110\avr\include\ds18b20

Kod źródłowy programu jest następujący:

/*
 * DS18B20.c
 *
 *  Created on: 3 sie 2015
 *      Author: Gotronik_1
 */

#include <avr/io.h>
#include <hd44780/hd44780.c>
#include <ds18b20/ds18b20.c>
#include <stdlib.h>

int main (void){
	LCD_Initalize();
	char bufor[100];
	uint8_t temperatura;
	while(1){
		LCD_GoTo(4,0);
		LCD_WriteText("DS18B20: ");
		temperatura=ds18b20_gettemp();
		itoa(temperatura, bufor, 10);
		LCD_GoTo(6,1);
		LCD_WriteText(bufor);
		LCD_GoTo(8,1);
		LCD_WriteData(223);
		LCD_GoTo(9,1);
		LCD_WriteText("C");
	}
}

A oto efekt działania programu:

 

Efekt działania programu

Efekt działania programu

W innym artykule uruchomiliśmy moduł czujnika temperatury i wilgotności DHT11. Możemy pokusić się o małe porównanie wartości przez nie odczytywanych.

Moim pomysłem było wykorzystanie przycisków, aby przełączać się pomiędzy odczytami z DHT11 i DS18B20.

Użyłem przycisków nr 7 i nr 6, podłączonych do pinów odpowiednio PA7 i PA6. Następnie, użyłem instrukcji switch-case,  ze zmienną sterującą, która pozwoliła przełączać się między „ekranami”.

 

 /*
 * main.c
 *
 *  Created on: 3 sie 2015
 *      Author: Gotronik_1
 */

#include <avr/io.h>
#include <stdlib.h>
#include <hd44780/hd44780.c>
#include <dht11/dht11.c>
#include <ds18b20/ds18b20.c>

int main (void){
	PORTA = 192; //włączenie rezystorów podciągających dla przycisków
	uint8_t wybor=0;
	uint8_t temperatura=0;
	uint8_t wilgotnosc=0;
	char bufor[100];
	LCD_Initalize();
	while(1){
		if (!(PINA & 128)){
							LCD_Clear();
							wybor = 1;
						  }
		if (!(PINA & 64)) {
							LCD_Clear();
							wybor = 2;
						  }

			switch(wybor){
				case 1: {
							LCD_GoTo(0,0);
							LCD_WriteText("Temp:");
							temperatura=dht11_gettemperature();
							itoa(temperatura,bufor,10); //funkcja zamieniajaca typ integer na char
							LCD_GoTo(6,0);
							LCD_WriteText(bufor);
							LCD_GoTo(8,0);
							LCD_WriteData(223); //instrukcja wyświetlająca znak stopnia
							LCD_GoTo(9,0);
							LCD_WriteText("C");
							LCD_GoTo(0,1);
							LCD_WriteText("Wilg:");
							wilgotnosc=dht11_gethumidity();
							itoa(wilgotnosc,bufor,10);
							LCD_GoTo(6,1);
							LCD_WriteText(bufor);
							LCD_GoTo(8,1);
							LCD_WriteText("%");
							break;
				}
				case 2: {

							LCD_GoTo(4,0);
							LCD_WriteText("DS18B20: ");
							temperatura=ds18b20_gettemp();
							itoa(temperatura, bufor, 10);
							LCD_GoTo(6,1);
							LCD_WriteText(bufor);
							LCD_GoTo(8,1);
							LCD_WriteData(223);
							LCD_GoTo(9,1);
							LCD_WriteText("C");
							break;
				}
			}
	}

}

Jak widać, wszystko działa zgodnie z naszymi oczekiwaniami 🙂

IMG_7388

IMG_7389

Dodaj komentarz