I need help trying to get a kit to work for school

I'm brand new to programing all together and my trade school teacher bought me an Arduino solar tracking kit by Keyestudio for me to work on. After following the instructions for its assembly and typing out the code (essentially copy & pasting it word for word), I cannot get the kit to work by itself without needing a computer plugged into the Arduino board in order for the kit to work, even though it should be able to work by itself after having the code uploaded. I don't know if there's something wrong with the code or if something is wrong with the pins.

However, the wires used in the picture that connects the power module to power the main board (last assembly instruction or the picture before project 11) is different to the wires that came with the kit since the picture shows a red and brown wire, whereas the kit were it has a purple and grey wire and I don't know if that has something to do with it.

Link to the kit's assembly instructions and codes: KS0530 DIY Solar Tracking Kit — DIY Solar Tracking Kit documentation

keyestudio sun_follower
  lesson 11
  sun_follower
  http://www.keyestudio.com
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#include <BH1750.h>
BH1750 lightMeter;

#include <dht11.h>    //include the library code:
dht11 DHT;
#define DHT11_PIN 7  //define the DHT11 as the digital pin 7

#include <Servo.h>
Servo lr_servo;//define the name of the servo rotating right and left
Servo ud_servo;//define the name of the servo rotating upwards and downwards

const byte interruptPin = 2;  //the pin of button;the corruption is disrupted

int lr_angle = 90;//set the initial angle to 90 degree
int ud_angle = 10;//set the initial angle to 10 degree;keep the solar panels upright to detect the strongest light
int l_state = A0;//define the analog voltage input of the photoresistors
int r_state = A1;
int u_state = A2;
int d_state = A3;
const byte buzzer = 6;
const byte lr_servopin = 9;
const byte ud_servopin = 10;

unsigned int light; //save the variable of light intensity
byte error = 15;//Define the error range to prevent vibration
byte m_speed = 10;//set delay time to adjust the speed of servo;the longer the time, the smaller the speed
byte resolution = 1;   //set the rotation accuracy of the servo, the minimum rotation angle 
int temperature;  //save the variable of temperature
int humidity; //save the variable of humidity

void setup() {
  Serial.begin(9600); //define the serial baud rate
  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  Wire.begin();
  lightMeter.begin();

  lr_servo.attach(lr_servopin);  // set the control pin of servo
  ud_servo.attach(ud_servopin);  // set the control pin of servo
  
  pinMode(l_state, INPUT); //set the mode of pin
  pinMode(r_state, INPUT);
  pinMode(u_state, INPUT);
  pinMode(d_state, INPUT);

  pinMode(interruptPin, INPUT_PULLUP);  //the button pin is set to input pull-up mode
  attachInterrupt(digitalPinToInterrupt(interruptPin), adjust_resolution, FALLING); //xternal interrupt touch type is falling edge; adjust_resolution is interrupt service function ISR

  lcd.init();          // initialize the LCD
  lcd.backlight();     //set LCD backlight

  lr_servo.write(lr_angle);//return to initial angle
  delay(1000);
  ud_servo.write(ud_angle);
  delay(1000);

}

void loop() {
  // put your main code here, to run repeatedly:
ServoAction();  //servo performs the action
read_light();   //read the light intensity of bh1750
read_dht11();   //read the value of temperature and humidity
LcdShowValue(); //Lcd shows the values of light intensity, temperature and humidity

//erial monitor displays the resistance of the photoresistor and the angle of servo
  /*Serial.print(" L ");
  Serial.print(L);
  Serial.print(" R ");
  Serial.print(R);
  Serial.print("  U ");
  Serial.print(U);
  Serial.print(" D ");
  Serial.print(D);
  Serial.print("  ud_angle ");
  Serial.print(ud_angle);
  Serial.print("  lr_angle ");
  Serial.println(lr_angle);*/
  //  delay(1000);//During the test, the serial port data is received too fast, and it can be adjusted by adding delay time */
}

/**********the function of the servo************/
void ServoAction(){
  int L = analogRead(l_state); //read the analog voltage value of the sensor, 0-1023
  int R = analogRead(r_state);
  int U = analogRead(u_state);
  int D = analogRead(d_state);
  /**********************system adjusting left and right序**********************/
//  abs() is the absolute value function
  if (abs(L - R) > error && L > R) {
    lr_angle -= resolution;//reduce the angle
    //    lr_servo.attach(lr_servopin);  // connect servo
    if (lr_angle < 0) { //limit the rotation angle of the servo
      lr_angle = 0;
    }
    lr_servo.write(lr_angle);  //output the angle of the servooutput the angle of servo
    delay(m_speed);
  
  }
  else if (abs(L - R) > error && L < R) { //Determine whether the error is within the acceptable range, otherwise adjust the steering gear
    lr_angle += resolution;//increase the angle
    //    lr_servo.attach(lr_servopin);    // connect servo
    if (lr_angle > 180) { //limit the rotation angle of servo
      lr_angle = 180;
    }
    lr_servo.write(lr_angle); //output the angle of servo
    delay(m_speed);
  
  }
  else if (abs(L - R) <= error) { //Determine whether the error is within the acceptable range, otherwise adjust the steering gear
    //    lr_servo.detach();  //release the pin of servo
    lr_servo.write(lr_angle); //output the angle of servo
  }
/**********************system adjusting up and down**********************/
  if (abs(U - D) > error && U >= D) {
    ud_angle -= resolution;//reduce the angle
    //    ud_servo.attach(ud_servopin);  // connect servo
    if (ud_angle < 10) { //limit the rotation angle of servo
      ud_angle = 10;
    }
    ud_servo.write(ud_angle);  //output the angle of servo
    delay(m_speed);

  }
  else if (abs(U - D) > error && U < D) { //Determine whether the error is within the acceptable range, otherwise adjust the steering gear
    ud_angle += resolution;//increase the angle
    //    ud_servo.attach(ud_servopin);  // connect servo
  if (ud_angle > 90) { //limit the rotation angle of servo
    ud_angle = 90;
    }    
  ud_servo.write(ud_angle);  //output the angle of servo
  delay(m_speed);

  }
  else if (abs(U - D) <= error) { //Determine whether the error is within the acceptable range. If it is, keep it stable and make no change in angle
    //    ud_servo.detach();  //release the pin of servo
    ud_servo.write(ud_angle);  //output the angle of servo
  }
}

void LcdShowValue() {
  char str1[5];
  char str2[2];
  char str3[2];
  dtostrf(light, -5, 0, str1); //Format the light value data as a string, left-aligned
  dtostrf(temperature, -2, 0, str2);
  dtostrf(humidity, -3, 0, str3);
  //LCD1602 display
  //display the value of the light intensity
  lcd.setCursor(0, 0);
  lcd.print("Light:");
  lcd.setCursor(6, 0);
  lcd.print(str1);
  lcd.setCursor(11, 0);
  lcd.print("lux");

//display the value of temperature and humidity
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.setCursor(2, 1);
  lcd.print("C");
  lcd.setCursor(5, 1);
  lcd.print(humidity);
  lcd.setCursor(7, 1);
  lcd.print("%");

//show the accuracy of rotation
  lcd.setCursor(11, 1);
  lcd.print("res:");
  lcd. setCursor(15, 1);
  lcd.print(resolution);
/*if (light < 10) {
  lcd.setCursor(7, 0);
    lcd.print("        ");
    lcd.setCursor(6, 0);
    lcd.print(light);
    } else if (light < 100) {
    lcd.setCursor(8, 0);
    lcd.print("       ");
    lcd.setCursor(6, 0);
    lcd.print(light);
    } else if (light < 1000) {
    lcd.setCursor(9, 0);
    lcd.print("      ");
    lcd.setCursor(6, 0);
    lcd.print(light);
    } else if (light < 10000) {
    lcd.setCursor(9, 0);
    lcd.print("      ");
    lcd.setCursor(6, 0);
    lcd.print(light);
    } else if (light < 100000) {
    lcd.setCursor(10, 0);
    lcd.print("     ");
    lcd.setCursor(6, 0);
    lcd.print(light);
    }*/
}

void read_light(){
  light = lightMeter.readLightLevel();  //read the light intensity detected by BH1750

}

void read_dht11(){
  int chk;
  chk = DHT.read(DHT11_PIN);      // read data
  switch (chk) {
    case DHTLIB_OK:
      break;
    case DHTLIB_ERROR_CHECKSUM:   //check and return error
      break;
    case DHTLIB_ERROR_TIMEOUT:    //Timeout and return error
      break;
    default:
      break;
  }
  temperature = DHT.temperature;
  humidity = DHT.humidity;
}

/*********function disrupts service**************/
void adjust_resolution() {
  tone(buzzer, 800, 100);
  delay(10);  //delay to eliminate vibration
  if (!digitalRead(interruptPin)){
    if(resolution < 5){
      resolution++;
    }else{
      resolution = 1;
    }
  }
}

Perhaps the computer USB is providing the power to make your kit rum. What is your power source when NOT plugged into the Arduino?

Hi @boatingjoe,

did you do the wiring according to the picture on page 87 of the kit documentation you linked above?

The list of material shows one 20cm M to F DuPont Wire (although with different colors) as used in the picture. Make sure you connect

G from Power Module to GND from Main Board (e.g. use grey)
V from Power Module to VIN from Main Board ( e.g. use purple)

This Lithium Power Module has

  • input for Solar Panel Power
  • output to store the energy in a lithium battery (which should be in the battery holder)
  • USB input to charge the battery alternatively
  • output to the expansion board (see the cables aboev)

And it has a switch with the following description:

Check if you have all those components installed and correctly wired, the batteries are loaded (you might have to load them via USB -> take care of the switch position) and then switch to "ON" ...

Good luck!
ec2021

Since the kit never came with a battery, I just googled what kind of battery it needed and I found that the kit needs a 18650 lithium-ion battery 3.7v 3400 mAh rechargeable battery and the battery itself is fully charged

Google found this: "Some types of 18650 have been modified adding either a button top and/or internal protection circuit. This can increase the physical length of an “18650” battery from 65mm to 70mm or in certain cases even longer. ".

If your battery has internal protection, it may require a bigger load to turn on. Measure the voltage on your Arduino with a DVM, digital volt meter, and see if the battery power is actually getting to the Arduino.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.