drupal_render() returns "Array" instead to render the content
First try Render instead of drupal_render

$arr = drupal_get_form('product_search_by_pin_form');
print render($arr);


From Clive answer on what is the difference between render() and drupal_render()?


  The docs for render() explain it pretty well:
  
  This function renders an element using drupal_render(). The top level
  element is shown with show() before rendering, so it will always be
  rendered even if hide() had been previously used on it. render() is
  basically just a wrapper for drupal_render(), except that it makes
  sure the element passed in is set to be shown when passed through to
  drupal_render().
  
  It also makes sure the element passed in is an array (which is all
  drupal_render() can accept). If it isn't, the element is return back
  as-is. So it provides a bit of a safety net if you like.
  
  If for any reason you have a variable you need to render, and you
  don't know if it's a string or a render array, you can pass it
  straight through render() without having to test the variable type
  yourself.


and another solution is, use drupal_get_form as you call back function and pass your form to it as an argument. ( take a look at https://www.drupal.org/docs/7/howtos/how-to-make-a-simple-module-with-a-form-and-menu-link )

function YOURMODULE-NAME_menu() {
  $items = array();

  $items['examples/form-example'] = array( //this creates a URL that will call this form at "examples/form-example"
    'title' =&gt; 'Example Form', //page title
    'description' =&gt; 'A form to mess around with.',
    'page callback' =&gt; 'drupal_get_form', //this is the function that will be called when the page is accessed.  for a form, use drupal_get_form
    'page arguments' =&gt; array('product_search_by_pin_form'), //put the name of the form here
    'access callback' =&gt; TRUE
  );

  return $items;
}

function product_search_by_pin_form($form, &amp;$form_state) {
         // Provide a text field.
       $form['pin'] = array(
       '#method'=&gt; 'POST',
       '#action' =&gt; '$come_back',
       '#title' =&gt; t('Input your PIN'),
       '#type' =&gt; 'textfield',
       '#attributes' =&gt; array('size' =&gt; '20', 'maxlength' =&gt; '20'),
       '#placeholder' =&gt; 'Type your PIN',
       '#required' =&gt; TRUE,);

       // Provide a submit button.
       $form['submit'] = array(
       '#type' =&gt; 'image_button',
       '#required' =&gt; TRUE,
       '#src' =&gt; "/images/upload/search.png",
       '#attributes' =&gt; array('id' =&gt; 'submit'),
       '#value' =&gt; 'Search',);

  return $form;
}


and third is another way of implementation second solution

function product_search_by_pin_form($form, &amp;$form_state) {
       // Provide a text field.
       $form['pin'] = array(
       '#method'=&gt; 'POST',
       '#action' =&gt; '$come_back',
       '#title' =&gt; t('Input your PIN'),
       '#type' =&gt; 'textfield',
       '#attributes' =&gt; array('size' =&gt; '20', 'maxlength' =&gt; '20'),
       '#placeholder' =&gt; 'Type your PIN',
       '#required' =&gt; TRUE,);

       // Provide a submit button.
       $form['submit'] = array(
       '#type' =&gt; 'image_button',
       '#required' =&gt; TRUE,
       '#src' =&gt; "/images/upload/search.png",
       '#attributes' =&gt; array('id' =&gt; 'submit'),
       '#value' =&gt; 'Search',);

       return drupal_get_form($form);
} // END of Function