Skip to content
Snippets Groups Projects
Input Devices.md 6.39 KiB
Newer Older
Mitalee Parikh's avatar
Mitalee Parikh committed
#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
---

0. Inputs using Arduino board (no lab access)  
Mitalee Parikh's avatar
++  
Mitalee Parikh committed
-
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](https://create.arduino.cc/projecthub/godboi123/love-o-meter-bda552) ait used the temperature sensor.
I started by collecting all the components.
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
![Gathering components](./images/input/shopping.jpeg)
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
I used this schematic to connect everything.
![Sketch](./images/input/schematic.jpeg)
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
The circuit setup was fairly easy. This is how it looks.
![setup](./images/input/setup.jpeg)  
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
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](./images/input/serial.jpeg)  
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
This is it in action:  
![in action](./images/input/hot.gif)  
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
The code was fairly simple as well. You can find it here - [Sketch](./images/input/3leds.zip)  
Understanding the basics:
Mitalee Parikh's avatar
Mitalee Parikh committed
    ```
          // 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
---

Mitalee Parikh's avatar
++  
Mitalee Parikh committed

Mitalee Parikh's avatar
Mitalee Parikh committed
2. Designing a micro-controller board to read input  
---
For this I want to try measuring light color using a RGB colour sensor.
Mitalee Parikh's avatar
I  
Mitalee Parikh committed

Mitalee Parikh's avatar
++  
Mitalee Parikh committed
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](https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny212-214-412-414-416-DataSheet-DS40002287A.pdf)
[VEML6040](https://www.vishay.com/docs/84276/veml6040.pdf) - RGBW Color Sensor with I2C Interface  
Mitalee Parikh's avatar
I  
Mitalee Parikh committed

Downloaded the footprint from [Here](https://www.snapeda.com/parts/VEML6040A3OG/Vishay%20Semiconductor%20Opto%20Division/view-part/702426/?company=-&amp;welcome=home)
Installed the symbol and footprint on KiCAD using [this guide](https://www.snapeda.com/about/import/#)
![libraries]()

![VEML6040 colour sensor pinout](./images/input/VEML6040-pinout.png)
![ATtiny412 pinout](./images/input/ATtiny412-pinout.png)
![pins](./images/input/pins.jpg)
![412schematic](./images/input/412schematic.jpg)
![schematic](./images/input/schematic.jpg)

Mitalee Parikh's avatar
in  
Mitalee Parikh committed
![layers](./images/input/layers.jpg)
![mods](./images/input/mods.jpg)
![error](./images/input/error.jpg)

Mitalee Parikh's avatar
Mitalee Parikh committed
3. Milling
---

4. Stuffing and testing
---

5. Programming
---

6. Reading the input
---

7. Design Files   
---
Mitalee Parikh's avatar
Mitalee Parikh committed
![traces](./images/input/inverted-traces.png)  
![outline](./images/input/t412+VEML6040rgbsensor-outline.png)  
Mitalee Parikh's avatar
Mitalee Parikh committed
[Schematic pdf](./images/input/t412+VEML6040-schematic.pdf.zip)  
[Schematic file](./images/input/t412+VEML6040rgbsensor.sch.zip)  
Mitalee Parikh's avatar
Mitalee Parikh committed
[traces](./images/input/traces.rml.zip)  
[Kicad pcbnew](./images/input/t412+VEML6040rgbsensor.kicad_pcb.zip)  
Mitalee Parikh's avatar
Mitalee Parikh committed

Mitalee Parikh's avatar
Mitalee Parikh committed
8. Important and Interesting Links
---
Mitalee Parikh's avatar
++  
Mitalee Parikh committed
[List of sensors Wiki article](https://en.wikipedia.org/wiki/List_of_sensors)  
[Victor's notes - INPUTS](https://hackmd.io/RzTkiKoXTbqeQOn4Nz_zAw?view#INPUTS)