- temperatura exterioara, masura cu un senzor DS18B20
- temperatura si umiditate interior masina, masurate cu senzorul DHT11
- tensiunea de pe baterie (acumulator), prin intermediul unui divizor rezistiv.
Partea descriptiva am prezentat-o in articolul Indicator date mediu pentru masina, iar partea cu teste cu Arduino in articolul Indicator date mediu pentru masina (2), dar ideea a fost sa pun pe masina un montaj independent, asa ca am desenat cu ajutorul programului Eagle PCB Software o schema, dupa care am desenat si cablajul.
Cablajul a fost realizat de Cristi din Satu Mare, prin metoda transferului de tonner de la o imprimanta laser.
Am dat gauri in cablaj si m-am apucat de plantat si lipit piesele:
Dupa ce am pus minimul de piese necesare, am conectat interfata USB si am alimentat si incarcat sketch-ul:
Neavand intrarile conectate, apar mesaje ciudate la tensiune si temperaturi, dar e bine din punct de vedere al functionarii, dupa cum vedeti si in filmuletul indicator mediu - masina (II)
A urmat trecelea la alimentarea dintr-o sursa stabilizata reglabila cu tensiunea de 14,5V (valoarea maxima de pe masina) si am lasat vreo 8 ore si nu s-a incalzit regulatorul de tensiune de tip 7805, iar prezentarea experimentului este in filmuletul indicator mediu - masina (III)
Alimentatorul reglabil folosit de mine a fost prezentat in articolul LM317 si este realizat dupa o schema publicata in Almanahul Tehnium din 1990, iar despre partea de stabilizare de 5V folosita pe placa puteti citi in articolul 78xx.
Sketch-ul trebuie modificat un pic fata de cel prezentat in articolul Indicator date mediu pentru masina (2) deoarece sunt folositi alti pini pentru afisaj:
// http://nicuflorica.blogspot.ro/2014/04/indicator-date-mediu-pentru-masina-3.html
// original sketch by niq_ro
#include <LiquidCrystal.h>
// folosesc libraria pentru afisaje LCD simple
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// indic modul de legare, vezi mai jos:
/* -------------------
| LCD | Arduino |
-------------------
LCD RS pin to digital pin 7 | RS | D7 |
LCD Enable pin to digital pin 8 | E | D8 |
LCD D4 pin to digital pin 9 | D4 | D9 |
LCD D5 pin to digital pin 10 | D5 | D10 |
LCD D6 pin to digital pin 11 | D6 | D11 |
LCD D7 pin to digital pin 12 | D7 | D12 |
LCD R/W pin to ground | R/W | GND |
-------------------
*/
// http://arduino.cc/en/Reference/LiquidCrystalCreateChar
byte grad[8] = {
B01100,
B10010,
B10010,
B01100,
B00000,
B00000,
B00000,
};
// variables
float R1, R2, R3; // rezsistors in voltage divisor
float k1; // adjustment for divisor
float u1, u11, u12; // for voltage
int ti; // temperature inside of car;
// data
int VPin = A0; // voltage pin
int DHTPin = A1; // data pin from DHT11
//int DSPin = A2; //
// for DHT11 sensor
#include "DHT.h"
#define DHTPIN A1 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 10 on the Arduino
#define ONE_WIRE_BUS A2
#define TEMPERATURE_PRECISION 9
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// arrays to hold device addresses
DeviceAddress outsideThermometer;
void setup() {
R1 = 4.7; // R1 = 4k7
R2 = 10; // R2 = 10k
R3 = 4.7; // R3 = 4k7
k1 = 1/1.033;
lcd.createChar(0, grad);
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
// initialing the DHT11 sensor;
dht.begin();
lcd.clear(); // clear the screen
lcd.setCursor(1, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("indicator bord"); // print a text
lcd.setCursor(2, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("1.0 by niq_ro"); // print a text
delay (2000);
lcd.clear(); // clear the screen
// Start up the DS18B20 sensor
sensors.begin();
// adress for ds sensor
// DeviceAddress outsideThermometer = { 0x28, 0xAC, 0x7A, 0xD4, 0x04, 0x00, 0x00, 0x7E };
// DeviceAddress outsideThermometer = { 0x28, 0xAC, 0x7A, 0xD4, 0x4, 0x0, 0x0, 0x7E };
// set the resolution to 9..12 bit
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
} // END void setup
void loop(){
u1 = analogRead(VPin);
u11 = k1*5.0*u1/1023*(R1+R2+R3)/R1;
u12 = u11 + 0.05;
//u12=11.4; // for test
// u12=7.5; //for test;
if (u12<10.0)
{
lcd.setCursor(12, 0);
lcd.print(u12,1);
lcd.print("V");
delay(500);
lcd.setCursor(12, 0);
lcd.print(" ");
}
else
{
lcd.setCursor(11, 0);
lcd.print(u12,1);
lcd.print("V");
delay(500);
}
// DHT11 part
int h = dht.readHumidity();
int ti = dht.readTemperature();
lcd.setCursor(0, 1);
lcd.print("int:");
//ti=0; // for test;
//ti=7; // for test;
//ti=29; // for test;
if (ti<1) {
lcd.setCursor(5, 1);
lcd.print(" 0");
lcd.write(byte(0));
lcd.print("C");
delay(500);
lcd.setCursor(5, 1);
lcd.print(" ");
}
else
if (ti>=9) {
lcd.setCursor(4, 1);
lcd.print("+");
lcd.print(ti);
lcd.write(byte(0));
lcd.print("C");
}
else
//if (ti>=1 || ti<10)
{
lcd.setCursor(5, 1);
lcd.print("+");
lcd.print(ti);
lcd.write(byte(0));
lcd.print("C");
}
lcd.setCursor(11, 1);
lcd.print(h);
lcd.print("%um");
//
DeviceAddress outsideThermometer = { 0x28, 0xAC, 0x7A, 0xD4, 0x4, 0x0, 0x0, 0x7E };
sensors.requestTemperatures();
float te = sensors.getTempC(outsideThermometer);
// printTemperature(DeviceAddress outsideThermometer);
delay(300);
//te=-24;
//te=-2;
//te=-0.4;
// te=0;
//te=0.3;
//te=5;
//te=17;
//te=17.6;
lcd.setCursor(0, 0);
lcd.print("ext:");
if (te<-10) {
lcd.setCursor(4, 0);
lcd.print(te,0);
lcd.write(byte(0));
lcd.print("C ");
}
else
if (te>-10 || te<0) {
lcd.setCursor(5, 0);
lcd.print(te,0);
lcd.write(byte(0));
lcd.print("C ");
}
else
if (te=0) {
lcd.setCursor(5, 0);
lcd.print("=0");
lcd.write(byte(0));
lcd.print("C ");
}
if (te>0)
{
lcd.setCursor(5, 0);
lcd.print("+");
lcd.print(te,0);
lcd.write(byte(0));
lcd.print("C ");
}
if (te>=10) {
lcd.setCursor(4, 0);
lcd.print("+");
lcd.print(te,0);
lcd.write(byte(0));
lcd.print("C ");
}
}
Am pus si rezistentele si senzorii si, am costatat ca noul senzor DHT11 consuma peste 1A, undeva la 1,2A.. si se incinge rau LM7805... l-am deconectat si am pus altu' si acum e ok... consumul montajului este de aproximativ 30mA..
Ce am testat arata ca in filmuletul indicator mediu - masina (IV)
La un consum exagerat (peste 1A) nu au avut nicio sansa stabilizatoarele de tensiune de pe placile Arduino la testele anterioare...
Intrebare: nu puteati conecta pe acelasi port si DS18b20 si DHT11?
RăspundețiȘtergerePini aveti liberi, de dragul artei......
salut ! ma intereseaza un montaj pentru a incarca 4 acumulatori de telefon de 3,7 v legati in serie , acumulatori care ulterior vor alimenta un incarcator de masina cu iesire de 5,1 v pe usb . poate fi ceva simplu sau mai complex cu indicator de stare , blocare alimentare cand acumulatorii sunt incarcati , etc. ce zici ?
RăspundețiȘtergeresalut! se pot incarca si in serie, dar cred ca mai bine se face independent, pentru a monitoriza pe fiecare in parte... se pot pune si indicatii cu LED-uri sau cu afisaje... depinde de buget...
ȘtergereSall ! Ma interesaza un indicator mediu de masina dar care sa afiseze temperatura int/exterior , ceasul si data si la ce pret ar ajunge. Multumesc
RăspundețiȘtergeretinand cont ca-i mai trebuie un modul de ceas.. ajunge la 100 lei
Ștergeree ok
RăspundețiȘtergereA-ti putea sa-mi face si mie unul pe albastru ca cel prezentat, iar daca se poate a-si vre ca legatura diplay placa sa fie cu fire (10 cm) ar fi suficient, nu mai daca se poate .
Multumesc
se poate... trebuie sa discutam pe mail detalii.. astept sa ma contactati pe nicu.florica@gmail.com
RăspundețiȘtergereok
RăspundețiȘtergereas dori un montaj pe led sau afisaj pentru indicarea incarcarea/descarcarea acumulatorului de la o motoreta pentr copii cat ma costa?
RăspundețiȘtergerecred ca ar merge ceva mai simplu, cum e montajul prezenta la http://nicuflorica.blogspot.ro/2015/01/indicator-stare-acumulator-auto-cu-led.html
Ștergere