[Arduino Series] 01 Introduction to ARDUINO

Thursday, February 13, 2014
Posted by TheRouteFinder
This is the starting point of the Arduino tutorial series. So this is an introduction to Arduino boards. Arduino is a open source hardware project. So Arduino board is a simple development board for micro controller development projects. But there are advanced Arduino boards available in the market such as PCduino, Arduino DUE. According to the purpose of use choose a board. There are several options available. There are several sizes, prices, performances available.
This is the official ARDUINO logo.


These are the example boards. You can google for arduino boards.


Arduino MEGA
Arduino UNO
Arduino pro mini

Yes! Now you know what is an arduino board. So I am going to tell you how to use it. Then we want a IDE to develop source code. Here you go to download the latest software. After install the software start the IDE. It looks like
Arduino IDE in Ubuntu, Same in Windows
There are lots of example available under File>>Examples. Then you needs to install drivers for Arduino boards. It is placed at Drivers directory in the root Arduino directory. Then connect an Arduino board to the PC using a USB cable. Just a simple thing to do, use 'right' symbol to compile the code and 'arrow' to upload. You've done. It is the way you needs to go.

Then I am going to say about the different boards in above images. Arduino DUE is the biggest one of the family and it has 54 digital I/Os (including analog outs) and 16 Analog inputes 12 Analog Outputs(PWM). And Arduino UNO and pro mini has 14 digital I/Os with 6 PWMs and 6 Analog inputs. All the analog inputs can use as digital outputs. According to the usage, select a correct board. No problem if you have enough money to buy two or three. All will work under 8MHz or 16MHz and 5v or 3.3v.

This is the introduction and next time I will explain a simple code.

Modeling 3D Environment Using Mobile Platform

Monday, October 7, 2013
Posted by TheRouteFinder

Autonomous Line Follower Robot with Arduino (UNO)

Friday, May 24, 2013
Posted by TheRouteFinder
සිංහලෙන් කියනවට වඩා මේක හොඳයි නේද? නැත්තම් මෙලෝ දෙයක් තේරෙන්නේ නැති වෙයි..

First of all I'm going to list what we need to do this.

1. An Aruino
2. 2 gear motors with wheels (6V to 12V)
3. 16x2 LCD
4. Rechargeable battery
5. Connector wires
6. Copper Boards
7. Plastic sheet (5x5 inch)
8. A computer with Ardunio IDE
9. IR sensor array (like Pololu OR hand made )
10. LM293 dual H bridge IC
11. 10k preset


This is the PCB design I used to connect LCD and dual H bridge motor driver. For motor driver IC connections, refer the LM293 datasheet. then you can understand the connections. Same thing to do for the LCD also. That is only for the above PCB. It can be downloaded from here. Make a PCB and solder the components to it.

First take the Arduino and IR sensor array, connect IR output pins to ANALOG pins on Arduino board. It should have same order on IR sensor array and Analog pin order. If not you will be in trouble when identifying inputs from sensor to Arduino. If it is finished then connect LCD pins RS,E,D4D5,D6,D6 and D7 to Arduino's 2nd-7th pins. There are six pins remaining on Arduino except 0 and 0 (Tx & Rx). So connect those 6 pins to motor controller. You can find what are the pins connected to PWM and directions in the code I provided.

By using the battery, power up the assembled parts. Then you can check the parts if they are working properly, else you may want to debug or troubleshoot all connections again. Make sure you have done it properly. Then assemble all the parts together as bellow.



Use Arduino IDE to upload the code after your modifications. It is easy to make, but tune it properly and it is not much easy work. PID controlled line follower will be the next one. Good Luck!


////////////////////////////////////////////////////////////////////////////////////
//                                                                                //
//  ////////////////////////////////////////////////////////////////////////////   //
//  ////////////////////////////////////////////////////////////////////////////   //
//  ///                                                                            //
//  ///        SAITM 2013 ROBOTIC COMPETITION //
//  ///        UVA WELLASSA UNIVERSITY              //
//  ///        MECHATRONICS                                    //
//  ///        AIO_L ROBOT  (LINE FOLLOWER)      //
//  ///                                                                           //
//  ////////////////////////////////////////////////////////////////////////////  //
//  ///                                                                      ///  //
//  ///        HASITHA B. RATHNAYAKE H.G.     ///  //
//  ///        TheRouteFinder PROJECTS (TRF)        ///  //
//  ///        www.trf.usa.cc                                        ///  //
//  ///        admin@trf.usa.cc                                    ///  //
//  ///                                                                      ///  //
//  ////////////////////////////////////////////////////////////////////////////  //
//  ////////////////////////////////////////////////////////////////////////////  //
//                                                                                //
////////////////////////////////////////////////////////////////////////////////////



/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*\
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||                                                                                                         ||
||    YOU MUST KNOW HOW TO DEBUG, CODE BUGS OCCURED & TROUBLESHOOT THE ENCOUNTERED CIRCUIT ERRORS          ||
||                                                                                                         ||
||        DEFINED: TurnOFF()      For 50mS                                                                 ||
||                 TurnRIGHT()    with TurnOFF                                                             ||
||                 TurnLEFT()     with TurnOFF                                                             ||
||                 FindLINE()     Define Black OR White according to analogRead() values                   ||
||                 GoFOWARD()     with PWM                                                                 ||
||                 GoBACKWARD()   with PWM                                                                 ||
||                                                                                                         ||
||                                                                                                         ||
||                 LMF as Left Morot Front                                                                 ||
||                 RMF as Right Morot Front                                                                ||
||                 LMB as Left Morot Back                                                                  ||
||                 RMB as Right Morot Back                                                                 ||
||                                                                                                         ||
||                 LCD 16x2      7  6  5  4  3  2     Arduino PIN                                          ||
||                               RW E  D4 D5 D6 D7    LCD PIN                                              ||
||                                                                                                         ||
||                 SLL    as MOST LEFT SENSOR                                                              ||
||                 SL     as LEFT SENSOR                                                                   ||
||                 SM     as AVERAGE VALUE OF TWO MIDDLE SENSORS (sen[2]+sen[3])/2                         ||
||                 SR     as RIGHT SENSOR                                                                  ||
||                 SRR    as MOST RIGHT SENSOR                                                             ||
||                                                                                                         ||
||                                                                                                         ||
||                                                                                                         ||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/





#include <avr/sleep.h>
#include <LiquidCrystal.h>

int LMB = 13;  
int LMF = 12;
int RMB = 8;  
int RMF = 9;

LiquidCrystal lcd(7,6,5,4,3,2);
int sen[] = {0, 0, 0, 0, 0, 0};
char SL=0,SR=0,SM=0,SLL=0,SRR=0;



/////////////////////////////////////////////////////////////////////////////////////////////////////
//                                  SETUP FUNCTION                                                 //
/////////////////////////////////////////////////////////////////////////////////////////////////////

void setup()                    // run once, when the sketch starts
{
  Serial.begin(9600);           // set up Serial library at 9600 bps
  lcd.begin(16, 2);             // Print a message to the LCD.

  pinMode(LMF, OUTPUT);
  pinMode(LMB, OUTPUT);
  pinMode(RMF, OUTPUT);
  pinMode(RMB, OUTPUT);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//TURN OFF FUNCTION                       //
/////////////////////////////////////////////
int TurnOFF(){
  analogWrite(10, 0);
  analogWrite(11, 0);
  lcd.print("OFF");
  lcd.clear();
  delay (30);
}
/////////////////////////////////////////////
//TURN LEFT FUNCTION                       //
/////////////////////////////////////////////
int TurnLEFT(int time,int PWM1, int PWM2){
  TurnOFF();
  analogWrite(10, PWM1);
  analogWrite(11, PWM2);
  digitalWrite(LMB, HIGH);
  digitalWrite(RMF, HIGH);
  lcd.print("Turning LEFT");
  lcd.clear();
  delay(time);
}
/////////////////////////////////////////////
//TURN RIGHT FUNCTION                      //
/////////////////////////////////////////////
int TurnRIGHT(int time,int PWM1, int PWM2){
  TurnOFF();
  analogWrite(10, PWM1);
  analogWrite(11, PWM2);
  digitalWrite(RMB, HIGH);
  digitalWrite(LMF, HIGH);
  lcd.print("Turning RIGHT");
  lcd.clear();
  delay(time);
}
/////////////////////////////////////////////
//GO FOWARD FUNCTION                       //
/////////////////////////////////////////////
int GoFOWARD(int time,int PWM1, int PWM2){
  TurnOFF();
  analogWrite(10, PWM1);
  analogWrite(11, PWM2);
  digitalWrite(RMF, HIGH);
  digitalWrite(LMF, HIGH);
  lcd.print("Go STRAIGHT");
  lcd.clear();
  delay(time);
}
/////////////////////////////////////////////
//GO BACKWARD FUNCTION                     //  NEVER USED HERE
/////////////////////////////////////////////
int GoBACKWARD(int time,int PWM1, int PWM2){
  TurnOFF();
  analogWrite(10, PWM1);
  analogWrite(11, PWM2);
  digitalWrite(RMB, HIGH);
  digitalWrite(LMB, HIGH);
  lcd.print("Go Back");
  lcd.clear();
  delay(time);
}
/////////////////////////////////////////////
// FIND LINE FUNCTION                      //
/////////////////////////////////////////////
int FindLINE(){
for(int s=0;s<=5;s++){
sen[s]=analogRead(s);
}
if (sen[0]>915){  SLL='B';}
else {SLL='W';}
if (sen[1]>840){  SL='B';}
else {SL='W';}
if (((sen[2]+sen[3])/2)>915){  SM='B';}
else {SM='W';}
if (sen[4]>850){  SR='B';}
else {SR='W';}
if (sen[5]>915){  SRR='B';}
else{ SRR='W';}
}
////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//                        INFINITE RUN FUNCTION                               //
////////////////////////////////////////////////////////////////////////////////
void loop(){
  lcd.setCursor(0, 1);
  lcd.print("TRF MECHATRONICS");
  lcd.setCursor(11, 0);
  lcd.print("AIO_L");

FindLINE();

  if(SM=='B' && SL=='W' && SR=='W'){
  GoFOWARD(8, 200, 200);
  }
  else if(SM=='B' && SL=='B' && SR=='W'){
  GoFOWARD(8, 200, 160);
  }
  else if(SM=='B' && SL=='W' && SR=='B'){
  GoFOWARD(8, 160, 200);
  }
  else if(SM=='B' && SL=='B' && SR=='B'){
  GoFOWARD(20, 200, 200);
  if(SLL=='B' && SRR=='B'){
  GoFOWARD(8, 200, 200);
  }
  else if(SL=='W' && SLL=='W' && SRR=='B'){
  TurnRIGHT(50, 100, 100);
  }
  else if(SLL=='B' && SRR=='W' && SR=='W'){
  TurnLEFT(50, 100, 100);
  }
  }
  else if(SM=='B' && SL=='B' && SLL=='B' && SRR=='W'){
  TurnLEFT(50, 100, 100);
  }
  else if(SM=='B' && SR=='B' && SRR=='B' && SLL=='W'){
  TurnRIGHT(50, 100, 100);
  }
  else if(SLL=='W' && SL=='W' && SM=='W' && SR=='W' && SRR=='W'){
  GoFOWARD(80, 200, 200); //ADJUST DELAY
  }
  else if(SLL=='B' && SL=='B' && SM=='B' && SR=='B' && SRR=='B'){
  GoFOWARD(80, 200, 200);
          FindLINE();
  if(SLL=='B' && SL=='B' && SM=='B' && SR=='B' && SRR=='B'){
  TurnOFF();
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);
        sleep_enable();
        sleep_mode(); // STOP THE BOT
  }
  else{
  GoFOWARD(8, 200, 200);
  }
  }


}


////////////////////////////////////////////////////////////////////////////////////
//                                  THE END                              //

දෘෂ්ටි ප්‍රස්ථිතික සංදර්ශක දැකලා ඇති කියලා මම හිතනවා, මේ රූපේ තියන්නේ ඒ වගේ එකක් තමයි. මේකට ඉංග්‍රිසියෙන් කියන්නේ POV Display කියලයි. මුලින්ම ඒවගේ එකක් හදන්න කැමති කෙනෙකුට උදවුවක් විදිහට මම මුල ඉඳලම කියන්නම්.

හදන්න ඕනේ වෙන දේවල් ටික කියන්නම්.

1. Micro-controller (PIC16F84 or any) එකක්
2. LED ( RED ) 8ක්, 16ක් හෝ 24ක්. (PIC16F84 >8)
3. Copper Board එකක්
4. Mail pin Headers ප්‍රමාණවත් තරම්
5. ඊයම්
6. Push Button එකක්
7. 20MHz Crystal එකල්
8. 27pf Capasitor දෙකක්
9. Programmer එකක් (PicKit 2/3)
10. LED ගණනම 330ohm Resisters
11. Nokia rechargeable බැටරියක්
12. 12v මෝටරයක්
13. 12v Power Supply එකක්
14. Computer එකකුත් ඕනෙමයි ඉතින්. මේකම හදනවා නම්  නැතුවට කමක් නෑ. ඒත් එකක් ඔනේ වෙනවා.

මේ ටික හොයා ගත්තාට පස්සේ මේ තියෙන LINK 1 එකෙන් PCB Design එක බාගන්න.  LINK 2 එකෙන් PCB Wizard Software එකත් බාගෙන වෙනස්කම් කරගන්න. නැත්තම් ඔයාලම අලුතින් 1ක් අඳින්නකෝ.. ඒක ගොඩාක් හොඳයි.

මම පාවිච්චි කලේSMD Resistors ( රවුම් කරලා තියෙන්නේ ඒවා ) ඔයාලා ඒවා වෙනුවට සාමාන්‍ය ඒවා ගන්නවා නම් මේ PCB එකක් හදාගන්න design එක පාවිච්චි කරලා. ඊට පස්සේ Drill කරලා Components ටික පාස්සගන්න. මේ රූපේ විදිහට Glue Stick එකක් පාවිච්චි කරලා PCB දෙක එකට අටවාගන්න ගැලවෙන්නේ නැතිවෙන්න. මොකද ඕක කැරකෙන්නේ හෙමින් නෙවෙයිනේ.. එතකොට බොහොම ලේසියෙන් ගැලවිලා ඇවිත් අනතුරක් වෙන්නත් පුලුවන්. ඊට පස්සේ රූපේ විදිහට PCB 1 මෝටරයට සවිකරගන්න. Mechanical වැඩේ හරි දැන්.

ඊට පස්සේ මේ LINK 3 එකෙන් PIC C code එක බාගෙන වෙනස්කම් කරගන්න. එහෙමම දානවා නම් .hex file එක programmer software එකට import කරලා PIC micro-controller එකට Upload කරන්න. ඔක්කොම හරි නම් power දීලා බලන්නකෝ.. එකතරා වෙලාවක එකතරා voltage එකකදී displaying message එක stable වේවි. ඒවා හොයාගන්න එක මට කරන්න බෑනේ.. පොඩ්ඩක් උත්සාහ කරලා බලන්නකෝ.. වෙන මොනවා හරි දැනගන්න ඕනේ නම් අහන්නකෝ.. 

ආ... Micro-controller එකට power දෙන්න Nokia බැටරිය පාවිච්චි කරන්නකෝ.. අමතක වුණා කියන්න. .

Xperia ray 4.2.2
video @ YouTube: http://youtu.be/CQ6epvQ6Iw8
TheRouteFinder PROJECTS

Downloads

Welcome to My Blog

Popular Post

- Copyright © TheRouteFinder -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -