Affichage des articles dont le libellé est Raspberry Pi. Afficher tous les articles
Affichage des articles dont le libellé est Raspberry Pi. Afficher tous les articles

jeudi 10 septembre 2015

Using ultrasonic Sensor with Arduino and Stm32


1. What is an Ultrasonic Distance Sensor ?  




Ultrasonic Sensor is a popular and low cost solution for non-contact distance measurement function. It is able to measure distances from 2cm to 400cm with an accuracy of about 5mm. This module includes ultrasonic transmitter, ultrasonic receiver and its control circuit. it can be used with all most micro-controller .
HC-SR04/5 module has 4 pins :

  • VCC – 5V of the power supply
  • TRIG – Trigger Pin
  • ECHO – Echo Pin
  • GND – to ground 
TRIG and ECHO pins can be used to interface this module with a microcontroller unit.

2. How Does an Ultrasonic Sensor Work?

- Ultrasonic sensor principle
Ultrasonic sensors emit short, high-frequency sound pulses at regular intervals. These propagate in the air at the velocity of sound. If they strike an object, then they are reflected back as echo signals to the sensor, which itself computes the distance to the target based on the time-span between emitting the signal and receiving the echo.


 
- Interfacing with microcontroller 
  1. Provide TRIGGER signal, at least 10μS High Level (5V) pulse.
  2. The module will automatically transmit eight 40KHz ultrasonic burst.
  3. If there is an obstacle in-front of the module, it will reflect the ultrasonic burst.
  4. If the signal is back, ECHO output of the sensor will be in HIGH state (5V) for a duration of time taken for sending and receiving ultrasonic burst. Pulse width ranges from about 150μS to 25mS and if no obstacle is detected, the echo pulse width will be about 38ms.  
- How to Find the Range of Target ?

The image bellow explain how to calculate the range.



3. How to use it with Arduino or Stm32 : 

- Wire connection and code for Arduino
-  VCC pin to the Arduino 5v
-  GND pin to the Arduino GND
- TRG pin to the Arduino Digital pin 12
-  ECHO pin to the Arduino Digital pin 11
the code example : (source : arduinobasics.blogspot.com)
/*
 HC-SR04 Ping distance sensor:
 VCC to arduino 5v 
 GND to arduino GND
 Echo to Arduino pin 11 
 Trig to Arduino pin 12
 */


#define echoPin 11 // Echo Pin
#define trigPin 12 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
 distance of the nearest object by bouncing soundwaves off of it. */ 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 
 //Calculate the distance (in cm) based on the speed of sound.
 distance = duration/58.2;
 
 if (distance >= maximumRange || distance <= minimumRange){
 /* Send a negative number to computer and Turn LED ON 
 to indicate "out of range" */
 Serial.println("-1");
 digitalWrite(LEDPin, HIGH); 
 }
 else {
 /* Send the distance to the computer using Serial protocol, and
 turn LED OFF to indicate successful reading. */
 Serial.println(distance);
 digitalWrite(LEDPin, LOW); 
 }
 
 //Delay 50ms before next reading.
 delay(50);
}
wire connection and code for Stm32f4 
-  VCC pin to the stm32f4 5v
-  GND pin to the
stm32f4 GND
- TRG pin to PD10

-  ECHO pin to PD11
You can get all project from my git account HERE 

 
#include "stm32f4_discovery.h"
#include "delay.h"

uint32_t Read_Distance(void);
void Init();

uint32_t distance ;

int main()
{  
    Init();   // initialisation de pin
    SysTick_Init(); // pour pouvoire utiliser la fonction delay :)

    while (1)
    {
    distance=Read_Distance();
    delay_nms(100);
    }
}


void Init()
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIO_InitTypeDef gpioStructure;
       
    gpioStructure.GPIO_Pin = GPIO_Pin_10;
    gpioStructure.GPIO_Mode = GPIO_Mode_OUT;
    gpioStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOD, &gpioStructure);
    
    gpioStructure.GPIO_Pin = GPIO_Pin_11;
    gpioStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_Init(GPIOD, &gpioStructure);
}
//Les Pins pour le Test sont PD10 (Trig) et PD11(echo) 

uint32_t Read_Distance(void)
{
          __IO uint8_t flag=0;
           __IO uint32_t disTime=0;
    GPIO_SetBits(GPIOD,GPIO_Pin_10);
    delay_nus(10);
    GPIO_ResetBits(GPIOD,GPIO_Pin_10);

  while(flag == 0)
  { 
   while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_11) == SET)
   {
     disTime++;
     flag = 1;
   }
  
  }
    return disTime;
}
    

mercredi 9 septembre 2015

Top 4 Stm32 , Arduino and Raspberry Pi Sensors


 May be you are new in embedded system world , this article will help you to know the most popular sensors that you can use in your projects . these sensors are very helpful and can give you many ideas of robotic projects .

1.Line follower module
Line follower module based on the optical reflector TCRT5000 and LM393 amplifier. It connects to a digital input of an Arduino or compatible card. it is very useful for Robots and you can use it also on analog mode .


2. Ultrasonic sensor 
 If you are building an autonomous robot you should have this sensor . it is super easy to use with just 3 pins. 5V, GND and Signal. The effective range is from about 2 centimeters to 300 centimeters . you can find HERE an article about it .



3. Motion sensor 
A motion detector is a device that detects moving objects, particularly people. A motion detector is often integrated as a component of a system that automatically performs a task or alerts a user of motion in an area. Motion detectors form a vital component of security, automated lighting control, home control, energy efficiency, and other useful systems.

 

4. Flex sensor
When you need to detect a flex, a flex sensor is the most helpful part for you. As the sensor is flexed, the resistance across the sensor increases. It is great for detecting how much fingers are bent . 
Here is simple example of uses :