JBrain Robot
Použili sme staré šasi zo šuflíka na jednoduchú aplikáciu dosky jBrain. Plastová základná doska nesie dva jednosmerné motorčeky, ktoré vznikli úpravou modelárskych servomotorčekov. Na rozdiel od bežnej úpravy, ktorá zachováva spôsob riadenia rýchlosti motorčeka šírkou impulzu, tieto dva mali celú elektroniku vyradenú (povedzme to priamo: zničenú) a tak fungovali len ako jednosmerné motorčeky s prevodovkou. Oba motorčeky sú priamo pripojené na dva na tento účel vyhradené výstupy dosky jBrain.
Šasi ďalej nesie olovenú batériu a dištančné stĺpiky pre jBrain. Neskôr sme robota vybavili ešte senzorom na čiaru LineSenzor od firmy Robotic Connection.
Najprv sme robota skúsili ovládať diaľkovo cez BT interface. Použili sme priamo ukážkový program zo stránok c-bot.eu.
Ďalším krokom bolo pripojenie Line Following Sensor-a cez zbernicu i2c. Problém bol len v tom, že knižničné funkcie predpokladajú aj existenciu vnútorných registrov zariadenia na i2c zbernici, ale tento senzor má len jeden jediný register - ten, ktorý obsahuje stav senzora. Napokon sme tento problém vyriešili.
Ukážkový program pre senzor:
package jBotBrain.Sensor;
import jBotBrain.hw.I2CPort;
import jBotBrain.hw.Led;
public class SensorMain {
public static int getLine()
{
byte buffer[] = {0x00};
I2CPort.i2cStart(0x50, 1, 0, buffer, 1, I2CPort.I2C_READ);
int range = buffer[0] & 0x1F + 0x20; // len 5 bitov nas zaujima
// + 20 je kvoli prvej jednotke, inak sa nevypisu nevyznamne nuly
return range;
}
public static void Dec2Bin(int n)
{
if (n == 0)
return;
else
{
Dec2Bin(n/2);
System.out.print(""+n%2); //Musi tam byt aspon kusok retazca
}
}
public static void main(String[] args) throws InterruptedException
{
Led.GREEN2.set(Led.MODE_BLINK, 500);
while(true)
{
int dist = getLine();
System.out.print("Line sensor: ");
Dec2Bin(dist); // Vytlaci binarne...
System.out.print(" BIN \n");
Thread.sleep(100);
}
}
}
Napokon sme všetko pospájali dohromady a výsledok môžete vidieť na videu: