In this thesis, I present my work on the design, implementation, and experimental validation of an embedded automatic tracking control system for solar panels based on the ARM11 processor. The complete system integrates solar panels, photoresistors, photodiodes, stepper motors, a three-dimensional sliding support frame, and the ARM11 processor as the core controller. By comparing the resistance values of photoresistors and exploiting the biological principle of how three-eyed insects perceive light, the system drives multiple motors through a single ARM11 unit, automatically rotating the solar panels to maintain an optimal angle with respect to the sun. This approach achieves both multi-functionality and automatic solar tracking in one machine. Experimental results confirm that the system not only enhances the utilization efficiency of solar energy but also significantly reduces costs. In the following sections, I describe the entire research process, including the theoretical background, hardware design, software architecture, system implementation, and test results.
1. Introduction and Background
The global energy landscape is dominated by non-renewable resources such as petroleum, natural gas, coal, and nuclear fission fuels, which currently account for approximately 90% of total energy consumption. This dependence is unsustainable, as these resources are finite and their use leads to environmental degradation. Renewable energy sources—especially solar energy—offer a promising alternative. Solar energy is abundant, clean, and universally accessible. However, its intermittent nature and the varying angle of sunlight throughout the day require sophisticated tracking mechanisms to maximize collection efficiency. Theoretical analyses indicate that the difference in collected energy between a tracking solar panel system and a fixed one can be as high as 35%. Therefore, developing effective tracking controllers is of great practical value.
Traditional solar tracking controllers often rely on precomputed astronomical data based on the geographic coordinates of the installation site. These systems require complex calculations, extensive parameter settings, and are difficult to move or reconfigure. In contrast, my proposed system eliminates the need for site-specific data or complicated software algorithms. It is robust against adverse weather conditions such as rain, clouds, and strong winds. The system is pre-programmed with protective routines, has excellent dust resistance, high wind resistance, is easy to operate, and has low manufacturing costs. Compared with fixed installations, my automatic tracking system can improve power generation by approximately 35% while reducing costs by about 25%.
2. Biological Principle of Three-Eyed Insect Light Perception
A key innovation of my research is the application of the biological principle of three-eyed insects, such as locusts, to solar tracking. Through a series of controlled experiments, I demonstrated that a locust with its two large compound eyes covered can still find a small hole in a dark box using its three simple eyes (ocelli). These ocelli act as auxiliary visual organs that detect light intensity and direction. The locust first compares the light received by the left and right ocelli, adjusting its body horizontally until the light is centered between them. Then it compares the lower ocellus with either of the upper ocelli, adjusting its body vertically until all three ocelli receive equal illumination. This two-step process allows the insect to orient its head directly toward the light source. I adapted this biological strategy to control the two-axis orientation of solar panels. Three photoresistors are placed on each solar panel in a triangular configuration, mimicking the three ocelli. The left and right photoresistors control the horizontal rotation, while the upper photoresistor and one of the horizontal photoresistors control the vertical tilt. This design is elegant, cost-effective, and requires only simple analog comparison circuits.
3. System Architecture and Overall Design
The overall system architecture is composed of several functional modules: information processing, information storage, interface management, human-machine interaction, automatic tracking, networking, and power management. The core processor is the Samsung S3C6410, an ARM11-based application processor that I selected for its high performance, low power consumption, and rich peripheral interfaces. The S3C6410 features an ARM1176JZF-S core with 16 KB instruction cache, 16 KB data cache, and supports clock frequencies up to 667 MHz. It integrates an MFC (Multi-Format Video Codec), 2D/3D graphics acceleration, and multiple communication interfaces, making it highly suitable for embedded control applications.
The automatic tracking module consists of photoresistors, two stepper motors (models 57HS22 and 39HS02), M542 digital stepper drivers, an HBSC-101P charge controller, a storage battery, and a three-dimensional sliding support frame. The control strategy is based on comparing photoresistor values. Every 20 minutes, the system compares the left and right photoresistors. If there is a difference, it sends a command to the horizontal motor driver to rotate the solar panel until the resistances are equal. Then, it compares the upper photoresistor with one of the horizontal ones. If a difference exists, it activates the vertical motor to adjust the tilt until both values match. After this adjustment, the system rests for another 20 minutes. For the vertical adjustment, the system rechecks every two weeks because the sun’s declination changes slowly. This intermittent operation reduces energy consumption while maintaining accurate tracking.
I also designed a novel three-dimensional sliding support frame that leverages the geometric principle of the “three centers of a triangle” (centroid, circumcenter, and incenter coinciding in an equilateral triangle) and principles of physics to ensure balance, low friction, and structural stability. The frame supports the solar panel evenly and allows smooth rotation in both horizontal and vertical axes. The sliding balancer, which I designed specifically for this project, protects the stepper motors from excessive torque and maintains the frame in a horizontal position at all times.

4. Hardware Design
4.1 Information Processing Module
The information processing module is built around the S3C6410 processor. The processor’s key features include:
| Feature | Description |
|---|---|
| Core | ARM1176JZF-S (ARM11 family) |
| Architecture | 32-bit RISC, 8-stage pipeline |
| Clock Speed | Up to 667 MHz (at 1.2V), 553 MHz (at 1.1V) |
| Caches | 16 KB I-cache / 16 KB D-cache, 16 KB I-TCM / 16 KB D-TCM |
| External Bus | 64-bit AXI, 32-bit AHB, APB |
| Multimedia | MFC (MPEG-4/H.263/H.264 decode and encode), JPEG codec, 2D graphics accelerator |
| Peripherals | USB 2.0 Host/OTG, UART, I2C, SPI, I2S, AC97, PWM, Touch Screen, Camera, LCD, SD/MMC, Ethernet (via external PHY) |
| Power | Multiple power domains for independent control |
The processor handles signal acquisition from the photoresistor bridge circuits, executes the tracking algorithm, communicates with motor drivers through RS-232, and manages network communication.
4.2 Information Storage Module
For program execution and data storage, I designed a memory system comprising SDRAM and NOR/NAND flash memory.
SDRAM: Two Samsung K4X1G163PE Mobile DDR SDRAM chips are used in parallel to provide 128 MB of 32-bit memory. Each chip has a 16-bit data bus, operates at 3.3V, and supports auto-refresh. The SDRAM is used for running the operating system and application programs, providing fast read/write access.
NAND Flash: A 128 MB Samsung K9F2G08U NAND flash chip is used for storing the bootloader, Linux kernel, file system, and application data. NAND flash offers high storage density and low cost, and allows booting directly from the chip.
| Memory Component | Model | Capacity | Bus Width | Purpose |
|---|---|---|---|---|
| Mobile DDR SDRAM | K4X1G163PE | 64 MB per chip x2 = 128 MB | 16-bit per chip, 32-bit total | Runtime code/data |
| NAND Flash | K9F2G08U | 128 MB | 8-bit I/O | Bootloader, OS, filesystem |
4.3 Interface Module
I designed several critical interfaces: UART serial ports, USB host/OTG, and LCD controller.
The UART module uses a MAX3232CES transceiver for RS-232 level conversion, which operates with a 3.3V supply and provides true RS-232 performance using four 0.1μF external capacitors. The system includes four UART channels; UART0 is used for debugging and boot message output, while other channels can be selected for communication with external motor drivers or sensors.
The USB interface includes a USB Host port and a USB OTG port. The host port supports connection to USB cameras, keyboards, mice, and storage devices, while the OTG port allows connection to a PC for synchronization and fast image download during debugging. The USB circuitry is designed with proper pull-down resistors and power distribution.
The LCD interface supports TFT color screens up to 720×480 resolution. The controller supports RGB, I80, ITU-R BT.601 interfaces, and TV encoder FIFO interfaces. For human-machine interaction, I selected a VPG12864T dot-matrix graphic LCD module with a 128×64 pixel array, capable of displaying 4 lines of 16×16 Chinese characters. The touch screen interface uses S3C6410’s internal ADC with an external ADS7843 controller for touch position detection.
4.4 Automatic Tracking Module
This module is the heart of the system. It comprises the following elements:
Photoresistors: Three identical photoresistors (cadmium sulfide material) are positioned on the solar panel: two on the left and right edges of the lower side, and one at the center of the upper edge. Their resistance decreases as light intensity increases. The arrangement forms an equilateral triangle, directly implementing the three-eyed insect principle.
Stepper Motors: Two-phase stepper motors—57HS22 for horizontal rotation and 39HS02 for vertical tilt—provide precise positioning. These motors rotate by a fixed angle for each digital pulse, allowing accurate speed and position control.
M542 Driver: The M542 is a microstepping driver featuring three-state control technology and dual-pulse functionality. It can operate in full-step or half-step modes, with adjustable current to reduce heat generation. The driver interprets pulse and direction signals from the ARM11 to drive the stepper motors.
HBSC-101P Controller: This controller manages the charging of the storage battery from the solar panels and regulates current output. It ensures safe operation and prolongs battery life.
Three-Dimensional Sliding Support Frame: Designed using geometric and mechanical principles, the frame supports the solar panel while providing minimal friction. Several prototypes were tested, and the final design ensures balance and resistance against wind loads.
Sliding Balance Controller: This auxiliary mechanism maintains the frame’s horizontal orientation and protects the motors from sudden torques caused by wind gusts or mechanical shocks.
The connection of the tracking module to the ARM11 is illustrated by the following table:
| Component | Interface with ARM11 | Function |
|---|---|---|
| Photoresistor 1 (left) | Analog input via ADC | Measures light intensity for horizontal comparison |
| Photoresistor 2 (right) | Analog input via ADC | Measures light intensity for horizontal comparison |
| Photoresistor 3 (upper) | Analog input via ADC | Measures light intensity for vertical comparison |
| Motor driver (horizontal) | RS-232 / GPIO pulse | Controls 57HS22 stepper motor |
| Motor driver (vertical) | RS-232 / GPIO pulse | Controls 39HS02 stepper motor |
| HBSC-101P | I2C or digital I/O | Battery charge management |
4.5 Network Module
For long-distance monitoring and remote control, I integrated wired Ethernet using the DM9000AEP high-integration Ethernet controller. The DM9000 supports 10/100 Mbps operations and interfaces with the S3C6410 through a 16-bit data bus. It includes an internal 16 KB SRAM and supports IEEE 802.3x flow control. The address and data lines, interrupt line, and chip select are connected accordingly. This module enables the system to be part of a larger network of solar trackers, allowing centralized management and data collection.
4.6 Power Management Module
The system is powered by a 12V DC source (battery or external supply). I used two voltage conversion stages to provide +5V and +3.3V. A switching regulator (XC6219 PWM type) provides high efficiency and low noise for the core voltage and I/O supplies. The 5V supply powers camera, USB, and certain peripherals, while the 3.3V supply powers the processor’s I/O, SDRAM, LCD, and other logic circuits. The power module includes appropriate filtering and decoupling capacitors for stability.
5. Software Design and Implementation
5.1 Choice of Embedded Operating System
After comparing several real-time operating systems—VxWorks, μC/OS-II, eCos, and Linux—I selected Linux as the software platform due to its open-source nature, robust networking capabilities, excellent portability, and strong community support. Linux can be tailored to embedded systems through kernel configuration and cross-compilation. The key characteristics of Linux that benefit my design include:
| Feature | Advantage for the Solar Tracking System |
|---|---|
| Real-time scheduling | Priority-based preemptive scheduling, good for time-critical motor control |
| Memory management | Virtual memory support, efficient use of SDRAM and flash |
| File system | Support for multiple file systems (cramfs, ubifs), reliable storage of configuration data |
| Network stack | Full TCP/IP support, essential for remote monitoring |
| Device drivers | Rich set of drivers for USB, Ethernet, LCD, touch screen, etc. |
| Cross-platform development | Facilitates development on PC and deployment on ARM |
5.2 Linux System Porting
I established a cross-development environment on a host PC running Linux, using the arm-linux-gcc-4.5.1 cross-compiler toolchain. The target board was the S3C6410-based development board. I set up a TFTP server for file transfer and an NFS server to mount the root file system over the network during development. The porting steps included:
-
Bootloader (Supervivi) porting: The bootloader initializes hardware, sets up memory, and loads the kernel. Supervivi was specifically adapted for S3C6410 and supports NAND flash boot. Its startup sequence involves two stages: assembly code for low-level initialization and C code for loading the Linux kernel.
-
Linux kernel porting: I used Linux kernel version 2.6.36. The kernel source was modified to support the S3C6410 architecture. Key modifications included: the system entry assembly file, I/O port mapping, interrupt initialization (entry-armv.c), and machine-specific configuration (mach-smdk6410.c). I configured the kernel using `make menuconfig` to enable devfs support, MTD support for NAND flash, the desired file systems (cramfs, ubifs), and required device drivers. The kernel was compiled with `make zImage` and downloaded to the board via TFTP.
-
Root file system porting: I created a minimal root file system using BusyBox. The file system included necessary directories (/dev, /etc, /lib, /proc, /tmp, /var, /home), configuration files (/etc/inittab, /etc/init.d/rcS, /etc/fstab), device nodes, and shared libraries. Using BusyBox’s static linking option simplified library dependencies. The final file system was packed into a CRAMFS image using `mkfs.cramfs` and then written to NAND flash.
5.3 Device Driver Design and Porting
I developed or adapted device drivers for the following peripherals:
USB Driver
The S3C6410 contains a USB host controller compliant with OHCI. The driver was ported by removing PCI-specific code, setting the controller base address to 0x49000000, initializing interrupts, setting the root hub port count to 2, and adding platform initialization functions. The driver supports both USB 1.1 low/full speed devices. I verified that USB storage devices and USB peripherals function correctly.
DM9000 Network Driver
The DM9000 driver was obtained from the manufacturer’s source code and modified to match the hardware connections. The base address was set according to the chip-select configuration (e.g., nGCS4 gives base 0x20000000). The interrupt line was configured to use EINT7. The driver implements device initialization, packet transmit/receive, and interrupt handling. After integration into the kernel, the Ethernet interface operated reliably for network communication.
LCD and Touch Screen Drivers
For the LCD, I implemented a frame buffer driver. The initialization function configures the LCD controller registers (VCLK, sync signals, pixel clock), allocates a video buffer in memory, and registers the frame buffer device. The `fb_info` structure is populated with `fb_ops` functions for reading/writing the buffer, mmap operations, and ioctl calls. The driver supports 16bpp or 24bpp color formats depending on the display.
For the touch screen, I used the S3C6410’s internal touch controller (with ADS7843). The driver implements open, read, poll, ioctl, and release operations. The hardware generates an interrupt on a touch event, the driver measures X/Y coordinates using the ADC, and reports the position to the input subsystem.
5.4 Application Development with Qtopia
I selected Qtopia (Qt/Embedded) as the graphical user interface framework. It is a C++ cross-platform framework that supports touch input and is well suited for embedded Linux systems. I compiled tslib for touch screen calibration and then built Qtopia with the appropriate cross-compiler options. The application software was structured as a multi-threaded system to handle concurrent tasks:
| Thread | Function |
|---|---|
| Main thread | Initializes GUI, sets up signal/slot connections |
| Tracking thread | Periodically reads photoresistor values, executes tracking algorithm, sends motor commands |
| Network thread | Listens for remote commands and transmits status data to PC |
| User interface thread | Updates LCD display, handles touch events |
The graphical interface provides screens for user login, network management, information extraction, and device control. The tracking algorithm can be represented mathematically as follows:
Let \(R_L\), \(R_R\), and \(R_U\) be the resistance values of the left, right, and upper photoresistors, respectively. The system computes:
\[
\Delta_H = R_L – R_R
\]
If \(|\Delta_H| > \epsilon_H\), where \(\epsilon_H\) is a predetermined deadband, the horizontal motor rotates in the direction reducing the absolute difference. The rotation stops when \(|\Delta_H| \le \epsilon_H\). Then the vertical error is:
\[
\Delta_V = R_U – R_L \quad \text{(or } R_U – R_R \text{)}
\]
Similarly, if \(|\Delta_V| > \epsilon_V\), the vertical motor adjusts the tilt until \(|\Delta_V| \le \epsilon_V\). The deadbands \(\epsilon_H\) and \(\epsilon_V\) are chosen to avoid continuous oscillation (typically a few percent of the full-scale resistance).
The system operates on a time cycle: horizontal adjustments every 20 minutes, vertical adjustments every 2 weeks. For improved performance, I incorporated a predictive element based on solar motion:
\[
\theta = \omega t
\]
where \(\theta\) is the angular position of the sun, \(\omega = 15^\circ/\text{hour}\), and \(t\) is the time since sunrise. Although the primary feedback is purely photoresistor-based, the time schedule ensures the system does not react to transient cloud shadows.
6. System Testing and Results
6.1 Testing Environment
The system was tested in a real outdoor environment. The hardware included:
- Target machine: ARM11 S3C6410 processor board
- OS: Linux 2.6.36 embedded system
- Peripherals: LCD touch screen, USB storage, Ethernet
- Debug interfaces: JTAG, RS-232
- Tracking device: 3-D sliding support frame, 57HS22 and 39HS02 stepper motors, M542 drivers, HBSC-101P battery controller
- Host PC: Windows 2007/Ubuntu with cross-compiler
6.2 Hardware Testing
I followed a systematic procedure: first, I verified the power supply voltages and current. Then I tested the ARM11 minimum system by running simple LED blink programs. Next, I tested each peripheral individually: UART loopback test, USB storage recognition, LCD color bar display, and network ping. After all interfaces passed, I connected the motor drivers and photoresistors to verify the signal acquisition and motor response.
One issue encountered was excessive motor rotation. The cause was an overly high pulse frequency. I solved it by adding a software delay in the pulse generation to reduce the stepping rate. Another issue was excessive friction in the sliding support frame. I added a double-wheel sliding balance mechanism to reduce friction. A third issue was that sunlight was not centered on the solar panel; this was corrected by repositioning the outer photoresistors slightly inward and recalibrating the threshold levels.
6.3 Software Testing
Software testing involved stepwise validation of the bootloader, kernel, file system, and drivers. I used a “hello world” program to verify the tool chain and process. The program was cross-compiled and then uploaded to the board via TFTP, USB, or NFS. All methods worked correctly. I tested the serial communication by echoing characters between the target board and a PC. The LCD displayed solid colors with no defects, and the touch screen properly aligned after calibration.
6.4 Performance Comparison
To evaluate the tracking effectiveness, I compared my automatic tracking system with several traditional tracking methods. The results are summarized in the table below:
| Tracking Method | Positioning Accuracy (%) | Battery Capacity Improvement vs. Fixed (%) |
|---|---|---|
| Clock-based | 76.13 | 20.73 |
| Pressure-difference | 81.70 | 23.50 |
| Controlled-release | 86.30 | 22.63 |
| Photoresistor-based (my system) | 93.90 | 39.83 |
The proposed system achieved the highest positioning accuracy and the largest improvement in battery capacity when compared with a fixed installation. The photoresistor-based feedback, combined with the biological three-eye principle and the intermittent adjustment schedule, proved both effective and energy-efficient.
6.5 Experimental Validation
During the outdoor experiments, the system was able to track the sun from sunrise to sunset. The solar panels maintained near-perpendicular orientation to the sun’s rays throughout the day. The vertical adjustment, performed every two weeks, successfully accounted for the seasonal variation of the sun’s declination. The measured power output increased by about 35% over a fixed panel positioned at an optimal tilt angle. The system remained stable under partial cloud cover, quickly correcting any misorientation after the sun reappeared.
The following figures show the experimental process and the system in operation. The solar panels remained well aligned with the sun, as evidenced by the uniform shadows and electrical measurements.
7. Conclusion and Future Work
In this thesis, I have presented the design, implementation, and validation of an ARM-based automatic tracking system for solar panels. The major contributions are:
-
I proposed a novel biological principle based on the three-eyed insect light recognition and applied it to solar panel orientation. This principle simplifies the sensor arrangement and makes the control algorithm intuitive and robust.
-
I designed a three-dimensional sliding support frame and a sliding balance controller that ensure stability, low friction, and motor protection. These mechanical structures are practical, cost-effective, and suitable for mass production.
-
I implemented a multi-terminal control architecture: one ARM11 system can control multiple solar panels, significantly improving resource utilization and reducing per-panel cost.
-
I integrated low-power, low-cost hardware components (S3C6410, photoresistors, M542 drivers) while maintaining high tracking accuracy and system reliability.
-
I developed a complete graphical user interface based on Qtopia and Linux, providing local and remote management capabilities. The system supports real-time data recording, network communication, and manual override.
Experimental results show that the system’s positioning accuracy reaches 93.9%, and the stored battery capacity improves by about 35% compared with fixed solar panels. The system is stable, low-cost, easy to operate, and highly adaptable to various geographical locations without requiring pre-calculated solar ephemeris data.
Future improvements may include:
- Optimizing the hardware layout and adding protective enclosures to withstand harsh weather conditions over long periods.
- Enhancing the network functionality to support mesh networking or cloud-based monitoring for large-scale solar farms.
- Integrating motor drivers and the HBSC-101P controller directly into the ARM board to further reduce cost and size.
- Implementing intelligent fault diagnosis and self-calibration algorithms to handle sensor drift and mechanical wear.
- Adding a wireless module (Wi-Fi or ZigBee) for wireless sensor networks and easier installation.
In conclusion, the ARM-based solar panel automatic tracking system presented here provides a compelling solution to improve solar energy harvesting. Its practical design, reliable performance, and economic advantages make it a strong candidate for a wide range of applications, from residential rooftop installations to large-scale photovoltaic power plants.
