Tanja@Fab Academy 2018

Final Project Documentation





4. Embeded Programming

Testing sensors



1. HCHO (VOC) sensor




For Data reading of VOC sensor I could use the manufacturer code as to see below. First Code shows the Part 1 of the programming the sensor, which is the calibrating part.
        
    demo of Grove - HCHO Sensor by seeds studio


    #include              // load the math.h library

    #define Vc 4.95               

    #define R0 34.28              // the number of R0 you detected just now

    void setup()                  // At the begining of the programm connect to the serial port 
    {
        Serial.begin(9600);
    }

    void loop()
    {
        int sensorValue=analogRead(A1);     // read the signal (voltage value) from the pin A1 (analog)
        double Rs=(1023.0/sensorValue)-1;   // calculate Rs out of the read voltage value of pin A1
        Serial.print("Rs = ");
        Serial.println(Rs);                 // Print the real value of Rs
        double ppm=pow(10.0,((log10(Rs/R0)-0.0827)/(-0.4807)));  // calculate the HCHO level withs this callculation (ppm)
        Serial.print("HCHO ppm = ");        // Print the VOC value 
        Serial.println(ppm);
        delay(10000);                        //wait 10 seconds bevor you read the next value
    }    

    



After the calibration, when I was sitting in the garden, there was a car nearby that started the engine. Immediately, even if I did not think about it, the sensor data has risen enormously. A few minutes later, a neighbor started the barbecue and the sensor data went up immediately ...

After the calibration in the outside air, I could bring the sensor into the room and measure the data of the room air. The sensor data kept rising as I was in the room with the door closed and after opening the window, the value of HCHO quickly dropped off.


2. Temperature sensor



Grove temperature sensor v1.2 Seeds Studio .







Here you can find the simple temperature and HCHO data reading code:
// Demo code for Grove - Temperature Sensor V1.1/1.2
// Loovee @ 2015-8-26

#include 

// Following two constants belonge to the HCHO sensor:

#define Vc 4.95               
#define R0 34.28                  //the number of R0 you detected during the calibration 

const int B = 4275;               // B value of the thermistor
const int Rinit = 100000;         // Rinit = 100k
const int pinTempSensor = A0;     // temperature sensor connect to A0

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    int a = analogRead(pinTempSensor);

    float R = 1023.0/a-1.0;
    R = Rinit*R;

    float temperature = 1.0/(log(R/Rinit)/B+1/298.15)-273.15 - 2; // convert to temperature via datasheet

    int sensorValue=analogRead(A1);     // read the signal (voltage value) from the pin A1 (analog)
    double Rs=(1023.0/sensorValue)-1;   // calculate Rs out of the read voltage value of pin A1
    
    Serial.print("Rs = ");
    Serial.println(Rs);                 // Print the real value of Rs
    double ppm=pow(10.0,((log10(Rs/R0)-0.0827)/(-0.4807)));  // calculate the HCHO level withs this callculation (ppm)
    
    Serial.print("HCHO ppm = ");        // Print the VOC value 
    Serial.println(ppm);

    
    Serial.print("temperature (degrees Celsius) = ");
    Serial.println(temperature);

    delay(2000);
}


3. Dust sensor



In the following you can find the data reading code for dust sensor from the seedsstudio.com .

int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() 
{
    Serial.begin(9600);
    pinMode(pin,INPUT);
    starttime = millis();//get the current time;
}

void loop() 
{
    duration = pulseIn(pin, LOW);
    lowpulseoccupancy = lowpulseoccupancy+duration;

    if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
    {
        ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
        concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
        Serial.print(lowpulseoccupancy);
        Serial.print(",");
        Serial.print(ratio);
        Serial.print(",");
        Serial.println(concentration);
        lowpulseoccupancy = 0;
        starttime = millis();
    }
}








4. Stepper Motor






Simple stepper motor code:
    /*
  Stepper Motor Demonstration 1
  Stepper-Demo1.ino
  Demonstrates 28BYJ-48 Unipolar Stepper with ULN2003 Driver
  Uses Arduino Stepper Library

  DroneBot Workshop 2018
  https://dronebotworkshop.com
*/

//Include the Arduino Stepper Library
#include 

// Define Constants

// Number of steps per internal motor revolution 
const float STEPS_PER_REV = 32; 

//  Amount of Gear Reduction
const float GEAR_RED = 64;

// Number of steps per geared output rotation
const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED;

// Define Variables

// Number of Steps Required
int StepsRequired;

// Create Instance of Stepper Class
// Specify Pins used for motor coils
// The pins used are 8,9,10,11 
// Connected to ULN2003 Motor Driver In1, In2, In3, In4 
// Pins entered in sequence 1-3-2-4 for proper step sequencing

Stepper steppermotor(STEPS_PER_REV, 10, 8, 9, 7);

void setup()
{
          // Nothing for stepper  (Stepper Library sets pins as outputs)
}

void loop()
{

  // Rotate CW 1/2 turn slowly
  StepsRequired  =  2*STEPS_PER_OUT_REV  ; 
  steppermotor.setSpeed(400);   
  steppermotor.step(StepsRequired);
  delay(1000);
  
  // Rotate CCW 1/2 turn quickly
  StepsRequired  =  - 2* STEPS_PER_OUT_REV  ;   
  steppermotor.setSpeed(700);  
  steppermotor.step(StepsRequired);
  delay(2000);

}
5. RGB LED





Here is a simple RGB LED testing code for Arduino IDE:
int LEDred = PD5;         // Colour  red is connected on Pin PB2
//int LEDgreen = PD3;     // Colour blue is connected on Pin PB1 (PWM)
int LEDblue = PD6;        // Colour gruen an Pin 6

int p = 3000;             // p is a pause with 3000ms (3 seconds)

int brightness1a = 200;   // Value zwibetween  0 und 255 gives the information about the Brightness of each colour
int brightness1b = 200;  
int brightness1c = 200;   

int dark = 0;             // Value 0 means Voltage 0V Spannung (LED off).

 
void setup()
{

pinMode(LEDblue, OUTPUT);
pinMode(LEDgreen OUTPUT);
pinMode(LEDred, OUTPUT);

}

void loop()

{     

analogWrite(LEDred, dark);            // now the red LED will be turned off
analogWrite(LEDgreen, brightness1b); // green LED on         
delay(p);  


analogWrite(LEDgreen, dark);        // green LED off
analogWrite(LEDblue, brightness1c);   //  blue LED on
delay(p);            


analogWrite(LEDblue, dark);         // blue LED off
analogWrite(LEDred, brightness1a); 
delay(p);           


}




Downloads


HCHO sensor (ino) download
RGB LED (ino) download
Dust sensor (ino) download
Steppermotor and RGB LED (ino) download
Sensors and steppermotor plus LED simple code(ino) download