Interferenze display con pompa 5volt

Comunque quel chip che io sappia è solo in formato SMD, quindi poco gestibile.
E poi ormai te li tirano dietro

e poi c'è da dire che se vuoi ottenere 5V devi aggiungere uno Step Up e allora tanto vale prendere una scheda che già lo faccia

Altrimenti, per batterie ricaricabili Ni-Cd o Ni-Mh c'è questo

Non mi hai risposto, però.
Secondo me non hai eseguito la modifica correttamente.
Ci tengo a che tu provi la modifica perché se funziona sul tuo display funziona ovunque.
Però la devi eseguire correttamente.
Se la fai non fai un favore solo a te, ma anche a me.

Steve come ti ho scritto in precedenza la modifica l'ho provata...anche se mi perplime a il fatto che un condensatore dovesse andare su D0 che nel mio circuito è ho utilizzato...nonostante ciò l'ho provato e non ha funzionato...poi ho provato anche a mettere i condensatori nelle configurazione che hai visto in foto ma anche lì senza successo...

Ok...allora per evitare di uscire fuori argomento (autoirrigazione con un display) mi consigliate un alimentatore da prendere da amazon per la mia pompa? Così evitiamo il discorso batterie e carica batterie e quant'altro? e vediamo se con alimentazione a parte si risolve il problema delle interferenze sul display?

@steve-cr la modifica dei condensatori non mi funzionava...ma mi spieghi come mai uno dei condensatori deve andare su D0 che nel mio progetto è un ingresso inutilizzato?

IMG_20210517_122633

Perchè nei display I2C è un pin "sensibile" e non ho fatto caso se è collegato oppure no.
Ho trovato dove mettere i condensatori semplicemente toccando con un cacciavite tutti i pin, uno a uno, diverse volte, finché non riesco a farlo impazzire. Ogni piedino "sensibile" gli mettevo un condensatore.
Quindi, alla fine, i piedini che erano sensibili al cacciavite erano R/W e il D0.
Ma tu potresti provare a fare come me: accendi il display e cerchi di farlo impazzire solamente appoggiando un cacciavite metallico o una pinzetta da SMD (come ho fatto io) pin per pin, magari sfregandola un po' sul pin e STANDO ATTENTO a non fare cortocircuiti. Ogni pin che te lo fa impazzire ci metti un condensatore collegato a massa.
Fammi sapere

Ho appena provato con un cacciavite passandolo su ogni PIN ma non mi dà nessuna interferenza...

In compenso però non lo so se è coincidenza ma inserendo un circuito con un condensatore e una resistenza collegato al relè NC le interferenze sembrano assenti...vedi foto




Quello che però non mi torna è perché le righe sul display sono sfasate di una cella e perché togliendo questo collegamento col relè il display non mostra più caratteri strani? È solo una coincidenza? Aiutatemi a capire

In he senso parto da LCD 0 1? Dove lo vedi nel codice il problema? Perché in realtà il display visualizza correttamente le 2 righe solo che quando la pompa parte le sfasa entrambe di una cella...questo è l'unico problema che sto notando da quando ho inserito quel condensatore...caratteri strani non ne fa più per ora...

Ma cosa vuol dire che le sfasa?
Spiegami

Il display ha 16 celle per ogni riga...io scrivo su entrambe le righe partendo dalla prima cella..ma quando la pompa di avvia le scritte si sfasano di una cella in avanti...

in effetti dalle foto si vede che la prima riga comincia dalla seconda colonna

però per quanto riguarda la seconda riga ne sarei meno sicuro
dato che tu non stampi direttamente la scritta, ma passi attraverso una funzione di scroll
che temo non vada esattamente come ti aspetti, in effetti mi domando come vada, dato che dai miei calcoli la scritta dovrebbe cominciare con un punto e non con uno spazio

ti chiedo quindi una cortesia:
controlla e conferma che il programma caricato, al quale fanno riferimento le foto sia effettivamente quello pubblicato

nel caso non fosse così, ti chiedo di non correggere i precedenti post, ma di mettere ex-novo sia il programma che la descrizione del problema che le nuove foto fatte col programma attuale
grazie

Ci sono passato. Si tratta di calo di tensione sul display. Lascia perdere i condensatori. Anzitutto, la pompa va pilotata con alimentazione separata, anche a pile, e in genere risolve. Se non ti risolve, quello che assorbe di più è la bobina del rele' (la presenza di fotoaccoppiamento o meno tra rele' e pin di pilotaggio non gioca nessun ruolo). Quindi ti serve un alimentatore da 9V almeno 2A che riesca a mantenere i 5V. Io ho messo un circuito esterno di riduzione da 9V a 5V, in modo da non caricare l'alimentazione di Arduino.

potrebbe essere benissimo
ma questo comunque non spiega come mai la scritta in seconda riga non comincia con un punto
e in effetti non prosegue nemmeno come dovrebbe

io continuo a pensare che li ci sia qualcosa di errato a livello SW

La notte porta consiglio

Primo:
Le scritte cominciano dal secondo carattere anche a pompa spenta, si vede nella penultima foto

Secondo:
Il gruppo RC aggiunto non è collegato né al + né a gnd, si vede dalle foto

Terzo:
Dopo tutto il 'pippone' su alimentatori e batterie ricaricabili e storie varie il rele prende ancora il 5v dalla breadboard?
Serio?

Quindi ritengo che ci siano grossi problemi SW

Urge che lo OP dia chiare spiegazioni

E' facile verificarlo con un esperimento. Stacca fisicamente rele' e pompa. Se non fa differenza la causa è lato sw, se no è hw.

Non è così semplice

Per cominciare il comportamento descritto non corrisponde al programma postato

Inoltre le modifiche segnalate non sono state applicate

Poi sono state applicate modifiche inutili e non sollecitate

Da ultimo magari il problema sw non è nel software del micro....

iniviterei intanto a non saltare a conclusioni senza aver avuto certezza dei fatti. Dunque lato software non vi è alcun problema. Nel codice che vedete sopra, manca una piccola modifica che consiste nel commentare la funzione di scroll che per quanto ne dica qualcuno funziona alla perfezione, ma l'ho commentata per evitare "rumore" nei tentativi di risolvere il problema oggetto di questo topic. Di seguito il codice aggiornato a scanso di equivoci:

#include <LiquidCrystal.h>

#define photoSensor 8
#define hygrometer A0
#define relay 13
#define lcdContrast 6
#define lcdRs 12
#define lcdEn 11
#define lcdD4 5
#define lcdD5 4
#define lcdD6 3
#define lcdD7 2

const int MinHumidityThreshold = 20;
const int MaxHumidityThreshold = 50;
const int contrast = 75;

const String light = "Light: ";
const String hum = "Humidity: ";
const String night = "night";
const String day = "day";

LiquidCrystal lcd(lcdRs, lcdEn, lcdD4, lcdD5, lcdD6, lcdD7);

int lightness = 0;
int humidity = 0;
int relayState = 1;
int Li = 16;
int Lii = 0;

void setup() {
  analogWrite(lcdContrast,contrast);
  prepareLcd();  
  pinMode(hygrometer, INPUT);
  pinMode(photoSensor, INPUT);
  pinMode(relay, OUTPUT);
}

void loop() {
  lightness = digitalRead(photoSensor);
  logDisplay();
  
  if(lightness == HIGH){
    humidity = map(analogRead(hygrometer), 0, 1023, 100, 0);
    if(humidity <= MinHumidityThreshold && relayState == 1){
      digitalWrite(relay, LOW);
      relayState = 0;
    }
    else if(humidity >= MaxHumidityThreshold){
      digitalWrite(relay, HIGH);
      relayState = 1;
    }
  }
  else{
    relayState = 1;
    digitalWrite(relay, HIGH);
  }
  delay(250);
}

void logDisplay(){
  clearLcdLine(0);
  clearLcdLine(1);
  lcd.setCursor(0, 0);
  String dayLight = lightness == HIGH ? night : day;
  lcd.print(light + dayLight);
  if(lightness == HIGH){
    lcd.setCursor(0, 1);
    if(relayState == 0){
      //lcd.print(scrollLeft("Watering plant..."));
      lcd.print("Watering plant...");
    }
    else{
      Li = 16;
      Lii = 0;
      lcd.print(hum + humidity + "%");
    }
  }
  else{
    clearLcdLine(1);
    Li = 16;
    Lii = 0;
    lcd.print("Waiting night");
  }
}

String scrollLeft(String stringDisplay){
  String result;
  String strProcess = stringDisplay + "                " + stringDisplay;
  result = strProcess.substring(Li, Lii);
  Li++;
  Lii++;
  if(Li > strProcess.length()){
    Li = 16;
    Lii = 0;
  }
  return result;
}

void clearLcdLine(int line){
  for(int n = 0; n < 16; n++) { 
    lcd.setCursor(n,line); 
    lcd.print(" "); 
    } 
    lcd.setCursor(0,line); 
}

void prepareLcd(){
  lcd.begin(16, 2);
  lcd.blink();
  lcd.setCursor(0, 0);
  lcd.print(light);
  lcd.setCursor(0, 1);
  lcd.print(hum);
}

Punto 1: @Standardoil che dici che le scritte cominciano dal secondo carattere anche a pompa spenta, lo vedi dalla foto...dovresti anche sapere che le scritte si erano spostate a pompa accese e restano sfasate da quel momento in poi. Il codice parla chiaro...Non scrivo a partire dal secondo carattere, ma dal primo e prove fatte senza pompa lo dimostrano nel caso di dubbi.
Punto 2 @Standardoil ammetto qui di essere ignorante quindi spiegatemi pure come collegare il gruppo RC, lo faccio con piacere.
Punto 3: @Standardoil se leggi le mie domande, trovi anche quelle in cui chiedo come fare per alimentare a parte pompa e relè, anche qui se mi dite come fare lo faccio con piacere. Mi va bene anche che mi diciate che alimentatore comprare a questo punto visto che la strada di una batteria assemblata mi pare d'aver capito è lunga o comunque non vista bene in questo forum.

A chiunque altro parli di problema software, lo invito a trovare il problema e nel caso lo risolverò, ma guardando il codice. Grazie a tutti per l'attiva collaborazione che sto apprezzando tantissimo. Aiuti e suggerimenti sono benvenuti.
:slight_smile:

Beh...

Come volevasi dimostrare almeno un problema software c'era
Il programma pubblicato non corrispondeva ai problemi lamentati
Infatti era pubblicato il programma sbagliato...

E tu, invece di chiedere scusa per averci, e avermi, fatto perdere tempo ti inalberi...

Boh, non saprei che dire

Riguardo al punto due...
Cosa collegare e come farlo te lo hanno spiegato

Anche come collegare la pompa te lo hanno spiegato, alcuni anni fa
Già perché ho ricordato che sei 'vecchia conoscenza'

E quindi?
Fino a che non avrai almeno la 'capacità' di ammettere che ci hai solo fatto perdere tempo pubblicando programmi sbagliati e facendo modifiche inconcludenti rimarrai nel mio killfile

caro @Standardoil complimenti per il modo cortese che hai di porti con gli utenti del forum. Intanto chiedere scusa forse dovresti farlo tu per i toni che usi. A questo punto faccio anche a meno della tua saccenza quindi anche meno grazie. Poi il codice sì non era quello corrente ma come spiegato non era quello il problema quindi se hai perso tempo, probabilmente ne avevi da investire a leggere i vari post ma sincero non te lo chiedo io di seguire ciò che scrivo. Poi sì sono una vecchia conoscenza, quindi che male c'è? Ti ricordo che in quel post chiedevo per una pompa a 12 volt da collegare con un pannello solare e una batteria da 12 volt... E scusami se mi permetto ad aprire un nuovo topic su un progetto differente. Scusami anche se non sono così esperto umile e cortese come dimostri tu largamente. Detto ciò chiudo qui le polemiche. Se tu hai tempo da perdere investilo pure da altre parti non per forza qui. Grazie. E ribadisco è la prima volta che noto atteggiamenti così in un forum che dovrebbe essere un punto di scambio di conoscenze e passioni...A quanto pare ad alcuni soggetti da fastidio l'ìignoranza. E io mi ritengo tale. Ma ben venga l'ignoranza e la voglia di conoscenza e salutiamo un po' di arroganza e frustrazione...rilassat(ev)i un attimo e sfogat(ev)i le frustrazioni in altri luoghi grazie :slight_smile: