Monday, February 5, 2024

Arduino Powered Colloidal Silver Maker with Nokia 5110

I saw that someone had copied my colloidal silver maker design and their design was trending at number one when you search for Arduino Colloidal Silver Maker.  So I thought I would improve my previous design to use a Nokia 5110 LCD in the design instead of the 1602 LCD.  This Nokia display gives five or six lines of display so you can see more information.

I use a computer power AC adapter to power the colloidal silver maker at about 19 VDC. Most people say that 18 to 20 volts is ideal for this application. 

This is a picture of the Nokia display.  I added the ability to see the current setting as it reduces every time the current exceeds 1ma.  What else do you think I should display on the LCD?


Adding the Nokia display is easy as it just plugs into the Arduino Uno except for jumpers to 3.3 volts and ground.  Voltage dropping resistors are not needed as the Nokia chip is 5 volt tolerant.  You can jumper the BL (backlight) to 3.3 volts or add a jumper or resistor right on the LCD.

The top view has not changed from the previous version.  There is a voltage divider so the arduino analog inputs would not be damaged and a L293 motor driver IC module.  The motor driver has its own internal 5 volt regulator.  Use a separate ground for the voltage divider to avoid motor noise.


Here is the code:

#include <Adafruit_GFX.h>

#include <Adafruit_PCD8544.h>

// Software SPI (slower updates, more flexible pin options):

// pin 7 - Serial clock out (SCLK)

// pin 6 - Serial data out (DIN)

// pin 5 - Data/Command select (D/C)

// pin 4 - LCD chip select (CS)

// pin 3 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// Pins for Colloidal silver maker

int CS1=10;

int CS2=11;

// Pins for stirrer

int Stir=9;  // Moved to pin 9!

int Shutdown=0;

// Variables for time

int hours;

int minutes;

int seconds;

long hour = 3600000; // 3600000 milliseconds in an hour

long minute = 60000; // 60000 milliseconds in a minute

long second = 1000; // 1000 milliseconds in a second

float AN1=0.0; // Analog inut 1

float AN2=0.0;

float temp1=0.0;

float temp2=0.0;

float CUR=0.0;  // Current in ma

int CurSet=255; // Current Setting

void setup()   {

  display.begin();

  display.setContrast(60);  // Default is 50

  display.clearDisplay();   // clears the screen and buffer

  pinMode (CS1, OUTPUT);

  pinMode (CS2, OUTPUT);

  pinMode (Stir, OUTPUT);

}

void loop() {

  display.setTextSize(1);

  display.setTextColor(BLACK);

  // Reverse current every 30 minutes

  if (Shutdown==0){

    analogWrite(Stir, 128); // 1/2 supply voltage

    if (minutes<30){

      analogWrite(CS1, 0);

      analogWrite(CS2, CurSet);    }

    else{

      analogWrite(CS2, 0);

      analogWrite(CS1, CurSet);    }

  }

  else{

    analogWrite(CS1, 0);

    analogWrite(CS2, 0); 

    analogWrite(Stir, 0);     }

  temp1=analogRead(A1);

  AN1=((temp1*5.0)/1024.0)*4.0;

  temp2=analogRead(A2);

  AN2=((temp2*5.0)/1024.0)*4.0;

  CUR=abs(AN1-AN2);

  if (CUR > 1.0) {CurSet--;} // Reduce PWM

  display.clearDisplay();

  display.setCursor(0,0);

  display.print("V1:");

  display.print(AN1);  // Analog 1

  display.setCursor(0,10);

  display.print("V2:");

  display.print(AN2);  // Analog 2

  display.setCursor(0,20);

  display.print("Cur:");

  display.print(CUR);  // Current

  display.setCursor(0,30);

  display.print("CurSet:");

  display.print(CurSet);  // Current Setting

  // print the number of seconds since reset:

  long timeNow = millis();

  hours = (timeNow) / hour;             

  minutes = ((timeNow) % hour) / minute ;

  seconds = (((timeNow) % hour) % minute) / second;

  display.setCursor(0, 40);

  display.print("Time:");

  display.print(hours);

  display.print(":");

  display.print(minutes);

  display.print(":");

  display.print(seconds);

  display.display();

  if (hours>3){ // Time under 4 hours

    Shutdown=1;

    }

  if (CUR>2.0){ // Current under 2ma

    Shutdown=1;

    }

  delay(500);

}

There was an error in the connections to the L293 motor driver in my earlier version.  The VIN of 19-20 volts goes to pin 8.  Also the stirrer has been moved to D9 as the Nokia LCD needs D3.


No comments: