Denníček - február 2020: Rozdiel medzi revíziami
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
(4 medziľahlé úpravy od 2 ďalších používateľov nie sú zobrazené) | |||
Riadok 205: | Riadok 205: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Image:minigolf1.jpg|500px]] | |||
<youtube>VxueBDgHuJM</youtube> | |||
[[Image:minigolf2.jpg|500px]] | |||
<youtube>oyq80gu-uPc</youtube> | |||
Prečítali sme si návod k NXT segveju, ktorý poskladal Šimon, vymenili sme bloky, ktoré boli nastavené na NXT 2.0 farebný senzor (ktorý nemáme) za bloky pre svetelný senzor a čuduj sa svete, predsa len to chvíľu celkom pekne balansuje - veľa záleží na stabilnom osvetlení podložky: | Prečítali sme si návod k NXT segveju, ktorý poskladal Šimon, vymenili sme bloky, ktoré boli nastavené na NXT 2.0 farebný senzor (ktorý nemáme) za bloky pre svetelný senzor a čuduj sa svete, predsa len to chvíľu celkom pekne balansuje - veľa záleží na stabilnom osvetlení podložky: | ||
[[Image:segvej.jpg|600px]] | |||
<youtube>dAmbATuHCp0</youtube> | <youtube>dAmbATuHCp0</youtube> | ||
Potom Šimon poskladal pascu na myši: | Potom Šimon poskladal pascu na myši: | ||
[[Image:pasca_na_mys.jpg|600px]] | |||
<youtube width="270" height="480">_WDAFFef1GY</youtube> | <youtube width="270" height="480">_WDAFFef1GY</youtube> | ||
[[Image:riso.jpg|400px]] | |||
Janko pridal ukladanie kalibrácie do EEPROM a načítanie po štarte robota: | |||
<syntaxhighlight lang="C"> | |||
#include <EEPROM.h> | |||
#define switch 7 | |||
int val = 0; | |||
int min[6], max[6], prah[6]; | |||
void nacitaj_kalibraciu_z_EEPROM() | |||
{ | |||
for (int i = 0; i < 6; i++) | |||
{ | |||
prah[i] = EEPROM.read(i * 2) + (EEPROM.read(i * 2 + 1) << 8); | |||
} | |||
} | |||
void zapis_kalibraciu_do_EEPROM() | |||
{ | |||
for (int i = 0; i < 6; i++) | |||
{ | |||
EEPROM.write(i * 2, prah [i]&255); | |||
EEPROM.write(i * 2 + 1, prah [i]>>8); | |||
} | |||
} | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
Serial.println("Zacinam kalibraciu."); | |||
for (int i = 0; i < 6; i++) | |||
{ | |||
if (i>3) val=analogRead (i+2); | |||
else val=analogRead (i); | |||
min[i]=max[i]=val; | |||
} | |||
pinMode(switch, INPUT_PULLUP); | |||
if (digitalRead(switch) == LOW) | |||
{ | |||
kalibracia(); | |||
} | |||
else nacitaj_kalibraciu_z_EEPROM(); | |||
} | |||
void test_senzorov() | |||
{ | |||
for (int i=0; i<6; i++) | |||
{ | |||
if (i>3) val=analogRead (i+2); | |||
else val=analogRead (i); | |||
if (val<prah[i]) Serial.print("0"); | |||
else Serial.print("1"); | |||
} | |||
Serial.println(); | |||
delay(150); | |||
} | |||
void kalibracia() | |||
{ | |||
while(digitalRead(switch) == LOW) | |||
{ | |||
for (int i=0; i<6; i++) | |||
{ | |||
Serial.print(val); | |||
Serial.print("["); | |||
Serial.print(min[i]); | |||
Serial.print("-"); | |||
Serial.print(max[i]); | |||
Serial.print("], "); | |||
if (i>3) val=analogRead (i+2); | |||
else val=analogRead (i); | |||
if (val>max[i]) max[i]=val; | |||
if (val<min[i]) min[i]=val; | |||
} | |||
Serial.println(); | |||
} | |||
for (int i=0; i<6; i++) | |||
{ | |||
//druha cast programu (vypocet prahovej hodnoty) | |||
prah[i]=(2*max[i]+min[i])/3; | |||
} | |||
// zapisat kalibraciu do EEPROM | |||
zapis_kalibraciu_do_EEPROM(); | |||
} | |||
void loop() | |||
{ | |||
delay(300); | |||
test_senzorov(); | |||
} | |||
</syntaxhighlight> |
Aktuálna revízia z 16:58, 25. február 2020
Oliver naprogramoval prvú verziu rozpoznávania lopty:
int je_lopta(uint8_t r, uint8_t g, uint8_t b)
{
float h, s, v, max, min;
h = 0;
if (r < b){
if(r < g){
min = r;
}
else{
min = g;
}
}
else{
if (b < g){
min = b;
}
else{
min = g;
}
}
if (r > b){
if(r > g){
max = r;
if (max!= min){
h = 60*((g-b)/(max-min));
}
}
else{
max = g;
if (max!= min){
h = 60*(2+(b-r)/(max-min));
}
}
}
else{
if (b > g){
max = b;
if (max!= min){
h = 60*(4+(r-g)/(max - min));
}
}
else{
max = g;
if (max!= min){
h = 60*(2+(b-r)/(max - min));
}
}
}
v = max;
s = (max-min)/max;
if (h < 0){
h = h + 360;
}
if (h < 28 && h > 8 && s > 0.5 && v > 100){
return 1;
}
return 0;
}
//------------------
if (je_lopta(r,g,b) == 1)
{
cnt++;
}
Martin s Jankom pracoval na kalibrácií senzorov, zatiaľ máme toto:
#define senzor A7
#define switch 7
int val = 0;
int min, max;
void setup() {
Serial.begin(9600);
Serial.println("Zacinam kalibraciu.");
min=max=val=analogRead(senzor);
pinMode(switch, INPUT_PULLUP);
}
void loop() {
val=analogRead(senzor);
if(val<min)
min=val;
if(val>max)
max=val;
Serial.print(" val: ");
Serial.print(val);
Serial.print(" min: ");
Serial.print(min);
Serial.print(" max: ");
Serial.print(max);
Serial.println();
while(digitalRead(switch) == LOW) {
;
}
}
Milan dokončil a otestoval svoju historickú starožitnosť:
Matej pracoval na vlniacom zariadení, už nám vytvára na ružovom špagáte zaujímavé vlny:
Ondrej vylepšoval sadičku stromov:
Janko dokončil kalibráciu všetkých senzorov:
#define switch 7
int val = 0;
int min[6], max[6], prah[6];
void nacitaj_kalibraciu_z_EEPROM()
{
}
void setup()
{
Serial.begin(9600);
Serial.println("Zacinam kalibraciu.");
for (int i = 0; i < 6; i++)
{
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
min[i]=max[i]=val;
}
pinMode(switch, INPUT_PULLUP);
if (digitalRead(switch) == LOW)
{
kalibracia();
}
else nacitaj_kalibraciu_z_EEPROM();
}
void test_senzorov()
{
for (int i=0; i<6; i++)
{
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
if (val<prah[i]) Serial.print("0");
else Serial.print("1");
}
Serial.println();
delay(150);
}
void kalibracia()
{
while(digitalRead(switch) == LOW)
{
for (int i=0; i<6; i++)
{
Serial.print(val);
Serial.print("[");
Serial.print(min[i]);
Serial.print("-");
Serial.print(max[i]);
Serial.print("], ");
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
if (val>max[i]) max[i]=val;
if (val<min[i]) min[i]=val;
}
Serial.println();
}
for (int i=0; i<6; i++)
{
//druha cast programu (vipocet prahovej hodnoty)
prah[i]=(2*max[i]+min[i])/3;
}
// zapisat kalibraciu do EEPROM
}
void loop()
{
delay(300);
test_senzorov();
}
Prečítali sme si návod k NXT segveju, ktorý poskladal Šimon, vymenili sme bloky, ktoré boli nastavené na NXT 2.0 farebný senzor (ktorý nemáme) za bloky pre svetelný senzor a čuduj sa svete, predsa len to chvíľu celkom pekne balansuje - veľa záleží na stabilnom osvetlení podložky:
Potom Šimon poskladal pascu na myši:
Janko pridal ukladanie kalibrácie do EEPROM a načítanie po štarte robota:
#include <EEPROM.h>
#define switch 7
int val = 0;
int min[6], max[6], prah[6];
void nacitaj_kalibraciu_z_EEPROM()
{
for (int i = 0; i < 6; i++)
{
prah[i] = EEPROM.read(i * 2) + (EEPROM.read(i * 2 + 1) << 8);
}
}
void zapis_kalibraciu_do_EEPROM()
{
for (int i = 0; i < 6; i++)
{
EEPROM.write(i * 2, prah [i]&255);
EEPROM.write(i * 2 + 1, prah [i]>>8);
}
}
void setup()
{
Serial.begin(9600);
Serial.println("Zacinam kalibraciu.");
for (int i = 0; i < 6; i++)
{
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
min[i]=max[i]=val;
}
pinMode(switch, INPUT_PULLUP);
if (digitalRead(switch) == LOW)
{
kalibracia();
}
else nacitaj_kalibraciu_z_EEPROM();
}
void test_senzorov()
{
for (int i=0; i<6; i++)
{
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
if (val<prah[i]) Serial.print("0");
else Serial.print("1");
}
Serial.println();
delay(150);
}
void kalibracia()
{
while(digitalRead(switch) == LOW)
{
for (int i=0; i<6; i++)
{
Serial.print(val);
Serial.print("[");
Serial.print(min[i]);
Serial.print("-");
Serial.print(max[i]);
Serial.print("], ");
if (i>3) val=analogRead (i+2);
else val=analogRead (i);
if (val>max[i]) max[i]=val;
if (val<min[i]) min[i]=val;
}
Serial.println();
}
for (int i=0; i<6; i++)
{
//druha cast programu (vypocet prahovej hodnoty)
prah[i]=(2*max[i]+min[i])/3;
}
// zapisat kalibraciu do EEPROM
zapis_kalibraciu_do_EEPROM();
}
void loop()
{
delay(300);
test_senzorov();
}