My ongoing goal is to build a self-navigating, pickup-and-deliver robot. Following the [project outline article](https://admantium.com/blog/robo01_intro/), I have researched the required hardware and software (phase 1) and built a moving robot prototype(phase 2). Now the goal is to use a robotics middleware software for simulating the robot with its chassis, movement abilities, and sensors.
Since years I have been working with laptops and small desktop computers, completely preassembled hardware. This year, working with Arduino, Raspberry Pi and Robot Projects, I feel more interested and familiar with electronics and hardware. Also, with the advent of recent next generation game consoles that use NVME technology to accelerate graphics rendering, I became interested and fascinated with PC hardware. To catch up and out of pure educational purpose I decided to build a new PC from scratch.
Sending serial data between microcontrollers and single-board-computers is an easy way to exchange information. In the last article, I showed three options how to connect the Raspberry Pi to the Raspberry Pico. At the time of writing this article, the best way is to use an USB-FTL connector on the Pi, and then to connect directly to TX/RX. This way, you do not need to configure anything special on your Pi and have a reliable connection.
At the beginning of 2021, I started my robot project. One of its subprojects was to get familiar with the Arduino and C-Programming. The Arduino is unchallenged in terms of sensor and actuator libraries, and unparallelled in the "connect and it works" experience. However, in the middle of the year, I made the decision to switch to using the Raspberry Pico and MicroPython to implement my Robot. This choice is motivated by using one and only one programming language for the Robotics middleware, the SBD and the Microcontroller, as well as to tap into the powerful Python libraries for image recognition that are offered by the RealSense D435 camera.
Every Arduino programmer needs to start somewhere. The first Arduino device is a simple combination of a membrane keypad and the an 8X8 matrix. When a key is pressed, it is shown on the 8X8 matrix. Just check the API for the membrane, figure out how to process the button pressed. And then send this character to the LED Matrix. This sounds very easy, right?
Every Arduino programmer starts with writing the first LED blinking sketch using the C programming languages. You understand basic imperative commands to define output pins and to change pins. You also know what functions are, and how the `setup()` and `loop()` methods interact. And from there on, you can use the full power of the C and C++ programming language.
Infrared remote controls are ubiquitous: TVs, IOT devices, toys. With an Arduino and an IR receiver, it is a matter of minutes to setup receiving IR commands and process them to control your Arduino application.
When you want to build complex microcontroller projects in which data needs to be exchanged between different devices, you need a fast and reliable way to exchange data. In the last article, we investigated serial UART connection, a direct one-to-one interface. This article continues the series with the I2C protocol, a half-duplex, bidirectional communication system with many-to-many servers and clients. We will see how to wire a Raspberry Pi and an Arduino Uno to form an I2C connection and exchange data between the two systems.
In complex projects, you will need to connect multiple microcontrollers with each other. This connection can be made with different protocols and libraries. This article explores available options and presents easy to follow code examples.
Arduinos are great microcontroller for your embedded projects. During one of my projects, I wanted to have a simple command prompt to trigger commands at the Arduino, for example to print a message on a LCD display, or to move a servo motor with attached ultrasonic sensor. It is easy enough to listen to a single char and take this as a command, but if you come from Linux or Mac, you are used to have rich CLI tools.