Motorasele de curent continuu, schimba sensul de rotatie in functie de "sensul" de alimentare, asa ca se pot folosi pentru a deschide/inchide geamurile, roti stanga/dreapta o oglinda, etc... am mai prezentat asta in articolul Modul comanda motorase de geam electric de pe site-ul www.tehnic.go.ro, respectiv pe www.niqro.3x.ro Circuitul clasic de conectare este:
Daca se apasa butonul fara retinere SW1, circuitul devine:
iar daca se apasa butonul fara retinere SW2, devine:
Practic, cele 3 stari sunt:
Am facut si un filmulet, numit circuit schimbare polaritate, in care nu este motoras pus, ci doar un aparat de masura si indicatorul de polaritate cu 2 LED-uri montate antiparalel si o rezistenta de limitare a curentului.
Daca consumul motorasului e mai mare decat cel suportat de contactele butoanelor fara retinere, se pot folosi relee si butoane fara retinere simple:
28.05.2014 Am gasit un programior pentru captura statica sau animata, care se numeste TinyTake, si, cu aceasta ocazie, am facut un filmulet cu functionarea simulata a circuitului de mai sus, numit control sens motor de curent continuu cu relee:
Schema are 3 stari: - motor oprit (pozitia din schema de mai sus); - motorul se roteste in sens trigonometric (butonul fara retinere SW1 apasat, care alimenteaza bobina releului);
- motorul se roteste in sensul acelor de ceasornic (butonul fara retinere SW2 apasat).
Dupa o mica pauza, am reluat partea cu indicatorul de date mediu pentru masina: - 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.
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 simpleLiquidCrystal 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/LiquidCrystalCreateCharbyte grad[8] = {
B01100,
B10010,
B10010,
B01100,
B00000,
B00000,
B00000,
};
// variables float R1, R2, R3; // rezsistors in voltage divisorfloat k1; // adjustment for divisorfloat u1, u11, u12; // for voltageint ti; // temperature inside of car;// dataint VPin = A0; // voltage pinint 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 addressesDeviceAddress outsideThermometer;
voidsetup() {
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 textdelay (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 setupvoidloop(){
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 partint 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(" ");
}
elseif (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 ");
}
elseif (te>-10 || te<0) {
lcd.setCursor(5, 0);
lcd.print(te,0);
lcd.write(byte(0));
lcd.print("C ");
}
elseif (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..