Se afișează postările cu eticheta masina. Afișați toate postările
Se afișează postările cu eticheta masina. Afișați toate postările

luni, 12 mai 2014

Circuit de schimbare polaritate alimentare motor de curent continuu

   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:
   Am "filmat" si functionarea simulata la prima schema, realizand filmuletul control sens rotatie motor de cc cu 2 butoane

30.06.2014
   Pornind de la o intrebare daca se poate folosi doar un releu pentru a face ce am prezentat mai inainte, am gandit o schema simpla:
la care am facut si o simulare in programul Livewire, numit control sens rotatia la motor de curent continuu doar cu un releu
   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).

miercuri, 16 aprilie 2014

Indicator date mediu pentru masina (3)

   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.
   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...