SIM 300/900 (GSM Module)

INTRODUCTION

SIM 300 is a GSM modem with a simple serial interface. SIM 300 modem can accept any GSM network operator SIM card and act just like a mobile phone with its own unique phone number. With this module one can send/receive sms, connect to internet via GPRS and receive calls. The modem can either be connected to PC serial port directly or to any microcontroller. When purchasing purchase the entire board. As it comes with RS232 to TTL converter and ethernet port. Also do check the module by calling a few times when in the shop.

You can purchase this module online. Some of the sites are listed below:

  1. http://www.nskelectronics.com/sim300_modem_with_rs232.html
  2. http://robokart.com/wireless-modules/gsm-gprs/sim-900a-gsm-gprs-modem.html

SIM300_INTERFACE_MODULE_RS232_TTL-500x500

Fig.1 SIM300 Module

There are two LEDs on the board. One is power LED and the other is the network LED. When you insert your SIM card into the slot and power ON the device the power LED will be turned ON. After few seconds the network LED will start blinking after an interval of 3 seconds. If this happens it means signal is proper but if it is blinking faster it means that there is no network. If your mobile phone has network then this module should have network at the same location(provided the antenna is connected.) Make a call and it should ring. Do it a couple of times before purchasing from a store.

AT commands

These are the Haye’s command set also called AT commands. AT stands for attention. These commands are used to control the modem. Using these commands the modem can be operated. There are different commands for sending/reading sms etc. For further information about the history you can read the Wikipedia article.

The AT command set can be downloaded here.

at_commands

Above table lists few of the commands. The most basic command is AT and the response is OK. If you get OK then it means that everything is working fine.

exteneded_at

Now to test out the commands or for direct interfacing with the PC or laptop you can use USB to RS232 adapter.

USBRS232Cable_1

Fig. 2 USB to RS232 Adapter

You will need to install prolific drivers. These will be included in a small CD that accompanies the adapter or you can download here.

Once you do that there will be a COM port available now. Some of the basic commands are explained in the following video.

Advertisements

Tiva C Series TM4C1294 Connected LaunchPad

This launchpad features a Texas Instruments Tiva C series microcontroller. The core is ARM® Cortex™-M4-based. It features a TM4C1294NCPDT microcontroller with the following features.

Microcontroller Features

  • 120MHz
  • 1MB Flash
  • 256KB SRAM
  • 6KB EEPROM
  • Internal ROM loaded with TivaWare™ for C Series software
  • Cyclical Redundancy Check (CRC) hardware with 16-/32-bit Hash function that support four CRC forms
  • Support for four tamper inputs and configurable tamper event response
  • 10/100 Ethernet MAC
  • Ethernet PHY with IEEE 1588 PTP hardware support
  • USB 2.0 OTG/Host/Device with ULPI interface option and Link Power Management (LPM) support
  • Four Quad Synchronous Serial Interface (QSSI) modules with Bi-, Quad- and advanced SSI support
  • Ten I2C modules with four transmission speeds including high-speed mode

There is a library called TivaWare which give very useful functions to quickly program your device. The launchpad comes preloaded with a IoT program with which you can actually connect your board to the internet using ethernet cable. And as usual the cost is bare minimum.

Kit Contents

  • Tiva C Series Connected LaunchPad evaluation board (EK-TM4C1294XL PCBA w/ MCU)
  • Retractable Ethernet cable
  • USB debug cable
  • Read Me First instructions

CLP-Top_transparent_small_8bpp

Fig.1 Tiva C Series Connected LaunchPad evaluation board

Tiva_C_Series_Connected_Launchpad_Accessories_Large

Fig.2 Kit Contents

You can create many projects using this board. Following are the links for purchasing and reading about the board.

http://www.ti.com/ww/en/launchpad/launchpads-connected-ek-tm4c1294xl.html#tabs

https://estore.ti.com/tiva-connected-launchpad.aspx

Bit set, reset, toggle and masking in Microcontrollers

Well I would like your concepts on bit set and reset operations to be clear. No matter which language you use be it assembly or embedded c, you will always require to set and reset register bits.

Now whether you want to initialize some peripheral or poll something you will require these three operations.

Bit set operation

This means making a particular bit in an register as 1 or setting it. Now let us see this property of logical OR.

x OR 1 = 1

So whatever be the value of x if you OR it with 1 the result will be 1. This is what we want right? I’ll be taking one example after explaining bit reset.

Bit reset operation

This means that you want to make a particular bit of a register 0 or reset it. We make use of the property of logical AND:

x AND 0 = 0

So whatever be the value of x if you AND it with 0 the result is 0. This is what we wanted so bit reset is done by logical AND operation.

Masking

Often you are interested only in a particular bits of a register. This may be the input of some sensor or something else. Now you want to use masking in this scenario. So masking means you reset all the bits that are not required and let the bits under consideration as it is. Again we make use of logical AND properties.

x AND 0 = 0

x AND 1 = x

So you make the masking pattern by making the bits you want as 1 and the ones you don’t want  as 0. Convert this value to hex and logical AND that mask value with the register.

Bit toggle

Bit toggle is also useful. So for this we make use of the property of ex-or as follows.

x ex-or 1 = complement of x or x-bar

Thus if you ex-or the bit with 1 the bit will be toggled.

Example

130620141602

R &= 0x2081 // This is the masking operation in embedded c

R |= 0x2081 // This will set the bits 0,7,13

R ^= 0x2081 // This will toggle bits 0,7,13

So as you can see this example covers masking. Similarly you need to make the bit patterns for bit set, reset and toggle operation.

If you want more examples comment here. Please like the posts if you like what I have written. And do subscribe to get notifications of my new posts.

Capacitive Accelerometer Interfacing

Well in this post I’ll be telling briefly what is an accelerometer and how to interface it with a microcontroller. To be honest I woke up in the middle of the night and couldn’t go back to sleep, so I decided to write this post which I was planning on writing for some time now.

Accelerometer

It is basically a device which is used for measuring acceleration or change in motion. You use one more often than you know. There is an inbuilt accelerometer in your cellular mobile phones and tablets. So now you know what is used for detecting the tilts in your phone. Next time you play temple run or similar game you would know that all this fun is possible due to a technology called accelerometer and other stuff. Then modern laptop hard disks have accelerometers to detect fall. If fall is detected the writing head in retraced so that the disk is not damages and there are no scratches. There are numerous other applications and examples. I just gave food for thought you can explore the rest on your own.

Types of Accelerometer

Well as you may have already guessed there are various types of accelerometers.

  • Capacitive Accelerometer
  • Magneto-resistive Accelerometer
  • Piezo-electric Accelerometer

There are various other types these three being examples.This is a video one of my instructors showed me. The guy explains the working and construction quite well.

This is an article having good information about accelerometers

http://www.engineersgarage.com/articles/accelerometer?page=1

Data from accelerometers

Now that you know how accelerometers work. Let’s come to the topic at hand i.e. using one with your microcontroller.

Well there are different types of accelerometers depending on the type and method of obtaining data. While the data acquisition may be different but processing part is same once you get the reading. So the data may be available as an analog signal or may be it may be available inside the accelerometer in a register which you need to access via a protocol like SPI etc..

ADXL 335

So I’ll be talking about this accelerometer. You can look at the datasheet before deciding to use it.

So this accelerometer gives the output as three analog signals. There are three pins x,y,z for the three axes. Then there is Vcc and GND.

For actually using this signals you need to convert them into digital form. For this you use the inbuilt 12bit ADC that is available in msp430g2553.(If your controller does not have an inbuilt ADC, which won’t be the case, you can use an external ADC or if your application requires faster conversion and better precision and stability then you can use external ADC.) So once you have the data in digital form, next step would be calibration of the accelerometer.

Calibration

Now you have the data in digital form but what to do with it and how to see it? The answer is you send the digital reading serially and observe it on a serial monitor. So you make variables and store the digital reading in those and view the numbers on screen. Now you will make a table for these variables and decide the limits. Suppose you want to detect forward tilt, you can note what are the range of values that the accelerometer gives for the gesture and the using a simple if statement write whatever you want your application to do on a forward tilt.

Position Digital Range of X Digital Range of Y
Forward N.A <658
Backward N.A >705
Left >497 N.A
Right <460 N.A
Stop 470 to 485 695 to 705

 

The above code is an example of finding the ranges. You can then use basic if else for this. If you want a video showing the calibration process do tell me.

Code for gesture controlled bot

void setup()
{
  pinMode(P2_0,OUTPUT);
  pinMode(P2_1,OUTPUT);
  pinMode(P2_2,OUTPUT);
  pinMode(P2_3,OUTPUT);
  pinMode(A0,INPUT);//X
  pinMode(A3,INPUT);//Y
  pinMode(P1_4,INPUT);
  //pinMode(A2,INPUT);//Z
  Serial.begin(9600);
  Serial.println("Start");
}
void loop()
{
  int x = analogRead(A0);
  int y = analogRead(A3);
  int m = digitalRead(P1_4);
  //Serial.print(x);
  //Serial.print(','); //use these lines for calliberation
  //Serial.println(y);
   if(y>520)
  {
  digitalWrite(P2_0,HIGH);
  digitalWrite(P2_1,LOW);
  digitalWrite(P2_2,HIGH);
  digitalWrite(P2_3,LOW);
  Serial.println("BACKWARD");
  //delay(100);
  }
  if(y<460)
  {
  digitalWrite(P2_0,LOW);
  digitalWrite(P2_1,HIGH);
  digitalWrite(P2_2,LOW);
  digitalWrite(P2_3,HIGH);
  Serial.println("FORWARD");
  //delay(100);
  }
  if(x>445)
  {
  digitalWrite(P2_0,LOW);
  digitalWrite(P2_1,LOW);
  digitalWrite(P2_2,LOW);
  digitalWrite(P2_3,HIGH);
  Serial.println("LEFT");
  //delay(100);
  }
  if(x<430)
  {
  digitalWrite(P2_0,LOW);
  digitalWrite(P2_1,HIGH);
  digitalWrite(P2_2,LOW);
  digitalWrite(P2_3,LOW);
  Serial.println("RIGHT");
 // delay(100);
  }
  if(x>430 && x< 445 && y>460 && y<500)
  {
  digitalWrite(P2_0,LOW);
  digitalWrite(P2_1,LOW);
  digitalWrite(P2_2,LOW);
  digitalWrite(P2_3,LOW);
  Serial.println("STOP");
  //delay(100);
  }  
}

(If you would like the embedded c code email me.)

P.S.

If you like my articles do like them. Well just want to say a little appreciation goes a long way. Thank you for reading the post.

A taste of Image Processing

Image processing involves extracting information from images and using the information so obtained for various operations and tasks. Don’t confuse image processing image processing with image manipulation that involves adjusting the images. Photoshop and similar software are used for image manipulation.

Application areas

  • Medical Applications
  • Industrial Applications
  • Military Applications: Some of the most challenging and performance-critical scenarios for image processing solutions have been developed for military needs, ranging from detection of soldiers or vehicles to missile guidance and object recognition and reconnaissance tasks using unmanned aerial vehicles (UAVs). In addition, military applications often require the use of different imaging sensors, such as range cameras and thermo-graphic forward-looking infrared (FLIR) cameras.
  • Law Enforcement and Security: Surveillance applications have become one of the most intensely researched areas within the video processing community. Biometric techniques (e.g., fingerprint, face, iris, and hand recognition), which have been the subject of image processing research for more than a decade, have recently become commercially available.
  • Consumer Electronics
  • The World Wide Web

So as we can see image processing has wide areas of application.

That being said you need some software or programming language for making this image processing possible. There are various ways by which this can be done. You can use c, NI LabVIEW, MATLAB etc. for image processing. For this post I’ll be using MATLAB. Now we did this just so as to understand the concepts of image processing. So if you feel that its meagre you can build on this.

Code

clc;
close all;
clear all;
video = videoinput('winvideo');%Create video variable

set(video,'FramesPerTrigger',1); % Setting frames per trigger
preview(video);%Preview the video
rgb_image = getsnapshot(video); % Storing Image in an array variable
[y x c]= size(rgb_image); % Determining the size of the captured frame.
x1 = (x/2)-(0.2*x);
x2 = (x/2)+(0.2*x);
y1 = (y/2)-(0.25*y);
y2 = (y/2)+(0.25*y);
global s;
s = serial('COM4')
fopen(s)
while(1)
image = getsnapshot(video);
fR = image(:,:,1);
fG = image(:,:,2);
fB = image(:,:,3);
I = fR>200;
se=strel('disk',5);
B=imopen(I,se);
final=imclose(B,se);
[L,n]=bwlabel(final);
for k=1:n
    [r,c]=find(L==k);
    rbar=mean(r);
    cbar=mean(c);
end
rbar
cbar
if x1<cbar<x2 &&  rbar<y1
    disp('Move forward');
    global s;
    fwrite(s,'w')
elseif cbar<x1 && y1<rbar<y2
    disp('Move right');
    global s;
    fwrite(s,'d')
elseif cbar>x2 && y1<rbar<y2
    disp('Move left');
    global s;
    fwrite(s,'a')
elseif x1<cbar<x2 && rbar>y2
    disp('Move back');    
    global s;
    fwrite(s,'s')
elseif x1<cbar<x2 && y1<rbar<y2
    disp('Move stop');
    global s;
    fwrite(s,'f')
end
end

Now this is the code. I am thinking I’ll just explain the logic and then you can use MATLAB help for the rest. Seriously the help provides is simply awesome. You can understand how the functions word using the help and then there is the world wide net. So I am assuming that those of you who has interest will read further.

Now let’s begin understanding the code.

video = videoinput(‘winvideo’);

This will create a video object from the available cameras. You can check the available ones by using imaqhwinfo

image

So for the windows winvideo is installed adapter.

image

Next give winvideo as the agrument to the imaqhwinfo(). Now if you have an external webcam connected to your computer you will se two device ID’s. So now suppose you want to know about the device with ID=1 all you need to do is pass device ID as second argument.

image

You can see the properties you the webcam.

So just use the videoinput() for creating a variable attached to the particular webcam in MATLAB. In our case video is the variable.

Next you set the frames per trigger i.e. whenever you give the capture commands how many frames will be captured every time.

Then you see a preview of the video feed so that you come to know what exactly is the camera viewing.

Next up you take a sample shot so as to determine the dimensions of the camera.

You will get a 3D matrix of the image. Extract the x and y resolution.

Now for this application what we will do is divide the webcam field into 9 quadrants and take decision depending on position of the image of the object to be detected.

Now since we wanted to learn the basic we used white light such as a torch as the source. If you have a proper webcam and good lighting conditions you can detect normal coloured balls using this program. All you need to do is some thresholding.

Now as usual open the serial port and send a particular character depending upon the quadrant in which the object lies.

So you basically take a snapshot again and again and manipulate that snap. So each image is made of 3 components red, blue and green. Since we are using white light as the object it does not matter which component you choose. But if there is a particular colour that the object has take that particular matrix. Now do the thresholding so that you get only the torch circle on the screen.

Then you remove the noise and coalesce the remaining parts to form a single body.

Then you calculate the centroid and take decision.

image

This is a sample of what the image will look like after thresholding. So as you can see it lies in the middle quadrant.

We had written the code such that it will transmit w,a,s,d,f depending on the quadrant. Do top middle corresponds to w and so on you can figure that yourself.

On the controller side we manipulate the data to control the bot.

I’ll be uploading the video soon. Thank you for reading. Hope this was useful.