duminică, 10 februarie 2013

Arduino ca multimetru (2)

    In prima parte am facut doar o prezentare si niste calcule de dimensionare, acum ma inceput sa fac niste experimente.
    Primele experimente le-am facut cu partea de ampermetru, folosind o rezistenta de 0,22 ohmi si 2-3W, pe care am gasit-o prin cutiile mele cu piese... valoare e mai mare decat cea indicata anterior, dar tinand cont ca fac doar experimente urmarind si revazand articolul de la http://electronics-diy.com/70v_pic_voltmeter_amperemeter.php unde folosita o rezistente de 0,47 ohmi, cea folosita de mine, pana la 2,5-3A e acceptabila (maxim 0.66V pe ea la 3A).
    Am folosit sursa de tensiune cu LM317 si 2 tranzistori, pe care am prezentat-o in articolul de la http://www.arduinotehniq.com/old/LM317/LM317.htm si 2 aparate de masura, unul pentru a masura curentul consumat de un ventilator (cooler) de sursa de calculator, altul pentru a masura caderea de tensiune pe rezistenta inseriata in circuit.


    Am facut 5 masuratori, la diverse tensiuni, rezultandu-mi urmatoarele valori:




    Am centralizat datele, facand si niste calcule:
    Daca pot considera considera ca aparatele de masura au eroare mica (etalon), rezulta ca rezistenta de 0,22 ohmi este mai mare cu 2,2% decat valoarea standard, ceea ce acceptabil avand in vedere ca tipul acesta de rezistenta poate avea toleranta din fabricatie de +10%.
    Multimetrul folosit ca voltmetru pe domeniul de 200mV este EDISON model DM383 (despre care nu am gasit prea multe informatii legate de eroare de masurare, dar pot miza pe sub 1% fiind vorba de tensiune continua), dupa cum apare la http://www.cromwell.co.uk/EDI5162900K

iar cel folosit ca ampermetru pe domeniul de 200mA este un "John Doe" model DT2905A (eroare de masura pe acest demeniu de 1,5%), dupa cum este prezentat la http://oldradio.tesla.hu/szetszedtem/016multimeter-dt9205a/multimeter.htm.

    Am realizat pe o bucatica de cablaj de test montajul adaptor si am reglat din semireglabil sa am raportul de tensiune corect (30:1,1=27,27:1) si am conectat firele la intrarile analogice (tensiunea se masoara la AN3, respectiv "curentul" la AN5) si la masa (GND), folosindu-ma de "interfetele macanice" de le-am utilizat si la termometru si pentru afisajul LCD.
   Schema folosita este:


    Am conectat placuta si la alimentator si la cooler, masurand tensiunea si cu un aparat digital, apoi am pus si pe celalalt in circuit, mutand pe al "mic" pe tensiune, iar celalalt pe curent:
    Am realizat un mic filmulet:
 
iar sketch-ul folosit a fost:

/*
  LiquidCrystal Library 

  The circuit for LCD 
 * 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.

  */

// 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("Umax = 30V");  
  lcd.setCursor(0, 1);
  lcd.print("Imax = 5A");
  delay (1500);
  lcd.clear();
  
}

void loop() {
// citire valoare pe intrarea analogica 
  float tensiune = analogRead(Pintensiune); 
  tensiune = 27.27 * 1.1 * tensiune / 1023.0 ;
  
  float curent = analogRead(Pincurent); 
  curent = 1.1 / 0.22 * curent / 1023.0 ;

// partea de afisare
    lcd.setCursor(0, 0);
    lcd.print("U =");
    lcd.print(tensiune);
    lcd.print(" V");
    
    lcd.setCursor(0, 1);
    lcd.print("I = ");
    lcd.print(curent);
    lcd.print(" A");
   
// se odihneste si el 1,5 secunde
    delay(1500);
// sterge cu buretele tabla :-D
  lcd.clear();
    }

   O a doua varianta de sketch pentru a afisa si puterea consumata si rezistenta echivalenta a consumatorului este:


/*
  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
  */

// 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("Umax = 30V");  
  lcd.setCursor(0, 1);
  lcd.print("Imax = 5A");
  delay (1500);
  lcd.clear();
  
}

void loop() {
// citire valoare pe intrarea analogica 
  float tensiune = analogRead(Pintensiune); 
  tensiune = 27.27 * 1.1 * tensiune / 1023.0 ;
  
  float curent = analogRead(Pincurent); 
  curent = 1.1 / 0.22 * curent / 1023.0 ;

  float putere = tensiune * curent ;
  float rezistenta = tensiune / curent;

// partea de afisare
    lcd.setCursor(0, 0);
    lcd.print(tensiune);
    lcd.print(" V");
    
    lcd.setCursor(9, 0);
    lcd.print(curent);
    lcd.print(" A");

    lcd.setCursor(0, 1);
    lcd.print(putere);
    lcd.print(" W");
    
    lcd.setCursor(8, 1);
    lcd.print(rezistenta);
    lcd.print(" ");
    lcd.write(0b11110100);;


// se odihneste si el 1,5 secunde
    delay(1500);
// sterge cu buretele tabla :-D
  lcd.clear();
    }


iar afisajul arata asa:


   Pentru a elimina erorile de citire, vom face o medie a 10 masuratori la 200ms fiecare, apoi vom calcula mediile tensiunii si curentului consumat, sketsh-ul va fi:

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

  */

// 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("Umax = 30V");  
  lcd.setCursor(0, 1);
  lcd.print("Imax = 5A");
  delay (1500);
  lcd.clear();
  
}

void loop() {
  float sumatens =0;
  float sumacurent = 0;
  
    for (int i=1; i <= 10; 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 (200);
    }
  
  float tensiune = sumatens / 10.0 ;
  float curent = sumacurent /10.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");

    lcd.setCursor(0, 1);
    lcd.print(putere);
    lcd.print(" W");
    
    lcd.setCursor(8, 1);
    lcd.print(rezistenta);
    lcd.print(" ");
    lcd.write(0b11110100);;

   
// se odihneste si el 1,5 secunde
    delay(1500);
    }

iar varianta cu 100 de citiri la 20ms cu mediere:

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

amper & voltmeter by niq_ro, 02.2013, Craiova, Romania
  */

// 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("Umax = 30V");  
  lcd.setCursor(0, 1);
  lcd.print("Imax = 5A");
  delay (1500);
  lcd.clear();
  
}

void loop() {
  float sumatens =0;
  float sumacurent = 0;
  
    for (int i=1; i <= 100; 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 / 100.0 ;
  float curent = sumacurent /100.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");

    lcd.setCursor(0, 1);
    lcd.print(putere);
    lcd.print(" W");
    
    lcd.setCursor(8, 1);
    lcd.print(rezistenta);
    lcd.print(" ");
    lcd.write(0b11110100);;
   
// se odihneste si el 1,5 secunde
    delay(1500);
    }

Filmuletul cu noua prezentare:



    Deoarece atunci cand sursa este oprita apar mesaje ciudate, care alterneaza, de genul:



m-am gandit ca atunci cand curentul e foarte mic sa afiseze un mesaj ca sursa e in gol.

    Sketch-ul numit versiunea 2 este:

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



amper & voltmeter by niq_ro, 02.2013, Craiova, Romania
vers. 2 - 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");  

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

{
  // 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 1mA considera ca sursa e in gol
     lcd.setCursor(1, 1);
     lcd.print("sursa e in gol");
}

// se odihneste si el 1,5 secunde
    delay(1500);
    }

    Am realizat un nou filmulet:

24.02.2013
    Am realizat ca mai situatiile, care s eintalnesc in practica sunt:
- functionare normala:

- sursa oprita:
- scurtcircuit la iesirea din sursa:
- scurtcircuit la iesirea modulului de masura, adica la intrarea in consumator (la scurt-circuit apara rezistenta de masura de 0,22 ohmi)

   Sketch-ul actualizat (versiune 2.1) este:


/*
  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);
    }

   Am realizat si un film cu functionarea (fara partea de introducere) se numeste Arduino as digital multimeter for homemade power supply (4):


21 de comentarii:

  1. am realizat ca multimetrul meu Edison DM383 este de fapt un Mastech MAS830 (am gasit dayasheet-ul lui la http://www.mastech.com.cn/down/MAS830L%20MAS830.pdf ) si am constatat ca e bunicel :))

    RăspundețiȘtergere
  2. Salut. Cum poti sa faci ca in loc sa ai iesirea pe LCD cu datele, sa iti inregistreze pe un Flash stik USB? E posibil pe placa asta de dezvoltare?

    RăspundețiȘtergere
    Răspunsuri
    1. din pacate nu am lucrat, inca, cu memorarea datelorpe SD sau stick...

      Ștergere
  3. Salut.Ma intereseaza si pe mine 2 module care sa afiseze V, A, W si temperatura.
    V(0-110), A(0-20), Temperatura(0-100)
    Am 2 module FET800 si vreau sa stiu in permanenta acesti parametrii.
    La temperatura vreau sa imi arate permanent temperatura radiatorului fara sa comande ventilatorul.
    Multumesc!!!

    RăspundețiȘtergere
  4. Salut , cand incerc sa-l incarc imi apare o eroare
    Arduino: 1.5.5 (Windows 7), Board: "Arduino Uno"

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp: In member function 'void Adafruit_MCP23008::begin(uint8_t)':
    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp:32: error: 'Wire' was not declared in this scope
    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp: In member function 'uint8_t Adafruit_MCP23008::read8(uint8_t)':
    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp:149: error: 'Wire' was not declared in this scope
    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp: In member function 'void Adafruit_MCP23008::write8(uint8_t, uint8_t)':
    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\Adafruit_MCP23008.cpp:167: error: 'Wire' was not declared in this scope

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.

    Am doar display-ul conectata dar nu si senzorii . Ma gandeam ca o sa mearga si o sa imi arate 0 peste tot .

    RăspundețiȘtergere
  5. ar merge daca ai avea si libraria "LiquidCrystal" pusa in directorul "libraries" unde ai softul pentru Arduino.. descarca-l de pe net si instaleaza-l acolo si o sa mearga.. citeste si un pic ce e scris la http://arduino.cc/en/Tutorial/LiquidCrystal

    RăspundețiȘtergere
  6. Buna ziua, urmaresc de cativa ani activitatea dvs. tin sa va felicit, de fiecare data am gasit informatii foarte utile. Eu nu sunt electronist, o fac de placere, mai mult joaca, incerc sa-l conving pe baiatul meu sa se apropie de electronica. De cateva luni am inceput sa ma joc cu arduino, am incercat sa fac acest voltampermetru dar am o problema.
    in momentul in care potentiometrele sunt pe 0(inchise) pe Lcd se afiseaza 30,00 V 5.00 A 149.99 W 6.00 o, nu stiu unde am gresit. Te rog da-mi un sfat. Iti multumesc Alexandru

    RăspundețiȘtergere
    Răspunsuri
    1. am reluat experimentele si am constatat ca am acest mesaj cand nu am conectate intrarile analogice la Arduino... am descoperit si o greseala in desenul facut in Eagle si l-am corectat... ideea e ca acel potentiometru se regleaza punanad in paralel un voltmetru si facand etalonarea dupa el...

      Ștergere
    2. Buna ziua.
      Am reusit in cele din urma sa duc la bun sfarsit acest proiect, cu modificarea ca am utilizat un afisaj LCD 20X4 I2C.Vreau sa fac cateva observatii :
      1. Montajul este bun...circuitul este defect...ma refer la circuitul cablat...trebuie inversate intrarea cu iesirea si GND-ul de la Arduino trebuie adus la intrare minus.Lipseste o conexiune.
      2. Codul este foarte bun, am utilizat un semireglabil normal, nu neaparat multitura, si a mers perfect reglajul.

      Ștergere
    3. am corectat in "pictura" conexiunea...

      Ștergere
  7. Buna ziua.
    Aceasta este ultima postare. Am eliminat inconvenientul dat de referinta interna de 1,1 V...aceasta deoarece folosesc si restul de intrari analogice.
    Deci:
    1. Resistenta din divizorul de tensiune de 100 ohmi am inlocuit-o cu una de 470 de ohmi: astfel, in codul Arduino in loc de de 27.27 * 1,1, am pus valoarea de 33 (initial am incercat cu 30, si prin tatonari am ajuns la 33)
    2. Nu am umblat la rezistenta de 0,22 ohmi: in schimb in codul Arduino am inlocuit valoarea de 1,1 cu 5.
    In rest merge bine.

    RăspundețiȘtergere
  8. Salut,
    am incercat aceste scheme si merg perfect.In cazul in care am un incarcator solar care are plusul comun(si nu masa cum este in exemplu,masuratoarea pentru curent) cum se leaga plusul comun de la incarcator cu arduino?

    RăspundețiȘtergere
    Răspunsuri
    1. nu stiu daca s-a publicat unul din raspunsuri: in schema aia plusul e comun, suntul e pus pe minus... pentru curenti mari recomand senzori tip ACS712 pentru 5, 20 sau 30A.. pentru curenti si mai mari se folsesc altii ACS756...

      Ștergere
    2. trebuie sa stiu date despre panoul solar (fotovoltaic), daca ar eincarcator sau nu... etc.. nu sunt vrajitoare (vrajitor) sa ghicesc ce e pe teren...

      Ștergere
  9. 20w/18v/1,3A-panou,are incarcator.problema este la incarcator, pentru ca foloseste plusul comun pentru panou,acumulator si consumator .Eu vreau sa monitorizez toate acestea(I,U).pot trimite si poze ,dar am nevoie de o adresa de email.

    RăspundețiȘtergere
  10. repet.. si aici schema are plus comun... e firul ala rosu din "picturi'... vreti sa monitorizati curentii de la panou si pe consumator? tensiunea pe acumulator? trimiteti-mi poze pe mail (nicu.florica@gmail.com)

    RăspundețiȘtergere
  11. Iti multumesc pt ca ai pus la dispoziria tuturor proiecte interesante.L am facut si merge perfect .vreau samentionez canu mi pleca de la 0 curentul si tensiunea si problema am corectat o schimbind bateria de alimentare.folosesc 7806 si am alimentat la baterie de 9v dar era descarcata la 7.5 v.Am pus baterie de 9v noua si imediat a plecat displayul de la 0 in lipsa sursei.deci atentie la alimentare sa nu patiti ca mine sa stati ore sa verificati ce si cum.

    RăspundețiȘtergere
    Răspunsuri
    1. ar fi bine sa-u pui un alimentator separat, unul de telefon...

      Ștergere
  12. Multumesc de raspuns !tocmai ma pregateam sa sterg si sa repostez.eu am programat atmega 328 pe placa arduino apoi am scos controlerul si l am pus pe o placa de a mea.La intrarea tensiunii placii am pus 7805 si apoi am alimentat cu baterie de 9v dar mai era undeva la 7.5 vin baterie.surpriza neplacuta ore de verificari pt ca mi varia diverse valori de genul 0.1vpe display 0.01a. Cind am pus bateria noua de 9v surpriza placuta mi a plecat de la 0.deci fiti atenti la alimentare si folositi sursa corespunzatoare cum spune nicu de

    RăspundețiȘtergere