Test/Measurements category

LASER TRIGGER FOR CHRONOGRAPH

I finished this laser wall trigger for my HIGH RESOLUTION AND ACCURACY CHRONOGRAPH. The purpose of this device is to generate the trigger start and stop impulses for my chronograph as soon as an object disrupts any of the laser beams.

LASER TRIGGER FOR CHRONOGRAPH – [Link]

Redefining a new state-of-the-art in microampere current-sense amplifiers

Silicon Lab’s TS1100 and TS1101 current sense amplifier’s features discussed in this app note.

Sensing and controlling supply current flow are a fundamental requirement in most all electronic systems from battery-operated, portable equipment to mobile or fixed-platform power management and dc motor control. High-side current-sense amplifiers (or “CSAs”) are useful in these applications especially where power consumption is an important design parameter. New CSA developments offer even greater benefits in allowing engineers to save power without sacrificing performance.

Redefining a new state-of-the-art in microampere current-sense amplifiers – [Link]

PIC SD CARD DATA LOGGER

Some time ago I decoded to make a simple general purpose Data Logger with the following parameters for the project.

  • it should have very simple design that should be doable by most amateurs
  • the Data Logger should write the data in a SD memory card in simple text files
  • minimum 2 ADC channels
  • simple to use and simple settings
  • energy efficient
  • low cost

PIC SD CARD DATA LOGGER – [Link]

IkaScope – a new wireless oscilloscope probe

ikalogic.com launched “IkaScope” a new wireless oscilloscope probe that is able to make measurements directly on your mobile phone or your laptop. IkaScope transfers measured signals over high speed wifi connection and it will remember your home or office access points. It will work with iOS, Android and Windows devices (OSx will also be supported).

Specifications

  • Input range 10 mV/div. → 10 V/divMaximum input voltage 80 Vpp
  • Bandwidth 25 MHz
  • Timebase 100 ns/div → 10 s/div
  • Input impedance 1MΩ
  • Input Coupling AC, DC, GND
  • Trigger Rising or falling slopes
  • Digital specifications
  • Sampling rate 200 MSPS
  • Resolution 8-bits
  • Buffer 4K pts (4 * 1K Pts)1

IkaScope is a wireless oscilloscope probe, all contained in an ergonomic stylus. It uses a wifi connection to transfer signals to be displayed on any connected screen (Laptop, Smart-phone, Tablet or Desktop Computer). It’s equipped with a battery that can be recharged via any USB port. Being battery operated, IkaScope always provides 4000V+ galvanic isolation from power mains (even when being recharged).

IkaScope – a new wireless oscilloscope probe – [Link]

Radioactivity detection using very simple ionization chamber

Robert Gawron tipped us with his latest build. He writes:

Today I will show a very simple ionization chamber that can detect radioactivity. I was able to detect with it ionizing radiation from a smoke detector (Am241 isotope). It’s also immune to electromagnetic interference (EMI) due to a good shielding.

Radioactivity detection using very simple ionization chamber – [Link]

Arduino Capacitance Meter Using TM1637

In this instructable by gustavio101 you will know how to make a capacitance meter using Arduino displayed on the TM1637 display with a range from 1 uF to 2000 uF.

To build this project you need the following parts:

    • Resistors
      1x: 220 Ohm
      1x: 10 kOhm, 8000 Ohms also would work depending on your code
    • Capacitors
      You need some capacitors to calibrate your meter, you can use 0 uF, 47 uF, 220 uF and 1000 uF
    • TM1637
      A chip for driving 7-segment displays. Using it in this project is optional, only if you wish to see the results on a small screen. You need also 8 jumper wires to wire the whole circuit including TM1637.
    • Arduino & USB cable

In order to connect the circuit, first you have to connect the 220 Ohm resistor to A0 and pin 11, the 10K Ohm should be connected between the A1 and pin 13, giving the hardware core structure of the meter. The anode of you capacitor should be placed where the A0 and A1 pin are connected, and the cathode to the GND as shown in this picture.

By uploading this code to your Arduino everything will be set! You only need to include the TM1637 library and the code necessary to view your work. Once you open the Arduino IDE open the two files together to have everything done.

#include "TM1637.h"

#define analogPin      0          
#define chargePin      13         
#define dischargePin   11        
#define resistorValue  10000.0F
#define CLK 9
#define DIO 8

TM1637 TM(CLK, DIO);

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                

void setup()
{
  pinMode(chargePin, OUTPUT);     
  digitalWrite(chargePin, LOW);  
  Serial.begin(19200);
  TM.init();
  TM.set(BRIGHT_TYPICAL);
  delay(1500);             
}

void loop()
{
  digitalWrite(chargePin, HIGH);  
  startTime = millis();
  while(analogRead(analogPin) < 620){       
  }

  elapsedTime= millis() - startTime;
  microFarads = ((float)elapsedTime / resistorValue) * 1000;   
  Serial.print(elapsedTime);       
  Serial.print(" mS    "); 


  if (microFarads >= 1000)
        {
          Serial.print((long)microFarads);       
          Serial.println(" microFarads");
          int value = microFarads;
          int DigitOne = value / 1000;
          int DigitTwo = ((value / 100) % 10);
          int DigitThree = ((value / 10) % 10);
          int DigitFour = value % 10;
          TM.display(0, DigitOne);
          TM.display(1, DigitTwo);
          TM.display(2, DigitThree);
          TM.display(3, DigitFour);
        }
  else
  {    
  if ( microFarads >= 100)
        {
          Serial.print((long)microFarads);       
          Serial.println(" microFarads");
          int value = microFarads;
          int DigitOne = value / 100;
          int DigitTwo = ((value / 10) % 10);
          int DigitThree = value % 10;
          TM.display(1, DigitOne);
          TM.display(2, DigitTwo);
          TM.display(3, DigitThree);
        }
      else
      {
        if (100 > microFarads >= 1)
        {
          Serial.print((long)microFarads);       
          Serial.println(" microFarads");
          int value = microFarads;
          int DigitOne = value / 10;
          int DigitTwo = value % 10;
          TM.display(0, 0);
          TM.display(1, 0);
          TM.display(2, DigitOne);
          TM.display(3, DigitTwo);
        }
          else
          {          
           delay(500); 
          }        
     }
  }
     
  digitalWrite(chargePin, LOW);            
  pinMode(dischargePin, OUTPUT);            
  digitalWrite(dischargePin, LOW);          
  while(analogRead(analogPin) > 0){         
  }


  pinMode(dischargePin, INPUT);            
} 

Check gustavo101’s instructable to know more details and also the project that inspired him to do this one!

IdIoTware SD Card Temperature Logger

In this tutorial at hackster.io you will learn how to log data from LM35 temperature sensor values to an SD card and store it as CSV file.

In order to build this project you need the following parts:

  1. Arduino UNO
  2. idIoTware Shield
  3. USB-A to B Cable
  4. SD Card (up to 8GB)
  5. 2x Generic Jumper (0.1″)

 

The Idiotware Shield is a learning platform that offers both novices and advanced Arduino users
the opportunity to bring hundreds of projects to life quickly. it offers a large variety of wireless communication options, input sensors, outputs, storage and device extensibility.

 

The idIoTware shield has a built in lm35 sensor that has a sensitivity of 10mV / oC, that means according to this equation: Temperature ( oC) = Vout * (100 oC/V)

That if Vout is 0.5V , then, Temperature = 50 oC. However, this built-in sensor gives a higher analog voltage on pin A0 if a higher temperature was applied.

To set up the IdIoTware shield you need to connect  LM35 sensor to SEL0 3 pin header by using a jumper. The SD card should be connected to D6 and SD pin header, thus we need antoher jumper to enable it.
By uploading this code to your Arduino, you will create a CSV file with every one minute for 15 minutes. The temperature will be logged to the file thanks to the SdFat library used. You can edit the rate and duration as you prefer.

/* 
 The circuit:
 * LM35 sensor on analog pin A3
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 */

#include <SPI.h>
#include <SdFat.h>
SdFat sd;
const uint8_t chipSelect = 6;

//const int chipSelect = 4;   //cs pin of SD card shield
int tempPin = A3;      // LM 35 is connected to A3 pin.
int buzzerPin = A2;    // buzzer is connected to A2 pin

File dataFile;   // the logging file
char filename[] = "Temp000.CSV";
float tempInCelcius;
float tempInFarenheit;
unsigned long time=0;
int samplingTime = 10;  //this variable is interval(in Seconds) at which you want to log the data to SD card.
int duration = 15;     //this variable is duration(in Minutes) which is the total time for which you want to log data.


void setup() 
    {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial)
          {
            ; // wait for serial port to connect. Needed for native USB port only
          }

      Serial.print("Initializing SD card...");

     // see if the card is present and can be initialized:
     if (!sd.begin(chipSelect))  
        { sd.initErrorHalt();
          Serial.println("Card failed, or not present");
          // don't do anything more:
          return;
        }
     Serial.println("card initialized.");

     // create a new file
     for(unsigned int i = 0; i < 1000; i++) 
        {
          filename[4] = i/100 + '0';
          filename[5] = ((i%100)/10) + '0';
          filename[6] = i%10 + '0';
          if(! sd.exists(filename)) 
            {
              // only open a new file if it doesn't exist
              dataFile = sd.open(filename, FILE_WRITE);
              break;  // leave the loop!
            }
        }

      if(! dataFile) 
        { //alert user
          Serial.println("couldnt create file");
          int alertAlarm1[] = { 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,
                           1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,};
          int noteDurations[] = { 5,5,5,5,5,5,5,5,5,5,5,
                                  5,5,5,5,5,5,5,5,5,5,5 };
          for (int thisNote = 0; thisNote < 20; thisNote++) 
             {
               // Duration = 1 second / note type
               // e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
               int noteDuration = 2500 / noteDurations[thisNote];
               tone(A2,alertAlarm1[thisNote], noteDuration);
               //pause for the note's duration plus 100 ms:
               delay(noteDuration + 100);
             }
        }

     Serial.print("Logging to: ");
     Serial.println(filename);
     
     dataFile = sd.open(filename, FILE_WRITE);
     // if the file is available, write to it:
     if (dataFile) 
       { 
         dataFile.print("Logging Temperature for ");
         dataFile.print(duration);
         dataFile.print(" minutes at interval of ");
         dataFile.print(samplingTime);
         dataFile.println(" seconds.");
         
         dataFile.close();
       }
      // check availble space on SD Card
      uint32_t freeKB = sd.vol()->freeClusterCount();
      freeKB *= sd.vol()->blocksPerCluster()/2;
      Serial.print("Free space KB: ");
      Serial.println(freeKB);
      uint32_t freeMB= freeKB/1024;
      Serial.print("Free space in MB: ");
      Serial.println(freeMB); 
      
      if(freeKB <= 500)
        {
          Serial.println("LOW SPACE!!!");
          int alertAlarm2[] = { 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,
                               1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000};
          int noteDurations[] = { 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
                                  15,15,15,15,15,15,15,15,15,15,15,15,15,15,15  };
          for (int thisNote = 0; thisNote < 20; thisNote++) 
             {
               // Duration = 1 second / note type
               // e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
               int noteDuration = 2500 / noteDurations[thisNote];
               tone(A2,alertAlarm2[thisNote], noteDuration);
               //pause for the note's duration plus 50 ms:
               delay(noteDuration + 50);
             }
        }
     duration *= 60;   //convert durartion in minutes to seconds   
   }

void loop() 
    {
      dataSamples();    // here we are logging data at interval of 1 minute for 15 mintutes, i.e, 15 samples.
                            // if you want to save data for 2 hours then simply multiply 2 by 60 which will give 
                            // you value of 120 minutes then use 120 as second parameter.
    }

// this method will log data to SD card at particular interval and for paricular duration
int dataSamples()
   { 
     // here we are logging data at interval of 1 minute for 15 mintutes, i.e, 15 samples.
     // if you want to save data for 2 hours then simply multiply 2 by 60 which will give 
     // you value of 120 minutes then change the varible duration to 120. 

      tempInCelcius = ( 5.0 * analogRead(tempPin) * 100.0) / 1024.0;
      
      // uncomment following line to get temperature values in Farehniet
      //tempInFarenheit = ((tempC*9)/5) + 32;            //convert celcius to farenheit
      
      unsigned long  elapsedTime = millis()/1000;   // this variable will keep track of elapsed time
      while(((millis()/1000)-elapsedTime) < 1);    // this loop will do nothing until a second has passed 
      time++;                                       //increment time after each second.
 
      if((duration >= time) && (time % samplingTime == 0))
        {
          LogToSDcard();  //Log to SD using commands under void LogToSD()  
          // print to the serial port too:              
          Serial.print("Temperature: ");
          Serial.print(tempInCelcius);
          Serial.print(char(176)); 
          Serial.println("C");     
        }
           
   }
   
void LogToSDcard()
   {
     // open the file. note that only one file can be open at a time,
     // so you have to close this one before opening another.
     dataFile = sd.open(filename, FILE_WRITE);
     // if the file is available, write to it:
     if (dataFile) 
       { 
         dataFile.print(tempInCelcius);   
         dataFile.println("°C");
         dataFile.println(",");
         dataFile.close();
         
     // to print temperature values in Farehniet uncomment following code.    
         
      /*  dataFile.print(tempInFarenheit);
         dataFile.print("°C");
         dataFile.println(",");
         dataFile.close();   */
       } 
  
      //if the file isn't open, pop up an error:
     else 
        {
          Serial.println("error opening datalog.txt");
          delay(2000);
        }
   }   
 

As soon you get the CSV file copied from the SD card, you can visualize the data in graphs.

This video by IdIoTware team demonstrates how to build this project in details, check it out:

You can check the project’s page for more information and detailed tutorial.

 

Ultrasonic parking sensor

An ultrasonic parking sensor project from Ch00ftech:

After electing to use the PING))) sensor exactly as directed, I needed to build the rest of my circuit.  I wanted to build something robust that would mount nicely on the wall of my dad’s garage.  Figuring that the sensor would likely need to be placed down low by the car’s bumper, I decided on a two-component design consisting of a small sensor and a large visible display that could be mounted at eye-level.

Ultrasonic parking sensor – [Link]

Semiconductor radioactivity detector

Robert Gawron has been working on a semiconductor radioactivity detector project:

Currently I’m trying to make a working version of a radioactivity detector that uses semiconductor as a sensor. It’s a different approach than Geiger-Muller detectors, more complicated, but also much more interesting.
While Geiger-Muller counters can only provide information about the amount of particles in a period of time, semiconductor detectors can also measure their energy, so it’s possible to say much more about the nature of observed ionizing radiation. Some of the disadvantages of these detectors are that they are more expensive, complex and sensitivity may degrade over time.

Semiconductor radioactivity detector – [Link]

Flex Sensor to bargraph monitor using PIC16F886

Tiny Bar-Graph display provide a Red color, bright, easy to read display which is proportional to the force applied on the FLEX sensor surface.  This Bar-Graph has 20 segments in single color and display Force applied on FLEX sensor. The Barograph force monitor is based on PIC microcontroller with 10 Bit resolution ADC.  This high performance measurement provides unique capabilities and can be used in various applications. Each LED output provided with Solder- jumper for output set point, which can be configured for output control, alarm, Relay.

Force sensing resistors are polymer think film devices which exhibits a decrease in resistance with an increase in the force applied to the active surface. Its force sensitivity is optimized for use in human touch control of electronic devices.
Flex Sensor to bargraph monitor using PIC16F886 – [Link]