Placuta cu cei 2 senzori LM335 are schema:
in care IC1 este senzorul de interior, care va fi conectat la A2 (pinul fizic 3 al lui ATtiny85), iar IC2 este senzorul de exterior, care va fi conectat la A3 (pinul fizic 2 al lui ATtiny85).
Schema de conectare a lui ATtiny85 la afisaj este cea din articolul anterior:
Montajul de test arata asa:
si are in partea din stanga jos un breadboad micut pe care se afla placa Arduino Nano, folosita la programare, si ATtiny85,
acolo se afla si placuta adaptoare pentru cei 2 senzori, apoi este bradboard-ul mai mare pe care se gaseste registrul de deplasare 74HC595, mai sus se vede transformatorul de retea cu stabilizatorul de tensiune cu LM317 reglat la 5V si afisajul alfanumeric..
De retinut: deoarece la senzorii analogici se compara tensiunea de pe intrare la care sunt conectati cu tensiunea de referinta si daca aceasta este tensiunea de 5V, la alimentarea din USB-ul unui calculator, din cauza consumului mare, citirile pot fi eronate, de aceea trebuie folosita o tensiune stabilizata de 5V.
- alimentare cu tensiune de 5V stabilizata:
- alimentare combinata (USB si stabilizator):
- alimentare doar din USB:
Ca si la testele anterioare cu DHT11 si DS18B20, la compilare pentru ATtiny85 la 1MHz, primeam un mesaj de eroare:
Dupa schimbarea placii la Arduino Uno, am constatat ca sketch-urile sunt mai mari de 4k si... am gasit pe net ca trebuie actualizat WinAVR-ul folosit de programul Arduino IDE... (toti pasii ce trebuie urmati sunt prezentati pe forumul Arduino in discutia http://forum.arduino.cc/index.php/topic,60649.0.html, eu nu am mai facut schimbari in fisierul avrdude.conf ).
Dupa aceasta, compilarea este fara erori:
Sketch-ul scris de mine este:
/*
this sketch is adapted by niq_ro from
http://www.tehnic.go.ro
http://www.niqro.3x.ro
http://nicuflorica.blogspot.ro/
http://arduinotehniq.blogspot.com/
for made a dual thermometer with ATtiny85 as Arduino..
* 3-pin Arduino interface for HD44780 LCDs via 74HC595 Shift Register
* by Rowan Simms code@rowansimms.com
* License: Creative Commons - Attribution.
* Full Documentation and Description: http://rowansimms.com/article.php/lcd-hookup-in-seconds
*
* This sketch allows Arduinos to use a shift register to control an LCD, allowing
* a reduction in pins it requires from 6 to 3 while still retaining full control
* including backlight on/off.
* This requires the use of the LiquidCrystal595 library
* available at: http://code.google.com/p/arduino-lcd-3pin/
*/
#include <LiquidCrystal595.h> // include the library
LiquidCrystal595 lcd(0,1,2); // datapin, latchpin, clockpin
byte home13[8] = {
B00011,
B00100,
B01000,
B11111,
B01000,
B01000,
B01111,
};
byte home23[8] = {
B00000,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home33[8] = {
B00011,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home03[8] = {
B11111,
B00000,
B00000,
B11111,
B00000,
B00000,
B11111,
};
byte grad[8] = {
B01110,
B10001,
B10001,
B01110,
B00000,
B00000,
B00000,
};
// variables
// variabile
int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A2; // output from first LM335 is put at analog input no.0
int temperaturePin2 = A3; // output from second LM335 is put at analog input no.1
// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1
void setup() {
lcd.begin(16,2); // 16 characters, 2 rows
lcd.createChar(0, grad);
lcd.createChar(1, home13);
lcd.createChar(2, home23);
lcd.createChar(3, home33);
lcd.createChar(4, home03);
lcd.clear(); // clear the screen
lcd.setCursor(2, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("ATtiny85 dual"); // print a text
lcd.setCursor(1, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("thermometer 1.0"); // print a text
delay (3000);
lcd.clear(); // clear the screen
}
void loop() {
// Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screen
for (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -1.5 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature
lcd.setCursor(2, 0);
lcd.write(byte(1));
lcd.write(byte(4));
lcd.write(byte(3));
lcd.print(":");
// lcd.print("t1=");
if (t12<10) lcd.print(" ");
if (t12>0.0) lcd.print("+");
lcd.print(t12,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
lcd.setCursor(2, 1);
lcd.print("ext:");
// lcd.print("t2=");
if (t22<10) lcd.print(" ");
if (t22>0.0) lcd.print("+");
lcd.print(t22,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
delay(500);
lcd.setCursor(4, 0);
lcd.write(byte(2));
}
Deoarece am fost bucuros ca mi-a iesit treaba, am facut la inceput 2 filme, nedandu-mi seama, ca temperaturile sunt inversate:- termometru dublu cu ATTiny85 folosind senzori LM335
- termometru dublu cu ATTiny85 folosind senzori LM335 (2)
27.01.2015
Pastrand modul de desenare a cablajului din articolul de la Attiny_LCD_595 Board: LCD controlled by ATtiny85… stand-alone am desenat cablajul pentru schema de mai sus, utilizand programul Eagle PCB Software si, din graba, l-am gresit, ca sa fie functional, trebuie modificat astfel:
Am invatat foarte multe din exemplele prezentate. Ma puteti ajuta cu un exemplu de termostat diferential cu 2 senzori DS18B20 si afisaj LCD 16x2.
RăspundețiȘtergerescrie ce vrei sa faca mai clar... ce valori, etc
Ștergerevezi ca termometru cu DS18B20 materialul de la https://nicuflorica.blogspot.ro/2015/01/attiny85-si-senzori-de-temperatura.html
Ștergere