Off-grid Solar PV Panel project: Difference between revisions

From Sensors in Schools
Jump to navigation Jump to search
No edit summary
Line 126: Line 126:


== Python - Saving Data in a Text File ==
== Python - Saving Data in a Text File ==
<syntaxhighlight lang="python">
import serial
# from datefime module import datetime class
from datetime import datetime
if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
    ser.reset_input_buffer()
   
    while True:
        if ser.in_waiting > 0:
            line = ser.readline().decode('utf-8').rstrip()
            try:
                voltage = int(line)
            except:
                voltage = 0
            voltage_corrected = voltage * (5.0 / 1023.0) * 2
           
            voltage_string = '{0:.3f}'.format(voltage_corrected)
           
            now = datetime.now()
            # The strftime method is used to create formatted Strings
            time_stamp = now.strftime("%Y-%b-%d %H:%M:%S")
            print(f'Current time is {time_stamp} and corrected voltage {voltage_string}')
           
            if now.strftime("%S") == "00":
                # save the data in a file every minute
                data = time_stamp + "," + voltage_string + "\n"
                f = open('/home/pi/Arduino/small_solar_arduino_data.txt','a')
                f.write(data)
                f.close()
                print("Data saved")
</syntaxhighlight>

Revision as of 11:12, 10 April 2023

Arduino IDE Installation and Configuration on a Raspberry Pi

Arduino LED Blink Program

  • Program lights up Arduino UNO on-board LED connected to pin 13 for 1 second.

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

*/

// the setup function runs once when you press reset or power the board

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level) = 1 = 5V supply
  delay(1000);                       // wait for 1 second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW = 0 = 0V supply
  delay(1000);                       // wait for 1 second
}

Arduino UNO - Safety

  • Wear eye protection.
  • Always get a teacher to inspect your circuit before powering up.
  • Wear cotton shirts and pants and closed shoes.
  • Even low voltages can cause burns because wires can heat up if shorted.

Arduino UNO - Building a LED Blink Circuit on a Breadboard

  • Build an external LED Blink Circuit for the Arduino UNO.

Arduino UNO - Building a Mini-Solar PV Circuit

  • Demonstration on how to build a small PV circuit that charges a battery on an Arduino UNO.
  • The circuit incorporates a Voltage Divider circuit.
  • Click on Image below to download and watch video.

https://www.dropbox.com/s/3ugfnajegfk5rmb/Mini%20Solar%20PV%20Circuit.mp4?dl=0

Raspberry Pi - Python Introductory Lesson

  • Install software to help program in Python
  • Explore some simple python coding and learn about indentation to delineate code blocks

Raspberry Pi and Arduino Serial Communication

  • Write code for the Arduino UNO to send data to the Raspberry pi using Serial communication.
  • Write code in Python on the Raspberry Pi to receive data from the Arduino UNO using Serial communication.
  • Raspberry Pi requires the installation of:
    • sudo apt install python3-pip - pip to install python packages
    • python3 -m pip install pyserial - pySerial Library

Python code for Raspberry Pi to receive serial communication from the Arduino UNO

import serial

if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
    ser.reset_input_buffer()
    
    while True:
        if ser.in_waiting > 0:
            line = ser.readline().decode('utf-8').rstrip()
            print(line)

Arduino UNO - Reading the Voltage of the Small Solar PV Panel

  • Learn how to read voltage readings from a small Solar PV panel connected to an Arduino UNO using a voltage divider circuit and analog pin A2.


Python - Reading Solar PV Voltage using Python

  • Learn how to:
    • Read solar PV voltage analog values in Python
    • Convert the solar PV values into voltage
    • Format the voltage values to three decimal points.


import serial

if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
    ser.reset_input_buffer()
    
    while True:
        if ser.in_waiting > 0:
            line = ser.readline().decode('utf-8').rstrip()
            try:
                voltage = int(line)
            except:
                voltage = 0
            voltage_corrected = voltage * (5.0 / 1023.0) * 2
            
            # https://thepythonguru.com/python-string-formatting/
            #  {0} - first formatted term. If there were more terms they would be shown as {1}, {2}, etc.
            #  .3  - three decimal points
            #   f  - floating point numbers = decimal numbers
            #   .format() - variables to format
            voltage_string = '{0:.3f}'.format(voltage_corrected)

Python - Adding a Time Stamp

Python - Saving Data in a Text File

import serial
# from datefime module import datetime class
from datetime import datetime

if __name__ == '__main__':
    ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
    ser.reset_input_buffer()
    
    while True:
        if ser.in_waiting > 0:
            line = ser.readline().decode('utf-8').rstrip()
            try:
                voltage = int(line)
            except:
                voltage = 0
            voltage_corrected = voltage * (5.0 / 1023.0) * 2
            
            voltage_string = '{0:.3f}'.format(voltage_corrected)
            
            now = datetime.now()
            # The strftime method is used to create formatted Strings
            time_stamp = now.strftime("%Y-%b-%d %H:%M:%S")
            print(f'Current time is {time_stamp} and corrected voltage {voltage_string}')
            
            if now.strftime("%S") == "00":
                # save the data in a file every minute
                data = time_stamp + "," + voltage_string + "\n"
                f = open('/home/pi/Arduino/small_solar_arduino_data.txt','a')
                f.write(data)
                f.close()
                print("Data saved")