Strano comportamento con batteria a 9V

Ciao gruppo, desideravo chiedervi se potete aiutarmi a capire, perché lo sketch sotto se fatto girare con Arduino Nano alimentato tramite USB funziona bene, mentre se lo alimento con batteria a 9V fuzniona male, in pratica la parte display funziona bene in entrambi i casi, mentre la parte neopixel, se alimentata con USB, fa quello detto nello sketch, mentre con batteria 9V, fa dei flash, stile flash macchina fotografica.

Non capisco dove potrebbe essere il problema, il led è alimentato dalle uscite volt di Arduino, quindi sia con USB che con batteria sempre da li prende l'alimentazione.

Qualche consiglio?

Grazie :slight_smile:

buon weekend a tutti

P.s. lo sketch sarà lungo mi serviranno le varie librerie, ma sto testando pezzo pezzo per trovare eventuali errori.

#include <Vcc.h>                // libreria Volt batteria
#include <Adafruit_GFX.h>       // Libreria display
#include <Adafruit_ST7735.h>    // Libreria display
#include <SPI.h>
#include <Wire.h>               // Libreria per sensore laser
#include <VL53L0X.h>            // Libreria per sensore laser
#include <Adafruit_NeoPixel.h>  // Libreria Led
#include <EEPROM.h>

//Sezione led
#define LED_PIN 3
#define LED_COUNT 1
Adafruit_NeoPixel led (LED_COUNT, LED_PIN, NEO_RGB);
// Sezione display
#define CS 10
#define RESET 8
#define DC 9
Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RESET);

// Costanti varie
char str_CM [7];            // Stringa per scrittura altezza
char Litri[7];              // Stringa per scrittura litri
int L;                      // Variabile litri
int y = ((86*L)/2000);      // Calcolo altezza rettangolo percentuale
int Perc = ((L/2000)*100);  // Calcolo percentuale litri
// Sezione sensore laser
#define HIGH_ACCURACY   // Accuratezza laser
VL53L0X sensor;         // Sensore laser

// Pin sensore non a contatto
#define sensore_H2O 6

// costanti per il calcolo batteria
const float minV = 0.0;     // volt minimi
const float maxV = 5.0;     // volt massimi
const float rap = 9.0/9.0;  // volt misurati con il tester e volt ipotetici
Vcc vcc(rap);

// Colori
#define BLACK    0x0000
#define RED      0xF800
#define DARKGREEN 0x0320
#define STEELBLUE 0x4416
#define ORANGE 0xFD20
#define YELLOW 0xFFE0
#define OLDLACE 0xFFBC
#define GREENYELLOW 0xAFE5

void setup() {
  tft.initR(INITR_BLACKTAB);      // inizializza il chip ST7735
  tft. setRotation(0);
  pinMode(sensore_H2O, INPUT_PULLUP);
  Wire.begin();
  sensor.init();
  led.begin();
  sensor.setTimeout(500);

  // Schermata di avvio
  led.setBrightness(250);
  led.setPixelColor(0, 110, 0, 210);
  led.show();
  tft.fillScreen(BLACK);
  tft.setCursor (36,20);
  tft.setTextSize (3);
  tft.setTextColor(GREENYELLOW);
  tft.println ("H2O");
  tft.setCursor (20,60);
  tft.setTextSize (3);
  tft.setTextColor(GREENYELLOW);
  tft.println ("LEVEL");
  tft.setCursor (15, 110);
  tft.setTextColor(STEELBLUE);
  tft.setTextSize(2);
  tft.println("by");
  tft.setCursor (10, 135);
  tft.setTextColor(STEELBLUE);
  tft.setTextSize(2);
  tft.println("Vincenzo");
  delay(2500);

  // Schermata Dati non variabili
  led.setPixelColor(0, 0, 0, 0);
  led.show();
  tft.fillScreen(BLACK);
  tft.drawFastHLine (0, 23, 128, OLDLACE);
  tft.setCursor (3,30);
  tft.setTextSize (2);
  tft.setTextColor(STEELBLUE);
  tft.println ("Litri");
  tft.setCursor (3, 75);
  tft.setTextSize (2);
  tft.setTextColor(STEELBLUE);
  tft.println("Altez.");
  tft.drawFastHLine (0, 120, 128, OLDLACE);
  tft.setCursor (10,125);
  tft.setTextSize (1);
  tft.setTextColor(OLDLACE);
  tft.println("LETTURA PRECEDENTE");
  tft.drawRect(85, 30, 40, 83, OLDLACE);
  sensor.startContinuous();
}

void loop() {
  // lettura VOLT Batteria
  float v = vcc.Read_Volts();
  // lettura PERCENTUALE Batteria
  float p = vcc.Read_Perc(minV, maxV);
  if(p >= 60){
    tft.setCursor (23,1);
    tft.setTextSize (1);
    tft.setTextColor(DARKGREEN, BLACK);
    tft.println("STATO BATTERIA");
    tft.setCursor (10,12);
    tft.setTextSize (1);
    tft.print(v);
    tft.print(" V");
    tft.setCursor (70,12);
    tft.setTextSize (1);
    tft.print(p);
    tft.print(" %");
  }
  if(p<=59 && p>=30){
    tft.setCursor (23,1);
    tft.setTextSize (1);
    tft.setTextColor(ORANGE, BLACK);
    tft.println("STATO BATTERIA");
    tft.setCursor (10,12);
    tft.setTextSize (1);
    tft.print(v);
    tft.print(" V");
    tft.setCursor (70,12);
    tft.setTextSize (1);
    tft.print(p);
    tft.print(" %");
  }
  if(p<=29){
    tft.setCursor (23,1);
    tft.setTextSize (1);
    tft.setTextColor(RED, BLACK);
    tft.println("STATO BATTERIA");
    tft.setCursor (10,12);
    tft.setTextSize (1);
    tft.print(v);
    tft.print(" V");
    tft.setCursor (70,12);
    tft.setTextSize (1);
    tft.print(p);
    tft.print(" %");
  }
  // Sezione inizializzazione laser
  int A = digitalRead(sensore_H2O);
  int distanza = sensor.readRangeSingleMillimeters();
  if(!sensor.init()){
    led.setPixelColor(0, 153, 255, 51);
    led.show();
    tft.fillRect(0, 25, 128, 95, ORANGE);
    tft.setCursor(13, 40);
    tft.setTextSize (1);
    tft.setTextColor(RED);
    tft.println("Laser non trovato!");
    tft.setCursor(8, 70);
    tft.setTextSize (1);
    tft.setTextColor(RED);
    tft.println("Funzia solo il led");
    if(A==LOW){
      tft.fillRect(2, 90, 124, 20, DARKGREEN);
      tft.setCursor(15, 95);
      tft.setTextSize(1);
      tft.setTextColor(OLDLACE, DARKGREEN);
      tft.print("LIVELLO  TROVATO");
      led.setPixelColor(0, 250, 0, 0);
      led.show();
    }
    delay(2500);
  }
    led.setPixelColor(0, 250, 250, 0);
    led.show();
    tft.fillRect(0,25, 128, 95, YELLOW);
    tft.setTextColor(RED);
    tft.setTextSize(1);
    tft.setCursor(20, 30);
    tft.print("PROBLEMA LASER");
    tft.setCursor(40, 50);
    tft.print("CALCOLO");
    tft.setCursor(17, 70);
    tft.print("NON DISPONIBILE");
    if(A==LOW){
    tft.fillRect(10, 90, 108, 20, DARKGREEN);
    tft.setCursor(20, 95);
    tft.setTextColor(OLDLACE, DARKGREEN);
    tft.print("LIVELLO TROVATO");
    led.setPixelColor(0, 250, 0, 0);
    led.show();
    }
    delay(2500);
}

Le pilette da 9V NON LE DOVETE USARE !!!

A parte battute, hai idea della pochissima "corrente" che sono in grado di erogare? E di quanto invece assorbe una striscia di neoPixel?

Prendi dei bei alimentatori a 5V ed alimenta con quelli ... sia gli Arduino che, magari separatamente, le strisce LED :wink:

Se devi alimentare a batteria, devi andare su delle LiPo, che di corrente te ne possono dare quanta ne vuoi e ... step-up o step-down in funzione delle batterie.

Guglielmo

Pensavo di usarla perché userò un solo led neopixel, in pratica l'ho messo per non usare un led RGB, carenza di pin liberi :slight_smile:
Inoltre è un lavoro apparecchio che userò in posti dove non avrò a disposizione prese elettriche.

Comunque credo di aver risolto, errore in una saldatura, in pratica mandavo 7V al led quando lo alimentavo con 9V, questa mattina non ci avevo fatto caso, adesso ho ricontrollato, ho annullato questa alimentazione e sembra tutto ok adesso. arrivano 2,6V ed il led ha lo stesso funzionamento sia in USB che a 9V

Ah, beh, con UN solo LED allora non c'è problema :grin: :grin: :grin:

Pensavo parlassi di LED strip NeoPixel ... :wink:

Guglielmo

No no un solo led :wink:
Sempre grazie per i consigli

In ogni caso tieni sempre presente che le pilette da 9V non sono nate per applicazioni che richiedono molta correte e che, in tali condizioni, la loro durata è molto limitata ...

Guglielmo

1 Like