LED külső kijelzős

Arduino UNO alapra épített feszültségmérő, de a külső kijelzőjéhez csak 3 db vezeték megy és nem egy köteg kábel. A külső kijelzőt fel lehet akasztani a falra és szem magasságban világít, szükség szerinti méretben, nagyságban, fényerősséggel, stb. A pontossága ennek is kb. +/- 0,2% körül van, 10 bites az UNO/NANO bemenetén lévő A/D konverter miatt.

3 vezetékes kijelzős voltmérő kapcsolási rajza
3 vezetékes kijelzős voltmérő kapcsolási rajza

A három vezetékhez a kijelző modulnál van egy céláramkör:

  • The MAX7219 display driver chip provides a 3-wire serial (SPI) interface to drive 7-segment LED displays (common-cathode type) up to 8 digits.
  • The on-chip includes a BCD decoder, multiplex scan circuitry, segment and digit drivers, and an 8×8 static RAM to store the digit values.
  • The DIN, LOAD and CLOCK pins of MAX7219 is connected with 11,10 and 9 digital IO pins of Arduino.
  • A four digit, common cathode seven segment display is connected to the drive pins of MAX7219.
  • Otherwise, one can use the pre-assembled MAX7219 board with 4 digits, and connect the drive pins accordingly.
  • Voltage divider circuit is used to divide voltage into two parts (measurement and drop).
    Internal Vref (1100 mV) of Arduino is selected for measurement.
  • The resistor R3 (1200K) and R2 (27K) forms the voltage divider, and connected to analog input pin of Arduino (A0).
  • IN5913B 3.3 Volt Zener diode, at A0 pin, will product the Arduino, from over voltage inputs.
  • Vmeasurment = (R2 / R3+R2 ) * Vin.
  • If Vin is 50V then Vmeasurment = (27/1227) * 50V = 1.1 V = 1100 mV.
  • ADC Resolution = Vref / (1024 -1).
  • ADC Resolution = 1.1 V / 1023 = 1100mV / 1023 = 1.075 mV.
  • DVM Resolution = 50 / 1023 = 48.875 mV.

Az eredeti kapcsolás 50V-os ezt kell redukálni tetszés szerinti értékre.

Arduino program (1.8.7. verzión hiba nélkül fordítható):

#include <LedControl.h>
//—————————— LedControl-1.0.6 file letöltése
int analogPin1 = 0;
// LM35 temperature sensor connected to analog pin 2
int val = 0;
// variable to store the value read
// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(11, 9, 10, 1);
//———————————————————
void setup()
{
analogReference(INTERNAL);
mydisplay.shutdown(0, false); // turns on display
mydisplay.setIntensity(0, 15); // 15 = brightest
mydisplay.setDigit(0, 0, 9, false);
mydisplay.setDigit(0, 1, 8, false);
mydisplay.setDigit(0, 2, 7, false);
mydisplay.setDigit(0, 3, 6, false);
mydisplay.setDigit(0, 4, 5, true);
mydisplay.setDigit(0, 5, 4, false);
mydisplay.setDigit(0, 6, 3, false);
mydisplay.setDigit(0, 7, 2, false);
}
//——————————————————–
void loop()
{
// read the Analog input pin
val = analogRead(analogPin1);
int converted = map(val, 0, 1023, 0,5000);
converted = HexToBCD(converted);
//——————————————————-Display the values
mydisplay.setDigit(0, 0, ((converted>>12)&0x0F), false);
mydisplay.setDigit(0, 1, ((converted>>8)&0x0F), true);
mydisplay.setDigit(0, 2, ((converted>>4)&0x0F), false);
mydisplay.setDigit(0, 3, (converted&0x0F), false);
//—————————————-One second delay between readings
delay(1000);
}
/**************************************************************************/
/*!
* \brief Coverts hex into BCD
*
* This function will coverts hex into BCD
*
* \param[in] byte
* \param[out] byte
* \return Nill
*
*/
/**************************************************************************/
unsigned int HexToBCD(unsigned int number)
{
unsigned char i=0;
unsigned int k = 0;
while(number)
{
k = ( k ) | ((number%10) << i*4);
number = number / 10;
i++;
}
return(k);
}


Arduino Zero, Due sorozatban az A/D nem 10 bites, hanem 12 bites, ezért az elérhető elméleti legkisebb felbontás 1/1023 részről 1/4095 részre csökken le, az elvi pontosság pedig javul elméletileg lehet vele mérni kb. +/- 0,05 % pontosan, de a kb. +/- 0,1 % biztosan tudja, de az analogReference(INTERNAL); hibát jelez meg kell nézni a leírásban vagy a LedControl.h függvénybe mit kezel helyette, mert anélkül nem fog működni.


beleesik az LCD kijelzőben úgy nézi, még sem látja rendesen
beleesik az LCD kijelzőben úgy nézi, még sem látja rendesen