## 5 Graphical User Interface (GUI)  
We used the Processing Development Environment, which is an open-source programming language, and the Integrated Development Environment (IDE) to develop an instrument graphical user interface (GUI). Figure 9 depicts the GUI screen running on the Raspberry Pi 4. At the top of the GUI, there are three buttons:--START, PAUSE, and STOP--as depicted in Figure 9. The START button has multiple functions, primarily to  
Figure 8: Photograph of instrument hardware integration: (**a**) front of the main board cover case; (**b**) back of main board cover case; (**c**) main board; (**d**) front of secondary board cover case; (**e**) secondary board; (**f**) back of secondary cover case; (**g**) angle board. Figure 9: Developed instrument GUI running in Raspberry Pi 4. This button is used to trigger the start signal to the Arduino Mega Microcontroller, to advance the OP07 operational amplifier gain configuration, and to resume measurements if the PAUSE button has been pressed. The PAUSE button is used to pause the motors and measurement collection, and the instrument remains paused until either the START or STOP button is pressed. The STOP button resets the microcontrollers, sending a reset command and restarting the entire characterization process. The sequence of actions to be taken on the GUI to configure the instrument parameters is displayed to the operator as a text message in the \"STATUS\" field, located below and to the left of the START, PAUSE, and STOP buttons, as shown in Figure 9.  
After configuring the operational amplifier gain and offset, it is necessary to define the resolution of the matrix data to be collected. This is done through the RESOLUTION slider, which sets the number of steps that the motors will rotate in each measurement. The operator sets the slider position and then clicks the SEND button next to the slider. A smaller number of steps results in a higher resolution matrix, with the time to complete a measurement being inversely proportional to the square of the resolution. The highest configurable resolution is 1 step, which corresponds to a matrix with 1200 \(\times\) 1200 pixels, and the lowest resolution is 20 steps, which corresponds to a matrix with 60 \(\times\) 60 pixels, as shown in Figure 10.  
The average of N (1 \(\leq\) N \(\leq\) 100) measurements stored per pixel is used to increase the signal-to-noise ratio of the measurement. This property is adjusted with the help of the ACCURACY slide on the GUI. It is important to note that a higher accuracy will result in a longer time for the instrument to complete a measurement matrix, following a linear trend, as can be seen in Figure 11.  
Once the accuracy and resolution settings are set, the instrument will position the receiving antenna at the starting point of the measurements, and the operator must then choose the type of characterization to be performed. Figure 9 depicts three buttons on the GUI: DISTANCE, ANGLE, and BOTH. The DISTANCE option is used when the operator wants to execute measurements by only varying the distance between the metasurface and the receiving antenna. The ANGLE button is used to perform measurements by only varying the angle between the metasurface and the receiving antenna, with a fixed distance. The BOTH option is used to execute measurements by both varying the angle and distance  
Figure 10: Graph depicting the time taken to complete one measurement cycle as a function of resolution, which is the number of steps the motors rotate at each measurement point. It is possible to observe a decay inversely proportional to the square of the resolution, indicating the relationship between the variables of resolution and time to complete a measurement cycle. As the pixel resolution in increases, meaning that the number of steps the XY motors rotate at each measurement point decreases, the time to complete the measurement cycle also increases. between the metasurface and the receiving antenna, first the angle variation and then the translation in the \(Z\) axis.