Robotuko „akys”

linijos sekimo daviklis   Kadangi rungtis – linijos sekimas, mūsų robotukas turi aptikti tą liniją. Linijos aptikimui naudosime infraraudonųjų spindulių daviklius. Pats daviklis sudarytas iš infraraudonųjų spindulių (IR) siūstuvo – IR šviesos diodo, IR imtuvo – IR foto diodo ir komparatoriaus, kuris analoginį signalą pavers į skaitmeninį.

   Baltas paviršius atspindi spindulius, juodas paviršius juos sugeria. Kadangi nera tokių idealių baltų-juodų paviršių kurie sugeria visu 100 procentų – tam reikalingas komapratorius. Mes matuojame atsispindinčius IR, todėl reguliuojame komparatorių pavyzdžiui taip, kad jei IR yra iki 30 procentų – tai bus juodas paviršius – loginis 0, jei daugiau nei 30 procentų – baltas paviršius – loginis 1. Reguliavimas ir jautrumas bus nustatyti bandymo metu, jautrumas priklausys nuo išorinio apšvietimo, paviršiaus, atstumo iki linijos ir t.t.

 

Arduino + MAX7219 + Led matrica 8×8

Seniai jau darytas projektas tik niekaip negalėjau (nesugebėjau) aprašyti jo. Kilo idėja Arduino pajungti prie šviesos diodų matricos panaudojant MAX7219 Led valdiklį (draiverį). Kas įdomausia – į vieną eilę 3 valdymo laidais galima pajungti iki 8 tokių modulių. Gaunama 8×64 taškų eilutė.

Pati schema elementari, plokštė gavosi 6cmx6cm

programos kodas:

#include „LedControl.h“
int devices = 3; //moduliu skaicius
LedControl lc = LedControl (10, 12, 11, devices);

unsigned long delaytime = 50;
int row;
int col;
int address;

void setup (){
	for (int address = 0; address < devices; address++){
		lc.shutdown (address, false);
		lc.setIntensity (address, 12);
		lc.clearDisplay (address);}
	}

void clr_disp (int dev){
	delay (1000);
	for (address = 0; address < dev; address++){
		lc.clearDisplay (address);}
	}

void fill_pixel (int dev){
	for (row = 0; row < 8; row++){
		for (address = 0; address < dev; address++){
			for (col = 0; col < 8; col++){
				delay (delaytime);
				lc.setLed (address, row, col, true);}
			}
		}
	}

void fill_col_right (int dev, int b){
	for (address = 0; address < dev; address++){
		for (col = 0; col < 8; col++){
			delay (delaytime);
			lc.setColumn (address, col, b);}
		}
	}

void fill_col_left (int dev, int b){
	for (address = dev-1; address >= 0; address--){
		for (col = 7; col >= 0; col--;){
			delay (delaytime);
			lc.setColumn (address, col, b);}
		}
	}

void fill_row_down (int dev, int b){
	for (row = 0; row < 8; row++){
		for (address = 0; address < dev; address++){
			lc.setRow (address, row, b);}
			delay (delaytime);
		}
	}

void fill_row_up (int dev, int b){
	for (row = 7; row >= 0; row--;){
		for( address = 0; address < dev; address++){
			lc.setRow (address, row, b);}
			delay (delaytime);
		}
	}

void loop (){
	clr_disp (devices);
	fill_col_right (devices, 255);
	fill_row_down (devices, 0);
	fill_row_up (devices, 255);
	fill_col_left (devices, 0);
	}

 

ir gabalėlis youtubo

Pirmieji „žingsniai”

Pirmieji "žingsniai", na ne pirmieji, testuota buvo ir anksčiau ir klaidos taisytos, bet dabar jau važiuoja be problemų (kol kas)

Robotuko struktūrinė schema Ver 2

Pradėjus testuoti realius važiavimus išlindo pirmieji povandeniniai akmenys 🙂 Juk kitaip ir negali būti. Robotukas važiavo max. 2 sekundes, o paskui "užlinkdavo" kontroleris. Bėdos – kolektoriniai varikliukai. Juose stovi šepetėliai, kurie stipriai kibirkščiuoja, sukelia elektromagnetinius trukdžius ir visos tos "šiukšlės" persiduodavo kontroleriui, aišku jis to neištverdavo ir pasakydavo – "Nea, aš taip nežaidžiu". Prie viso to dar 5V reguliatorius ant kontrolerio nesugebėjo išspausti reikiamo galimgumo varikliukų užmaitinimui, todėl sprendimas – papildomas blokas su 5V reguliatoriumi ir kondensatorių (C) filtrais kiekvienam varikliukui.

robotuku strukturine schema ver 2

Filtrų bloko schema:

filtru blokas

Spausdintinė plokštė:

istrasuota plokste

o čia jei kas užsimanys DipTrace visi failiukai

filtru ir maitinimo blokas

va tokia "grožybė" gavosi, radiatorių reikės dėti didesnį – vis tik šyla jis.

Robotų intelektas – H-tiltas

H-bridgeH-tiltas (angl. H-bridge) – vienas iš populiariausiai naudojamų elektronikos komponentų robototechnikoje.  Kas tai ir kam jis reikalingas?

Su H-tiltu galime keisti poliariškumą apkrovai, o tai labai patogu valdyti pastovios srovės kolektorinius variklius. Kam naudojami varikliukai robototechnikoje manau nereikia pasakoti 🙂

Kodėl pavadintas H-tiltu? Pažiūrėjus į principinę schema – jungimas labai panašus į H raidę, nuo to ir kilo pavadinimas.

h-bridge-swich

S1-S4 – jungikliai, M – kolektorinis variklis. Sakysim, kad S1=0 – jungiklis išjungtas, S1=1 – jungiklis įjungtas.

Kai {S1,S4}=1 ir {S2,S3}=0 – variklis sukasi pagal laikrodžio rodyklę (sąlyginai)

h-bridge-switch-right

Kai {S2,S3}=1 ir {S1,S4}=0 – variklis sukasi prieš laikrodžio rodyklę

h-bridge-swich-left

Reikšmių lentelė:

S1 S2 S3 S4 Rezultatas
1 0 0 1 Sukasi pagal laikrodžio rodyklę
0 1 1 0 Sukasi prieš laikrodžio rodyklę
0 0 0 0 Laisvas variklio sukimasis
0 1 0 1 Variklio stabdymas
1 0 1 0 Variklio stabdymas
1 1 0 0 Neleistinas jungimas
0 0 1 1 Neleistinas jungimas

Toks jungimas deja turi savo trūkumų – yra valdymo kombinacijų, kurių naudoti draudžiama – gaunamas trumpas schemos jungimas.

Supaprastintas H-tilto pavyzdys – elektrinė schema kurioje naudojamos dvi rėlės (R1, R2) ir 2 jungikliai (S1, S2):

h-tiltas-relay

Čia valdymas kur kas paprastesnis. Kai S1=1 ir S2=0 – variklis sukasi pagal laikrodžio rodyklę

h-bridge-relay-right

ir kai S1=0 ir S2=1 – variklis sukasi prieš laikrodžio rodyklę

h-bridge-relay-left

Reikšmių lentelė:

S1 S2 Rezultatas
1 0 Sukasi pagal laikrodžio rodyklę
0 1 Sukasi prieš laikrodžio rodyklę
0 0 Variklio stabdymas
1 1 Variklio stabdymas

Rėlinis variklių valdymas retai kur naudojamas, nebent reikia apkrauti didelio galingumo pavaras. Jų minusas tas, kad nėra galimybės reguliuoti variklio apsukų. Bet šiuolaikinėje radioelektronikoje H-tiltai daromi tranzistoriniai o kai kuriais atvėjais naudojamos specializuotos mikroschemos, pvz L29Xx