Skip to content
Snippets Groups Projects
Input Devices.md 6.39 KiB

#Input Devices This week, I used an Arduino board to read an analog temperature sensor.
When I have access to a lab, I will make a microcontroller board with a colour sensor as input.

###Page Summary 0. Inputs using Arduino board (no lab access)

  1. Probing an input device's analog levels and digital signals
  2. Designing a micro-controller board to read input
  3. Milling
  4. Stuffing and testing
  5. Programming
  6. Reading the input
  7. Design Files
  8. Important and Interesting Links

  1. Inputs using Arduino board (no lab access)

I wanted to start with a simple project to get the basics right and understand fundamentals of using inputs with microcontroller board. Using an Arduino Uno board with it's documentation was very basic. So I did this befordesigning my own board.
For reference, I used the Arduino Project 3 ait used the temperature sensor. I started by collecting all the components.

Gathering components

I used this schematic to connect everything. Sketch

The circuit setup was fairly easy. This is how it looks. setup

At first, all lights were continuously on. I checked the serial monitor and saw that the temperature was around 2degrees without touching. So I adjusted the baseline temperature to 25 in the sketch. After some trial and error, adjusted the sketch so that on touching it lightly for about 5 seconds, the second led lit up and on holding it tighfor some seconds the third led lit up. The serial monitor indicated temperature range from 26-32 degrees. So an increment of 2-4-6 degrees worked out perfectly. serial

This is it in action:
in action

The code was fairly simple as well. You can find it here - Sketch
Understanding the basics: ``` // defining constants const int SensorPin = A1; // analog template input from temp sensor const float BaselineTemp = 25.0; // reference temp defined

      // serial port on and setup runs once
      void setup(){
        Serial.begin(9600);                                        // serial monitor baud rate
        for(int pinNumber = 2; pinNumber<5; pinNumber++){          // for all pins 2, 3 and 4 connected to leds
          pinMode(pinNumber,OUTPUT);                               // define them as output
          digitalWrite(pinNumber, LOW);                            // leds off by default
        }
      }

      // loop - read sensor input
      void loop(){
        int sensorVal = analogRead(SensorPin);                      // read analog value from temp sensor

      // serial monitor output - temperature
        float voltage = (sensorVal/1024.0) * 5.0;                   // calculate voltage from temp sensor value
        float temperature = (voltage - .5) * 100;                   // calculate temperature from voltage
        Serial.println(temperature);                                // print temperatue on serial monitor


      // no leds on
        if(temperature < BaselineTemp){                             // defining relation between input temp and reference
          digitalWrite(2, LOW);                                     
          digitalWrite(3, LOW);
          digitalWrite(4, LOW);
        }

       // 1 led on                                            
        else if(temperature >= BaselineTemp+2 && temperature < BaselineTemp+4){
          digitalWrite(2, HIGH);                                    
          digitalWrite(3, LOW);
          digitalWrite(4, LOW);
        }  

        // 2 leds on
        else if(temperature >= BaselineTemp+4 && temperature < BaselineTemp+6){
          digitalWrite(2, HIGH);
          digitalWrite(3, HIGH);
          digitalWrite(4, LOW);
        }

        // 3 leds on
        else if(temperature >= BaselineTemp+6){
          digitalWrite(2, HIGH);
          digitalWrite(3, HIGH);
          digitalWrite(4, HIGH);
        }
        delay(1);                                                    // delay 1/100 sec before starting loop again
      }
```
  1. Probing an input device's analog levels and digital signals

  1. Designing a micro-controller board to read input

For this I want to try measuring light color using a RGB colour sensor.

First task is to select a microcontroller for the selected sensor. By looking at the datasheet and pinout of the sensor VEML6040, it needs only SDA and SCL to be connected by I2C communication protocol. The SDA needs a pull-up resistor.

The microcontroller itself needs to Tx, RX to be able to connect through UPDI to a programmer.

I choose the Attiny412 because... ATtiny412 Datasheet VEML6040 - RGBW Color Sensor with I2C Interface

Downloaded the footprint from Here Installed the symbol and footprint on KiCAD using this guide libraries

VEML6040 colour sensor pinout ATtiny412 pinout pins 412schematic schematic

layers mods error

  1. Milling

  1. Stuffing and testing

  1. Programming

  1. Reading the input

  1. Design Files

traces
outline
Schematic pdf
Schematic file
traces
Kicad pcbnew

  1. Important and Interesting Links

List of sensors Wiki article
Victor's notes - INPUTS