miercuri, 19 martie 2014

Indicator date mediu pentru masina

   Cand ne aflam in masina, este util sa stim ce temperatura este afara, cat este tenmperatura si ce umiditate este in masina, tensiunea bateriei, asa ca m-am gandit sa vizualizez datele pe un afisaj LCD cu 16 coloane si 2 randuri, sub forma:
   Pentru exterior m-am gandit la un senzor DS18B20 in carcasa protejata, ceva de genul:
deoarece domeniul de masura este -55..+1250C, arhisuficient in zona noastra.
   Pentru interior, m-am gandit la senzorul DHT11, mai putin precis care masoara temperatura in domeniul 0..+500C, cu eroare de +20C, iar umiditate in domeniul 20..90%, cu eroare de +5%.
   Deoarece nu cred ca as putea sofa sau sta intr-o masina in care temperatura e sub zero grade, o sa pun sa apara cu intermitenta un simbol de temperatura scazuta, eventual o sa apelez la un alt senzor DS18B20, de exemplu.
   Pentru a masura tensiunea bateriei o sa folosesc un divizor rezistiv, care sa poata masura pana la cca. 20V (acoperitor pentru tensiunile de pe masina):
   Eu am prezentat senzorul de temperatura DS18B20 (si verisorul lui MAX31820) in mai multe articole:

   De asemenea, senzorul de temperatura si umiditate DHT11 l-am prezentat in mai multe articole, dar cel mai bine vedeti informatiile de la Ministatie meteo cu senzorul DHT11 si.. Arduino.
   Partea de voltmetru o gasiti in articolele:
   Pentru a fi montat pe masina, o sa fac trecerea pe un cablaj indpendent cu un microcontroler ATmega328P-PU programat ca Arduino sau voi folosi un Arduino Pro Mini, cum am prezentat in articolul Transferarea unui proiect Arduino pe un cablaj
sau 
20.3.2014
   O schema de conectare ar putea fi:

   Dupa cum se observa, pentru primele teste o sa folosesc:
- o placa de dezvoltare Arduino;
- un regulator de tensiune pentru 5V,pentru alimentarea placii Arduino, afisajului si senzorilor;
- un senzor de temperatura DS18B20, pentru exterior;
- un senzor DHT11 pentru temperatura si umiditatea din interior;
- un divizorul rezistiv, pentru a putea masura tensiunea de pe baterie

21.03.2014
   Am realizat ca nu am nevoie de stabilizator, ca are placa Arduino, asa ca schema se simplifica:

duminică, 16 martie 2014

Controlul unor fisiere din calculator cu Arduino

   Cautand informatii pentru a putea controla fisiere din calculator cu Arduino, am gasit numele unui program numit Gobetwino... 
   Am dat de niste articole, inclusiv la Arduino pe site, deci va recomand studierea urmatoarelor:
- Using Gobetwino to Control Windows through Arduino
- Gobetwino: Arduino talking to Excel
- Fun with Gobetwino
- Get real-time data directly into your DNN portal!
- manual de utilizare Gobetwino 0.5
   Pentru moment ma intereseaza deschiderea unor filmulete cand apas niste butoane, asa pentru asta am facut teste, dupa cum se vede in filmuletele:
- Gobetwino & Arduino (1)
- Gobetwino & Arduino (2)
- Gobetwino & Arduino (3)
   Prima data trebuie sa vedem pe ce port se conecteaza placa Arduino (asta daca mutam Arduino pe mai multe calculatoate, cum fac eu):
   Deschidem programul Gobetwino manual sau automat (pus shortcut in Startup):
   Punem calea pentru comenzi, in cazul meu doua (FILM si FILM2):
   Putem modifica si portul folosit de program (trebuie sa fie acelasi cu cel folosit de Arduino)
   Am apasat pe butonul (tasta) care deschide cel de-al doilea film:
apoi pe butonul (tasta) care deschide primul film:
iar pe fereastra programului am comenzile primite si ce a executat el...
   Cele 2 butoane fara retinere (taste) sunt conectate la D2, respectiv D3 catre masa...
   Sketch-ul folosit de mine:
/*
 http://electronics.divinechildhighschool.org/Home/Arduino-Lessons/using-gobetwino-to-control-windows-through-arduino
 http://nicuflorica.blogspot.ro/2014/03/controlul-unor-fisiere-din-calculator.html 

 Reads a digital input on pin 2 or 3, prints the result to the serial monitor to control Gobetwino 
 This example code is in the public domain.
 */

int pushButton = 2;  // a pushbutton is attached digital pin2
int pushButton2 = 3; // a pushbutton is attached digital pin3

// the setup routine runs once when you press reset:
void setup() {
 // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
// make the pushbutton's pins an inputs:
  pinMode(pushButton, INPUT);
  pinMode(pushButton2, INPUT);

// pushbuttons are put in HIGH sofware  
digitalWrite(pushButton, HIGH);
digitalWrite(pushButton2, HIGH);
}

// the loop routine runs over and over again forever:
void loop() {
// pushbuttons are put in HIGH sofware  
digitalWrite(pushButton, HIGH);
digitalWrite(pushButton2, HIGH);
  // read the input pin:
  if (digitalRead(pushButton) == LOW)  
  {
  Serial.print("#S|FILM|[");
   Serial.println("]#");
   delay(10000);
//  Serial.println("---------------");
  }

if (digitalRead(pushButton2) == LOW)  
  {
  Serial.print("#S|FILM2|[");
   Serial.println("]#");
   delay(10000);
//  Serial.println("---------------");
  }

  delay(1000);        // delay in between reads for stability
}

sâmbătă, 15 martie 2014

Arduino ca multimetru (3)

   La inceputul anului trecut, am scris 2 article despre folosirea lui Arduino ca multimetru de panou: in Arduino ca multimetru am prezentat mai mult calcule, iar in Arduino ca multimetru (2) am pus si experimente, inclusiv sketch-uri..
   Am reluat testele deoarece am primit un mesaj ca apar erori pe ecran...
   In mare modul de conectare al lui Arduino la la un alimentator este prezentat in figura urmatoare:
iar modul de conectare intre module este:
   Modulul are schema:
   Conectarea am lasat-o ca in articolul original, cand am inceput testele cu Arduino, vedeti Arduino si un afisaj LCD clasic (16 caractere si 2 randuri)
   Sketch-ul este cel prezentat in ultimul articol
/*
  LiquidCrystal Library 
  The circuit 
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe 
 modified 22 Nov 2010
 by Tom Igoe
 This example code is in the public domain.

 http://www.tehnic.go.ro
 http://www.niqro.3x.ro
 http://nicuflorica.blogspot.ro
amper & voltmeter by niq_ro, 02.2013, Craiova, Romania
vers. 1.3 - see http://nicuflorica.blogspot.ro/2013/02/arduino-ca-multimetru-2.html
  */
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int Pintensiune = A3; // divizorul rezistiv pentru tensiune e legat la intrarea A3 
int Pincurent = A5; // rezistenta inseriata este conectata la A5

void setup() {

analogReference(INTERNAL); // punem referinta interna de 1,1V;

  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("www.tehnic.go.ro");  
  lcd.setCursor(0, 1);
  lcd.print("creat de niq_ro");
  delay(2500);
  lcd.clear();
  
 lcd.print("indicator panou");  
  lcd.setCursor(0, 1);
  lcd.print("tensiune-curent");
  delay (2500);
  lcd.clear();

 lcd.print(" sketch ver.2.1");  
  lcd.setCursor(0, 1);
  lcd.print("Umax=30V&Imax=5A");
  delay (2500);
  lcd.clear();
  
}

void loop() {
  float sumatens =0;
  float sumacurent = 0;
  
    for (int i=1; i <= 20; i++){
  
  // citire valoare pe intrarea analogica 
  float tensiune = analogRead(Pintensiune); 
  tensiune = 27.27 * 1.1 * tensiune / 1023.0 ;
  sumatens = sumatens + tensiune;
    
  float curent = analogRead(Pincurent); 
  curent = 1.1 / 0.22 * curent / 1023.0 ;
  sumacurent = sumacurent + curent;
  delay (20);
    }
  
  float tensiune = sumatens / 20.0 ;
  float curent = sumacurent /20.0 ;
  
  float putere = tensiune * curent ;
  float rezistenta = tensiune / curent;
  
// partea de afisare
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(tensiune);
    lcd.print(" V");
    
    lcd.setCursor(9, 0);
    lcd.print(curent);
    lcd.print(" A");

if (curent > 0.01)
{
  // calculeaza, apoi afiseaza puterea si curentul
    lcd.setCursor(0, 1);
    lcd.print(putere);
    lcd.print(" W");
    
    lcd.setCursor(8, 1);
    lcd.print(rezistenta);
    lcd.print(" ");
    lcd.write(0b11110100);;

}
else
{
  // daca curentul e mai mic de 10mA considera ca sursa e in gol
  if (tensiune < 0.1)
{  
  // scurtcircuit   
  lcd.setCursor(1, 1);
  lcd.print("sursa oprita    ");
}
else
  if (tensiune < 0.8)
{  
  // scurtcircuit   
  lcd.setCursor(1, 1);
  lcd.print(" scurtcircuit    ");
}
 else
    // 
    lcd.setCursor(1, 1);
     lcd.print("sursa e in gol   ");
  }  
// se odihneste si el 1,5 secunde
    delay(1500);
}
   Practic, montajul arata asa:
 Am facut si 3 filmulete:
- Arduino ca multimetru de panou pentru un alimentator (5)
   In ultimul filmulet apare si un modul voltmetru de panou pe care l-am achizitionat de pe ebay, pentru a vedea cum se comporta si pare ok...

Descriere:
1. domeniul de masura: 0-100V (fir alb sau galben)
2. afisaj LED cu 7 segmente, cifre de 14mm
3. consum propriu redus
4. masuratori la fiecare: 500ms (0,5s)
5. montare usoara pe panou
6. culoare LED-uri: rosie
7.tensiune alimentare: 3..30V (fir rosu la +, fir negru la masa)
8. temperatura de functionare: -10℃..+65 ℃.


18.03.2014 27.04.2021
   Am desenat toata corectat schema:

PS: Daca curentul indicat este mereu zero, verificati cu un aparat de masura pe voltmetru, ca avand borna neagra la GND si cea rosie la A5 tensiunea este pozitiva., daca nu este, inversati bornele de la ramura negativa, astfel incat pe sunt sa fie o tensiune pozitiva fata de GND-ul placii Arduino.


vineri, 14 martie 2014

Sursa in comutatie cu TPS5430

   Fata de integratul TPS5420, prezentat in articolul Sursa in comutatie cu TPS5420, TSP5430 produs tot de Texas Instruments pe care eu l-am primit ca monstra gratuita, se poate achizitiona si de la TME, acesta din urma poate debita 3A (pentru scurt timp si 4A) in rest caracteristicile sunt similare: tensiune de alimentare in domeniul 5,5..36V, tensiune stabilizata la iesire de 1,22..31V.
   Capsula este similara, doar ca mai este pinul 9, care este sub capsula si trebuie conectat la masa (GND) servind si ca radiator pentru disiparea caldurii.
Conform datasheet-ului lui TPS5430, schema de utilizare si randamentul sunt similare lui TPS5420:
   Schema cu blocurile interne este:
iar schema tipica de functionare este
la care se recomanda cablajul
   Ca si la TPS5420, si aici sunt exemple de dimensionare:
- stabilizator cu tensiune de intrare de 10,8..19,8V, tensiune la iesire de 5V, pulsatiile tensiunii de alimentare de 300mV, pulsatiile tensiunii de iesire de 30mV, curent maxim debitat 3A si frecventa de lucru de 500kHz (schema din aplicatia tipica)
- stabilizator de tensiune pentru 5V cand tensiunea de alimentare este intre 10 si 35V:
- stabilizator de tensiune pentru 5V cand tensiunea de alimentare este intre 9 si 21V:
- stabilizator de tensiune pentru 3,3V cu filtrare la iesire doar cu condensatori ceramici nepolarizati, iar tensiunea de intrare este intre 10 si 24V
   Ca si la TPS5420, pentru ca sa avem tensiune la iesire pinul ENA trebuie sa fie in aer, iar daca pinul ENA este conectat la un potential mai mic de 0,5V atunci la iesire nu vom regasi tensiune.



Sursa in comutatie cu TPS5420

   Am cerut si am primit ca monstra gratuita de la Texas Instruments integratul TPS5420,
   Cu TPS5420 poate fi realizata o sursa stabilizata in comutatie cu randament foarte mare, de peste 90%.
   Capsula integratului este 8SOIC:
   Schema cu blocurile interne este:
   Schema tipica de utilizare este:
   Tensiunea de alimentare (VIN) trebuie sa fie in domeniul 5.5..36V, iar la iesire (VOUT) tensiunea poate fi reglata de la 1,22V pana la maxim 31V, la un curent maxim de 2A (chiar si 3A pentru scurt timp).
   Dupa cum se constata, partea de reglaj a atensiunii se face din divizorul rezistiv R1-R2, ca si la clasicul LM317, in cazul de fata Vsense=1,22V.
   Cablajul recomandat de producator este

   In datasheet (in foaia tehnica) sunt prezentate 2 modele de calcul pentru componente:
- stabilizator cu tensiune de intrare de 10..36V, tensiune la iesire de 5V, pulsatiile tensiunii de alimentare de 300mV, pulsatiile tensiunii de iesire de 30mV, curent maxim debitat 2A si frecventa de lucru de 500kHz:
- stabilizator cu tensiune de intrare de 10..24V, tensiune de iesire 3,3V si parte de filtrare cu condensatori ceramici
PS: pentru ca sa avem tensiune la iesire pinul ENA trebuie sa fie in aer, iar daca pinul ENA este conectat la un potential mai mic de 0,5V atunci la iesire nu vom regasi tensiune.

Interfata i2c cu PCF8574T (2)

   In articolul precedent am prezentat rapid interfata pentru afisajel LCD tip 1602 sau din familie.. la recomandarea lui Cristi am sa prezint si partea de configurare a adresei (A0, A1, A2).
   In mod normal, pinii sunt in aer, deci toate 3 adresele sunt in unu logic... deci adresa in hexazecimal este 0x27, dupa cum e prezentat in fisa tehnica de la Texas Instruments
   Daca se fac strapurile (legaturile catre masa) la toate adresele (A0, A1 si A2) atunci adresa integratului in hexazecimal este 0x20.
   Dupa cum este prezentat in fisa tehnica de la NXP se pot folosi pana la 8 integrate PCF8574T conectate in paralel la comunicatia i2c: