——
#DonLucElectronics #DonLuc #Sensors #TMP102 #LineSensor #AlcoholGasSensor #MinIMU9 #Pololu #Adafruit #SparkFun #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
——
——
——
——
SparkFun IR Receiver – TSOP85
This is a very small infrared receiver based on the TSOP85 receiver from Vishay. This receiver has all the filtering and 38kHz demodulation built into the unit. Simply point a IR remote at the receiver, hit a button, and you’ll see a stream of 1s and 0s out of the data pin.
DL2309Mk02
1 x Adafruit METRO M0 Express
1 x DS3231 Precision RTC FeatherWing
1 x Pololu MinIMU-9 v5 Gyro, Accelerometer, and Compass
1 x Pololu Carrier for MQ Gas Sensors
1 x Alcohol Gas Sensor – MQ-3
1 x SparkFun Line Sensor – QRE1113
1 x SparkFun Digital Temperature Sensor – TMP102
1 x SparkFun IR Receiver – TSOP85
1 x LED Red
1 x ProtoScrewShield
1 x Rocker Switch – SPST
2 x Resistor 10K Ohm
1 x CR1220 3V Lithium Coin Cell Battery
1 x SparkFun Cerberus USB Cable
Adafruit METRO M0 Express
LED – LED_BUILTIN
SDA – Digital 20
SCL – Digital 21
IRR – Digital 11
LER – Digital 3
SW1 – Digital 2
MQ3 – Analog 0
LSB – Analog 1
ALE = Analog 3
VIN – +3.3V
VIN – +5V
GND – GND
——
DL2309Mk02p.ino
/****** Don Luc Electronics © ******
Software Version Information
Project #28 - Sensors - SparkFun IR Receiver TSOP85 - Mk08
28-08
DL2309Mk02p.ino
1 x Adafruit METRO M0 Express
1 x DS3231 Precision RTC FeatherWing
1 x Pololu MinIMU-9 v5 Gyro, Accelerometer, and Compass
1 x Pololu Carrier for MQ Gas Sensors
1 x Alcohol Gas Sensor - MQ-3
1 x SparkFun Line Sensor - QRE1113
1 x SparkFun Digital Temperature Sensor - TMP102
1 x SparkFun IR Receiver - TSOP85
1 x LED Red
1 x ProtoScrewShield
1 x Rocker Switch - SPST
2 x Resistor 10K Ohm
1 x CR1220 3V Lithium Coin Cell Battery
1 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// DS3231 Precision RTC 
#include <RTClib.h>
// Two Wire Interface (TWI/I2C)
#include <Wire.h>
// Keyboard
#include <Keyboard.h>
// Includes and variables for IMU integration
// STMicroelectronics LSM6DS33 Gyroscope and Accelerometer
#include <LSM6.h>
// STMicroelectronics LIS3MDL Magnetometer
#include <LIS3MDL.h>
// SparkFun Digital Temperature Sensor TMP102
#include <SparkFunTMP102.h>
// SparkFun IR Receiver - TSOP85
#include <IRremote.h>
// Keyboard
String sKeyboard = "";
// DS3231 Precision RTC 
RTC_DS3231 rtc;
String dateRTC = "";
String timeRTC = "";
// Pololu 9DoF IMU
// STMicroelectronics LSM6DS33 Gyroscope and Accelerometer
LSM6 imu;
// Accelerometer and Gyroscopes
// Accelerometer
int imuAX;
int imuAY;
int imuAZ;
// Gyroscopes 
int imuGX;
int imuGY;
int imuGZ;
// STMicroelectronics LIS3MDL Magnetometer
LIS3MDL mag;
// Magnetometer
int magX;
int magY;
int magZ;
// Gas Sensors MQ
// Alcohol Gas Sensor - MQ-3
int iMQ3 = A0;
int iMQ3Raw = 0;
int iMQ3ppm = 0;
// SparkFun Line Sensor - QRE1113 (Analog)
int iLine = A1;
int iLineSensor = 0;
// SparkFun Digital Temperature Sensor TMP102
const int ALERT_PIN = A3;
TMP102 sensor0;
float temperature;
boolean alertPinState;
boolean alertRegisterState;
// SparkFun IR Receiver - TSOP85
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String IRValue = "";
int iLEDRed = 3;
// The number of the Rocker Switch pin
int iSwitch = 2;
// Variable for reading the button status
int SwitchState = 0;
// Software Version Information
String sver = "28-08";
void loop() {
  // Date and Time RTC
  isRTC ();
  // Pololu Accelerometer and Gyroscopes
  isIMU();
  // Pololu Magnetometer
  isMag();
  // Gas Sensors MQ
  isGasSensor();
  // SparkFun Line Sensor
  isLineSensor();
  // SparkFun Temperature TMP102
  isTMP102();
  // SparkFun IR Receiver - TSOP85
  isIR();
  // Read the state of the Switch value:
  SwitchState = digitalRead(iSwitch);
  // Check if the button is pressed. If it is, the SwitchState is HIGH:
  if (SwitchState == HIGH) {
     Keyboard.println(sKeyboard);
    
  }
  // Delay 1 Second
  delay(1000);
}
getAccelGyro.ino
// Accelerometer and Gyroscopes
// Setup IMU
void setupIMU() {
  // Setup IMU
  imu.init();
  // Default
  imu.enableDefault();
  
}
// Accelerometer and Gyroscopes
void isIMU() {
  // Accelerometer and Gyroscopes
  imu.read();
  // Accelerometer x, y, z
  imuAX = imu.a.x;
  imuAY = imu.a.y;
  imuAZ = imu.a.z;
  // Gyroscopes x, y, z
  imuGX = imu.g.x;
  imuGY = imu.g.y;
  imuGZ = imu.g.z;
  // Keyboard
  sKeyboard = sKeyboard + String(imuAX) + "|" + String(imuAY) + "|"
  + String(imuAZ) + "|";
  sKeyboard = sKeyboard + String(imuGX) + "|" + String(imuGY) + "|"
  + String(imuGZ) + "|";
  
}
getGasSensorMQ.ino
// Gas Sensors MQ
// Gas Sensor
void isGasSensor() {
  // Read in analog value from each gas sensors
  // Alcohol Gas Sensor - MQ-3
  iMQ3ppm = isMQ3( iMQ3Raw );
  // Keyboard
  sKeyboard = sKeyboard + String(iMQ3ppm) + "|";
}
// Alcohol Gas Sensor - MQ-3
int isMQ3(double rawValue) {
  double RvRo = rawValue;
  // % BAC = breath mg/L * 0.21
  double bac = RvRo * 0.21;
  return bac;
  
}
getIMUMagnetometer.ino
// IMU Magnetometer
// Setup Magnetometer
void setupMag() {
  // Setup Magnetometer
  mag.init();
  // Default
  mag.enableDefault();
  
}
// Magnetometer
void isMag() {
  // Magnetometer
  mag.read();
  // Magnetometer x, y, z
  magX = mag.m.x;
  magY = mag.m.y;
  magZ = mag.m.z;
  // Keyboard
  sKeyboard = sKeyboard + String(magX) + "|" + String(magY) + "|" 
  + String(magZ) + "|";
  
}
getIRRemote.ino
// SparkFun IR Receiver - TSOP85
// Setup
void isSetupIR(){
  // Initialize digital pin LED Red as an output
  pinMode(iLEDRed, OUTPUT);
  
  // Start the receiver
  irrecv.enableIRIn();
  
}
//
void isIR(){
  if (irrecv.decode(&results))
  {
    
    // LED Red HIGH
    digitalWrite(iLEDRed, HIGH);
    
    //Serial.print("IR RECV Code = 0x ");
    //Serial.println(results.value, HEX);
    IRValue = "0x ";
    IRValue = IRValue + String(results.value, HEX);
    // LED Red LOW
    digitalWrite(iLEDRed, LOW);
    // IR Resume
    irrecv.resume();
    
  }
  else {
    IRValue = "0";
    
  }
  // Keyboard
  sKeyboard = sKeyboard + String(IRValue) + "|*";
  
}
getLineSensor.ino
// Line Sensor
// isLine Sensor
void isLineSensor(){
  // Line Sensor
  iLineSensor = analogRead(iLine);
  // Keyboard
  sKeyboard = sKeyboard + String(iLineSensor) + "|";
  
}
getRTC.ino
// Date & Time
// DS3231 Precision RTC
void setupRTC() {
  // DS3231 Precision RTC
  if (! rtc.begin()) {
    //Serial.println("Couldn't find RTC");
    //Serial.flush();
    while (1) delay(10);
  }
  if (rtc.lostPower()) {
    //Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    //rtc.adjust(DateTime(2023, 8, 10, 11, 0, 0));
  }
  
}
// Date and Time RTC
void isRTC () {
  // Date and Time
  dateRTC = "";
  timeRTC = "";
  DateTime now = rtc.now();
  
  // Date
  dateRTC = now.year(), DEC; 
  dateRTC = dateRTC + "/";
  dateRTC = dateRTC + now.month(), DEC;
  dateRTC = dateRTC + "/";
  dateRTC = dateRTC + now.day(), DEC;
  // Time
  timeRTC = now.hour(), DEC;
  timeRTC = timeRTC + ":";
  timeRTC = timeRTC + now.minute(), DEC;
  timeRTC = timeRTC + ":";
  timeRTC = timeRTC + now.second(), DEC;
  // Keyboard
  sKeyboard = "SEN|" + sver + "|" + String(dateRTC) + "|" + 
  String(timeRTC) + "|";
  
}
getTempTMP102.ino
// SparkFun Digital Temperature Sensor TMP102
// Setup TMP102
void isSetupTMP102(){
  // Declare alertPin as an input
  pinMode(ALERT_PIN,INPUT);
  
  // Begin
  //It will return true on success or false on failure to communicate
  if(!sensor0.begin())
  {
    
    while(1);
    
  }
  
  // set the Conversion Rate
  //0-3: 0:0.25Hz, 1:1Hz, 2:4Hz, 3:8Hz
  sensor0.setConversionRate(2);
  
  //set Extended Mode.
  //0:12-bit Temperature(-55C to +128C) 1:13-bit Temperature(-55C to +150C)
  sensor0.setExtendedMode(0);
  
  // Set T_HIGH, the upper limit to trigger the alert on
  // Set T_HIGH in C
  sensor0.setHighTempC(29.4);
  
  // Set T_LOW, the lower limit to shut turn off the alert
  // set T_LOW in C
  sensor0.setLowTempC(27.67);
}
// is TMP102
void isTMP102(){
  // Turn sensor on to start temperature measurement.
  // Current consumtion typically ~10uA.
  sensor0.wakeup();
  // read temperature data C
  temperature = sensor0.readTempC();
  // Check for Alert
  // Read the Alert from pin
  alertPinState = digitalRead(ALERT_PIN);
  
  // Read the Alert from register
  alertRegisterState = sensor0.alert();
  
  // Place sensor in sleep mode to save power.
  // Current consumtion typically <0.5uA.
  sensor0.sleep();
  // Keyboard
  sKeyboard = sKeyboard + String(temperature) + "|" + 
  String(alertPinState) + "|" + String(alertRegisterState) + "|";
}
setup.ino
// Setup
void setup()
{
  
  // Give display time to power on
  delay(100);
  
  // Wire - Inialize I2C Hardware
  Wire.begin();
  // Give display time to power on
  delay(100);
  // Date & Time RTC
  // DS3231 Precision RTC 
  setupRTC();
  
  // Initialize control over the keyboard:
  Keyboard.begin();
  // Pololu Setup IMU
  setupIMU();
  // Pololu Setup Magnetometer
  setupMag();
  // Setup TMP102
  isSetupTMP102();
  // SetupTSOP85
  isSetupIR();
  // Initialize the Switch pin as an input
  pinMode(iSwitch, INPUT);
  // Initialize digital pin LED_BUILTIN as an output
  pinMode(LED_BUILTIN, OUTPUT);
  // Turn the LED on HIGH
  digitalWrite(LED_BUILTIN, HIGH);
  // Delay 5 Second
  delay( 5000 );
}
——
People can contact us: https://www.donluc.com/?page_id=1927
Technology Experience
- Programming Language
 - Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc…)
 - IoT
 - Wireless (Radio Frequency, Bluetooth, WiFi, Etc…)
 - Robotics
 - Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
 - Unmanned Vehicles Terrestrial and Marine
 - Machine Learning
 - RTOS
 - Research & Development (R & D)
 
Instructor, E-Mentor, STEAM, and Arts-Based Training
- Programming Language
 - IoT
 - PIC Microcontrollers
 - Arduino
 - Raspberry Pi
 - Espressif
 - Robotics
 
Follow Us
Luc Paquin – Curriculum Vitae – 2023
https://www.donluc.com/luc/
Web: https://www.donluc.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/@thesass2063
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
Don Luc
					




























