Posted on

Robot de urmărire linie folosind Arduino și modulul L298N pentru incepători

Robot de urmărire linie folosind Arduino și modulul L298N
Line Follower Robot Using Arduino And L298N Module

Robotul de urmărire a liniilor este un vehicul automat care urmează o linie vizuală neagră sau o cale pe o suprafață.
Folosește o linie neagră pe o suprafață albă sau o linie albă pe o suprafață neagră.
Vom învăța cum să facem un robot de urmărire a liniilor folosind Arduino și modulul de driver de motor L298N.

rfl

CUM FUNCȚIONEAZĂ ROBOTUL „LINE FOLLOWER” ?

Conceptul de robot de urmărire a liniilor este legat de transmiterea și recepția luminii. Culoarea albă reflectă toată lumina care cade pe ea, în timp ce culoarea neagră absoarbe toată lumina.
În acest robot de urmărire a liniilor, am folosit transmițătoare și receptoare IR.
Când lumina IR cade pe o suprafață albă, este reflectată înapoi către receptorul IR, generând unele modificări de tensiune care sunt analizate de Arduino.
Când lumina IR cade pe o suprafață neagră, este absorbită de suprafața neagră și nicio rază nu este reflectată înapoi, astfel încât receptorul IR nu primește nicio rază.
În acest proiect, când senzorul IR detectează o suprafață albă, starea de intrare Arduino devine HIGH, iar când detectează o linie neagră, devine LOW.
Pe baza acestor intrări, un Arduino Uno oferă ieșirea adecvată pentru a controla urmăritorul de linie.

SCHEMA CIRCUIT ROBOT LINIE FOLLER
LINE FOLLOWER ROBOT CIRCUIT DIAGRAM

Line-Follower-Circuit-Diagram

Urmați acest tabel pentru a vă face conexiunile.

L298N driver Pins –> Arduino Pins
ENA –> jumper
IN1 –> D9
IN2 –> D6
IN3 –> D5
IN4 –> D3
ENB –> jumper

Infrared Sensor pins –> Arduino pins
Vcc –> 5v
GND –> GND
Right IR sensor OUT –> D13
Left IR sensor OUT –> D12

Pentru modulul de driver de motor L298N, motoarele sunt conectate la bornele de motor ale modulului de driver de motor.
Driverul motorului are alte 3 borne, în care unul este de 12 volți conectat la baterie.
Terminalul GND este conectat la borna negativă a bateriei și, de asemenea, este conectat la pinul GND al plăcii Arduino
Si 5v este conectat la 5v a plăcii Arduino.

COD ARDUINO PENTRU ROBOT LINE FOLLOWER
ARDUINO CODE FOR LINE FOLLOWER ROBOT

// –––––––––––
// roboromania.ro
#define MOTOR_SPEED 60

int mot1=9;
int mot2=6;
int mot3=5;
int mot4=3;
int left=13;
int right=12;
int Left=0;
int Right=0;

void LEFT (void);
void RIGHT (void);
void STOP (void);

void setup() {
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(mot3,OUTPUT);
pinMode(mot4,OUTPUT);
pinMode(left,INPUT);
pinMode(right,INPUT);
digitalWrite(left,HIGH);
digitalWrite(right,HIGH);
}

void loop() {
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
while(1) {
Left=digitalRead(left);
Right=digitalRead(right);
if((Left==0 && Right==1)==1)
LEFT();
else if((Right==0 && Left==1)==1)
RIGHT();
}
}

void LEFT (void) {
analogWrite(mot3,0);
analogWrite(mot4,30);
while(Left==0) {
Left=digitalRead(left);
Right=digitalRead(right);
if(Right==0) {
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1) {
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
}
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
}

void RIGHT (void) {
analogWrite(mot1,0);
analogWrite(mot2,30);
while(Right==0) {
Left=digitalRead(left);
Right=digitalRead(right);
if(Left==0) {
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1) {
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot3,MOTOR_SPEED);
analogWrite(mot4,0);
}
analogWrite(mot1,MOTOR_SPEED);
analogWrite(mot2,0);
}

void STOP (void) {
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}
//––––––––––

YouTube

Succes!

Posted on

Sistem de urmărire solară cu două axe

Sistem de urmărire solară cu două axe

Tracker-ul solar cu două axe este unul dintre cele mai căutate proiecte.
Si este usor de realizat.

510775989001tracker2tracker3pg_

Cum functioneazã?
Când lumina soarelui apare pe urmăritorul solar începe să calculeze și să compare din ce direcție provine intensitatea maximă a soarelui.
Intensitatea maximă a luminii direct proporțională cu puterea maximă convertită.
Folosim LDR, care este cunoscut sub numele de fotorezistență, atunci când soarele luminează LDR, valoarea rezistorului LDR va scădea. Folosim două servomotoare care ajută la deplasarea panoului pe doua direcții.
Arduino citeste valorile rezistențelor LDR și acționează servomotoarele in unghiurile potrivite pentru o luminozitate maximă.

Componente:
• Arduino Uno
• 4 LDR
• 4- 10K Ohm Resistor
• 2- Servo Motor
• Solar Panel
• Jumper wire
• Breadboard

Solar-4

Cod:

// –––––––-

// roboromania.ro

#include <Servo.h>
Servo horizontal; // horizontal servo
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 45;
int servovLimitHigh = 100;
int servovLimitLow = 1;

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left – BOTTOM LEFT <— BDG
int ldrrt = A3; //LDR top rigt – BOTTOM RIGHT
int ldrld = A1; //LDR down left – TOP LEFT
int ldrrd = A2; //ldr down rigt – TOP RIGHT

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt – avd; // check the diffirence of up and down
int dhoriz = avl – avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol)
{
if (avt > avd)
{
servov = ++servov;
if (servov > servovLimitHigh)
{servov = servovLimitHigh;}
}
else if (avt < avd)
{servov= –servov;
if (servov < servovLimitLow)
{ servov = servovLimitLow;}
}
vertical.write(servov);
}
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
{
if (avl > avr)
{
servoh = –servoh;
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
else if (avl = avr)
{
delay(5000);
}
horizontal.write(servoh);
}

delay(dtime);

}

//–––––––––

 

Succes!