9-Axis IMU LESSON 25: Proportional Control System for Self Leveling Platform

In this lesson we improve our earlier control system for our self leveling platform. In our earlier work, our control system would elliminate system error by constant corrections of 1 degree each time through the loop. In this lesson, we show how to feedback a control signal that is proportional to the error. Hence larger errors will get a larger correction signal, and the error is driven to zero much quicker.

This is the code we developed during this lesson:

 

Arduino Tutorial 46: HOMEWORK- Create a Binary Bit Flipper with the 74HC595

The purpose of this lesson is to assign you homework. Your homework is to create a Bit Flipper. That is, for an 8 bit Binary or Hex number, invert the bits . . . “1” bits should become “0” and “0” bits should become “1”. For example,

if myByte=00001111

the flipped version of this would be

myByteFlipped=11110000

Similarly if myByte=00000001

myByteFlipped=11111110

You could do this with 255 if statements, but see if you can figure out a better way of doing it, and then demonstrate your results using the circuit we have been using in the last few lessons.

74HC595
This is the schematic we use in this example to control 8 LEDs from the 74HC595 chip.

9-Axis IMU LESSON 24: How To Build a Self Leveling Platform with Arduino

In this lesson we develop the initial simple code for leveling the platform. We implement the simplest control system, which is to just increment or decrement the servos based on whether the actual position is greater or less than the target position. We increment/decrement by one degree, since this is the smallest allowed change in servo position. Next week we will implement a more sophisticated control system. Below is the arduino code developed in this lesson.

 

Arduino Tutorial 45: Understanding Circular Shift Left and Circular Shift Right with the 74HC595

In this lesson we explore the Circular Shift Left (CSL) and Circular Shift Right (CSR)  binary functions. These functions are similar to the Logical Shift Left and Logical Shift Right functions explained in the previous lesson.

As a reminder, we are doing this work on the circuit built in Tutorial 42. As a refresher, we are using the 74HC595 Serial to Parallel converter, connected to an Arduino according to the following schematic.

74HC595
This is the schematic we use in this example to control 8 LEDs from the 74HC595 chip.

In all these lessons we are using the Arduino Super Starter Kit, which you can pick up HERE.

The Circular Shift Left function is illustrated below:

Circular Shift Left
Illustration of Circular Shift Left Binary Function on an 8 bit number.

You can see that all bits shift to the left, with the Most Significant Bit, or MSB looping back to the Least Significant Bit, or LSB position.

Similarly, the Circular Shift Right Function is as follows:

Circular Shift Right
This diagram illustrates the binary Circular Shift Right Function

There is actually a very easy way to implement this in a program. We illustrate it with an arduino program. Lets first consider the CSL function. We will first consider how to move the MSB to the LSB position. Remember from our earlier lessons, that dividing a binary number by 2 moves the bits to the right. We want to move the MSB 7 positions to the right, so we would divide by 27, which is 128.  So, if we have a binary number myByte, we could move the MSB to the LSB by the equation:

myByte=myByte/128

With this we do the hardest part, which is to get the MSB to the LSB. Now we need to get the rest of the bits back, and in the left shifted position, we do that by multiplying by two. By combining these two functions, we end up with the solution of CSL being:

myByte=myByte/128+myByte*2

This simple equation will perform the CSL operation, when myByte is a Hexadecimal or Binary number (Byte type in Arduino).

We show the code below to implement the CSL an arduino with a 74HC595 chip:

Similarly, the CSR binary function can be achieved with the equation:

myByte=myByte*128+myByte/2

This is the code we use for CSR on the Arduino.