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 |