Industrial training or internship is a period during which university students are sent to the field or to companies, to acquire practical skills as opposed to just theory offered at universities. As a requirement for an award of any degree, all universities in Uganda are entitled to end the academic year in the month of May, to allow their students to undergo a two-months training in field. The students MUST be supervised at least twice by their university lecturers (supervisors) and are required to make comprehensive training reports for an award of marks from the university.
At Neriko, we welcomed 7 students from different universities including Makerere University (1), Kyambogo University (2), Ndejje University (1), Mbarara University of Science and Technology (1) and Kampala International University (2). The students were both in their 3rd and 4th years of study, pursuing courses that include Electrical engineering, Mechatronics and Biomedical Engineering and Bachelor of Telecommunications engineering.
The universities recommend more practical teachings to their students, to the levels which are fundamental in industrial practices and general moral behaviour (work ethics).
Use of tools: We discussed how to use electronics tools, including a multi-meter, oscilloscope, signal generator and lab power supplies. The students got practical hands-on with these tools ranging from device configurations, safe operating procedures and using other possible applications. It was realized that students don’t know how to use even the basic tools, like a multimeter which measures basic electrical parameters. We also covered breadboard basics including board layout and connection procedure.
Target: C Programming Basics from First Principles. We covered the C programming language Overview, C programming language environment setup in Code Blocks software, C Programming Structure, language Basic Syntax, use of header files and language Data Types. We also discussed the use of variable modifiers including %s, %e, %d, %f, %c , C reserved words, use of braces in detail, commenting forms, non-printable C characters (\n,\t,\r etc) and use of both scanf and printf functions in C.
C Variables, C constants and literals, C operators (arithmetic, relational, assignment, Misc Operators, bitwise and logical) and operator precedence in C. We discussed the use of integer, floating point, character and string literals in C, use of #define directive and const keyword.
C/C++ Variables, C/C++ constants and literals, C/C++ operators (bitwise and logical), C/C++ functions, and C/C++ inbuilt methods including strcmp, strlen, strcpy, toupper, integer to string and string to integer conversions, tolower and math functions including pow, sqrt, tan, and cos among others. All modules were handled with examples and applicable exercises.
Target: C/C++ Decision making. We covered the C/C++ control statements including if statement, if else statement, if…else if…else statement, nested if statements, switch case and nested switch statement and the use of ?: operator in decision making. Examples included the students grading system, odd/prime number identifier, and number swapping example.
Target: C/C++ LOOPS and Arrays. We covered the C/C++ loops including for loop, do-while, while loop and the nested loops. We also covered the use of arrays and pointers, applications of for loop in array navigation, and more advanced C/C++ programming examples including factorial calculations (for loop example), and array maximum and minimum values finder among others. We also learnt and demonstrated infinite loops using while, do while and for loops in C.
Target: Arrays, pointers and C strings. We learnt about character arrays and how to store strings using pointers in C programming language. We discussed how to create a string in C, creating a pointer for the string, accessing string via a pointer, using a pointer to store a string, arrays of strings using two-dimensional arrays and accessing values pointed by an array of pointers. This was the hardest programming segment for students to understand.
Target: Use of components from first principles. We demonstrated the use of the NE555 logic timer in a stable and monostable modes and observed the output on digital Oscilloscope, we made a frequency divider circuit using CD4017BE counter and a logic timer. We also demonstrated the use of matched infrared pair (Transmitter/Receiver) in both transmittance and reflectance modes.
Target: Demonstrate how to use, breadboard, push buttons, capacitors, resistors, and potentiometers, diodes, LDR, MOSFET, photo diodes, transistors (switching and amplification applications), motion sensors, LED current limiting resistor calculations and Relay switches among others. Power supply design basics using the LM317 and 78XX (5V, 9V, 10V, 12V) regulator series were also practically demonstrated.
Target: Introduction to Arduino Boards and their programming. We covered the chip/microcontroller features on Arduino, detailed preview of Arduino Uno R3 board, Arduino software in detail including configurations, setup, layout and addition of libraries into the software. These were followed with introduction to the TME Arduino learning kit layout. The session also introduced us to ARDUINO core applications including digital INPUT and OUTPUT. All examples were demonstrated using the TME Arduino learning kit onboard peripherals, including RGB, LEDs, buzzer, POT, and LDR.
Target: Arduino Hardware and Software Serial programming. We covered Arduino software serial communication programming and hardware setup, using the TME learning kit Bluetooth module. Using an android Bluetooth application from Google Play store, we implemented a two way Arduino Bluetooth communication with phone application terminal via Bluetooth. We later sent the data from the phone back to Arduino (viewable in Arduino serial terminal) and advanced to use the strcmp and index of functions to control output via Bluetooth. We finally made a phone with PC chatting platform communicating via Bluetooth, thanks to the Arduino serial terminal and software serial capabilities. We discussed other possible applications of serial communication in real life including MCU +Modems, MCU +Arduino modules, MCU + memory devices and devices to devices communication.
Target: Arduino Neopixel control and AnalogRead basics. We were introduced to Neopixel LEDs and discussed the Ardafruit Neopixel library routines. We then programmed the Neopixel LEDs to change color as per routines. Using the color mixer concepts, we were able to glow secondary colours on Neopixel LEDs. The interns were also able to make a Neopixel color follower and demonstrated the use of the potentiometer to control pattern direction. We later demonstrated how to read analog sensors data with Arduino using TMP36 and LM35 temperature sensors.
Target: Arduino Parallel and I2C LCD interfacing basics. This involved practical interfacing of the LCD with Arduino in the 4-bit mode, using the Liquid Crystal library. We demonstrated the use of several LCD routines and commands including clear, set cursor, print, begin, setup and shift routines. The series was completed with the digital thermometer example using the LM35 temperature sensor, Arduino and 16x2 LCD. We also concretized the use of ASCII code to print characters using the “LCD.write” route.
Target: PWM, tone functions. We learnt the use of tone and notone functions to generate different tones in the frequencies of 31Hz to 65 kHz range. We practically viewed the behavior of the 50% duty cycle wave on the digital oscilloscope. We could hear the tone change physically using the inbuilt buzzer on the TME learning kit.
We also discussed analogWrite function to create PWM pulses on given Arduino pins. The concept was demonstrated with fan speed control, LED brightness control and physical signal observation on the oscilloscope.
Target: Arduino TV remote Arduino control and OLED display.
We downloaded and installed the IRremote library in Arduino software and we fully discussed the library routines. We later wrote a piece of code to decode codes for each button pressed and used the switch case statement to control Neopixel LEDs, depending on the button pressed on the TV remote.
We also demonstrated how to use the OLED display available on the TME Edu kit and later interfaced one with the ATMEGA328 microcontroller using I2C library for Arduino.