I am a co-author of this project, and my partner is owed as much credit as I am for the way this project came together.
This project is characterized by a conveyor belt that automatically sorts colored blocks. When unsorted colored blocks are input, the system will output sorted colored blocks. The videos above provide a clear illustration of the system's function. The remainder of this page is populated with fragments related to the engineering that went into this project.
A high-level description of an Arduino board can be reduced to a microcontroller (MCU) and a printed circuit board (PCB), emphasizing the MCU as the essential tool and the PCB as its interfacing environment. The ATmel ATmega 328P (328P) MCU plus an Arduino PCB submit the Arduino Uno to this description. Interaction with the 328P is facilitated by the PCB it sits on, however, plenty of users elect to interface with these chips using a Custom PCB or even just a breadboard.
MCU instructions are typically programmed in C or C++ using an Integrated Development Environment (IDE), like Atmel's Microchip Studio. Other languages and IDE's like Assembly or Python and Visual Studio or Arduino IDE can be used. The applications presented here are written mostly in C using Microchip Studio.
These instruction files (scripts) are compiled, or translated, into files an MCU can understand, called hex (hexadecimal) files, and uploaded to the MCU from a computer. Instructions given to an MCU often map a system of inputs to program logic which maps a system of outputs back through the PCB for some function, like controlling an LED.
There are a number of fundamental concepts and components essential for interaction with Arduino boards. The following is a very brief description of those most universal to the successful marriage of software and hardware.
A real synthesis of these basic elements can be illustrated by an Arduino and a mechanical push button used to light up an LED. Pressing the button completes a circuit that sends a 5 volt (high) signal to a pin connected to one end. The unpressed case sends the same 5 volt signal to ground and a low signal to the pin. Software instructs the MCU to read the signal from the memory address register (MAR) corresponding to the input pin and submit the binary signal to program logic. The logic maps the input to an output, responding through a different pin using its unique MAR. The output pin sends a 5 or 0 volt signal to the LED circuit, either turning it on or off depending on the MCU's instructions.
The Arduino Mega 2560 is comprised of an Atmel ATmega 2560 (2560) microprocessor and Arduino board. The microprocessor's datasheet and Arduino board pinout are used for the marriage of software and hardware. Remaining site content is confined to applications using this microcontroller and board but can be replicated in others following the same principles.