GabrielM
Vytvořené odpovědi
-
AutorPříspěvky
-
Aleš
ÚčastníkTak to spíš 🙂
Ten hexapod je vlastní výroba, nebo koupené jako stavebnice?https://forum.arduino.cc/index.php?topic=4705.0
Tady píšou, že příkazem servo.read() se přečte jenom poslední hodnota, která byla do serva odeslaná. Skutečnou pozici serva prý přečíst nejde. Píšou, že by se musela udělat nějaká mechanická úprava – vytáhnout ze serva drát od potenciometru.honzakono
Účastníkvas quadped je moc peknej a roztomilej.
zrovna jsem zacal integrovat ultrazvukovy senzor a dela mi problem
namotat ho do kodu tak, aby fungoval soustavne v pozadi.
v tomto smeru jste nejspise daleko predemnou, mozna byste mi mohl poradit.honzakono
Účastníkpouzivam serva HS-645MG.
to „zakopnuti“ mozna nebyl tak uplne nejlepsi priklad :))) ,
ale stane se napriklad to, ze nekdy dostane servo z nejakeho duvodu povel k pozici driven nez staci dokoncit predeslou.Zwjar
ÚčastníkDíky za tipy a inspiraci, urcitě z toho něco pouziju.
Ale určitě nebudu používat relay modul. Kvůli místu to chci řešit triakem.Cuore
ÚčastníkJeště přidám nějakou ukázku hotového multimediálního PC HTPi a NAS serveru RASNas, na kterém jsou uloženy data. Hlavní požadavek byl bezhlučnost, proto síťové uložiště. Pak plně automatický chod a jednoduché ovládání. Raspi podporuje HDMI CEC + odchyt tlačítek arduinem, takže stačí jen ovladač od TV. A poslední požadavek minimální spotřeba. Arduino je napájeno pomocí USB z TV, takže běží jen když je zapnuta TV. Raspi je sepnuto následně Arduinem přes vnitřní napájecí zdroj HTPi. U RasNas pokud neni potřeba, tak běží pouze Raspi < 3W a potřebné disky se připnou.
posjirka
ÚčastníkAhoj,
tady máš jeden z příkladů:
http://www.instructables.com/id/Ethernet-Switching-with-Arduino/
případně:
https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-LED-control/
a něco s videem:
Aleš
ÚčastníkNějak si nedovedu představit, jak může hexapod zakopnout? 🙂 Já mám tohoto robota: https://drive.google.com/open?id=0B7XOvzuvJTLKXzE2YjREWE52QVU a v něm ta nejlevnější serva SG90. Serva jsou připojena přímo na Arduino Nano. Nikdy se nestalo, že by servo nedošlo do nastavené polohy. To by spíš něco prasklo. Jak jsem se do serva díval, tak je tam na motorek přivedené napájení, a na motorku je převodovka z několika plastových koleček. Myslím, že by asi prasklo některé z koleček, kdybych nohu nějak zablokoval.
Vám se stává, že servo nedojde na zadaný úhel?
Tady je ještě video: https://youtu.be/d0lvegUDVYEZbyšek Voda
ÚčastníkDíky za upřesnění.
Jaká serva používáte?honzakono
Účastníkomlouvam se, jestli jsem se nevyjadril srozumitelne.
tak tedy: … vim docela jiste kdy byl poslan prikaz k pohybu na pozici (dokonce i jak dlouho by mel trvat pohyb nez pozice dosahne). vetsinou je od pohledu i docela jasne ze serva dosahla cilovych pozic.
nekdy se ale stane (z rady duvodu), ze jedno nebo vice servmotoru proste nedojdou kam maji. napriklad kdyz hexapod zakopne. v takovem pripade by bylo treba zjistit pozici serva
a pracovat s ni v nasledujicich vypoctech casu a rychlosti pohybu serva k nasledujici regulerni pozici, pripadne korekci pozice, …. nebo i korekce zbytku hexapoda …
nehlede na to, ze by se s tim daly pohodlneji delat prechody mezi sekvencemi pohybu.
cili, nejde mi o to sledovat pozice motoru celou dobu, ale spise byt schopen
kontrolovat (a pripadne korigovat) pozice periodicky, a zjistovat je kdykoliv jindy,
kdy je jejich znamost potrebna k vypoctum nasledujicich zmen pohybu/sekvence.Zbyšek Voda
ÚčastníkTo „dosažení zadané pozice“ podle mě znamená to, že vy pošlete do SSC32:
„nastav servo 1 na úhel 100°“
Není ale možné, aby servo bylo okamžitě z 0° nastaveno na 100°, takže řídící elektronika s určitou rychlostí odesílá „nastav 1°“, „nastav 2°“, …, „nastav 50°“, …, „nastav 100°“ a v tento moment dojde k potvrzení, že je servo na požadované pozici.To je ale pouze potvrzení, že řídící elektronika odeslala servu, aby se nastavilo na 100°. Jestli tam ale servo skutečně je, to nikdo neví. Většinou ale na těch 100° skutečně je.
Podle původní otázky jsem myslel, že chcete mít skutečnou informaci o poloze serva (zjištěnou například nějakým senzorem). Teď to ale vypadá, že se jenom ptáte, jak získat z SSC32 informaci, že už servo bylo nastaveno na zadanou pozici. Jak to tedy myslíte?
honzakono
Účastníkdiky za info.
SSC posila do pocitace (skrze SSC-sekvencer) informaci o tom jestli servo jiz dosahlo zadanou pozici, nebo jeste ne. pravda je, ze to dela na vyzadani skrze USB pripojeni.
dokaze takto udajne posilat i udaje o pozici. doufal jsem, ze by mohlo umet stejne informace posilat i do ridiciho boardu (Arduino, v mem pripade) skrze TX / RX, kdyz
timto zpusobem pokyny prijima.
takze by to naznacovalo, ze je SSC nejmene alespon pro sebe schopne pozice zjistit.
je to divny, ze Arduino umi cist pozici serva, ktere je k jeho pinu pripojeno,
ale dedikovany servo kontroler to same neumi.
tohle cteni pozic je z mnoha duvodu dost potrebna vec (zvlaste kdyz ma clovek 18 servo motoru na hexapodu) nejen pro pripadne korekce za chodu.Cuore
ÚčastníkTak nakonec byl problém v SSR pomocí kterého se posila binární info od Raspi. Ikdyž tam byl pulldown odpor, tak arduino vyhodnocovalo Log1. Takže jsem to zapojil jako pullup a optimalizoval kód.
#include <IRremote.h>
#define PRODLEVA 50
bool MinulyStav = 0; // priznak predchoziho stavu tlacitka (1 .. stisknuto)
unsigned long CasZmeny; // promenna pro ulozeni casu zmeny stavu tlacitka
int zelena; // Zelene tlacitko na ovladaci TV Sony Bravia
int RECV_PIN = 3; // vstup od IRLED
int poc; // promenna na pocitani cycklu
int jas; // jas diody
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Zacatek cteni pinu v seriovem monitoru
pinMode(3, INPUT_PULLUP); // vstup od IRLED
pinMode(4, OUTPUT); // R
pinMode(5, OUTPUT); // G
pinMode(6, OUTPUT); // B
pinMode(7, INPUT_PULLUP); // zpetna vazba od RasPi
pinMode(12, OUTPUT); // napajeni pro RasPi
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(12, LOW);
}
void loop() {
// **OVLADANI RGB LED**
if (digitalRead(7) == 0 && digitalRead(12) == 1) // RasPi si seplo samodrzny kontakt vypnu napajeni
{
analogWrite(5, 150); // zelena LED = 1
analogWrite(4, 255); // cervena LED = 0
analogWrite(6, 255); // modra LED = 0
delay (5000); // cekej 5s
digitalWrite(12, LOW); // vypnu napajeni pro RasPi
}
else if (digitalRead(7) == 1 && digitalRead(12) == 1) // pokud RasPi jeste nenabehlo
{
analogWrite(4, 254); // cervena LED = 1
analogWrite(5, 254); // zelena LED = 1
analogWrite(6, 255); // modra LED = 0
}
else if (digitalRead(7) == 0 && digitalRead(12) == 0) // RasPi bezi a drzi si napajeni
{
analogWrite(6, 254); // modra LED = 1
analogWrite(5, 255); // zelena LED = 0
analogWrite(4, 255); // cervena LED = 0
}
else if (digitalRead(7) == 1 && digitalRead(12) == 0) // arduino v pohotovosti
{
analogWrite(4, 254); // cervena LED = 1
analogWrite(5, 255); // zelena LED = 0
analogWrite(6, 255); // modra LED = 0
}
// **ODCHYT TLACITKA Z DALKOVEHO OVLADACE**
if (irrecv.decode(&results)) {
int zelena = results.value;
if ((zelena == 13033) && ((digitalRead(7) == 1) && (digitalRead(12) == 0))) // pokud je stisknuto pozadovane tlacitko a zatim neprobehla akce spusteni RasPi
{
digitalWrite(12, HIGH); // sepni napajeni pro RasPi
analogWrite(5, 255); // zelena LED = 0
analogWrite(6, 255); // modra LED = 0
jas = 256; // zacatek bliknuti s cervenou LED
for(poc=0;poc<256;poc++){
jas = jas – 1;
analogWrite(4, jas);
delay(10);
}
for(poc=0;poc<256;poc++){
analogWrite(4, poc);
delay(10);
} // konec bliknuti s cervenou LED
}
Serial.println(zelena, HEX); // prepis HEX na seriovy monitor
irrecv.resume(); // Cti dalsi hodnotu
}
if (digitalRead(3) == 0) // je-li tlacitko stisknuto
{
if (MinulyStav == 0 && millis() – CasZmeny > PRODLEVA) // neni-li nastaven priznak
{ // tlacitko stisknuto a uplynul-li vetsi cas od zmeny stavu tlacitka nez je mez (50ms)
MinulyStav = 1; // nastav priznak tlacitko stisknuto
}
}
else // neni-li stisknuto tlacitko
{
CasZmeny = millis(); // zapamatuj si posledni cas, kdy bylo nestisknuto
MinulyStav = 0; // nuluj priznak, tlacitko stisknuto
}
}Zbyšek Voda
ÚčastníkPokud chcete mít přehled o poloze serva, musíte mít servo, které je na to přizpůsobené a má na sobě například nějaký přídavný senzor. Třeba na tomhle servu: https://www.adafruit.com/product/1404 je vyvedený potenciometr, takže měřením analogové hodnoty máte přehled, kam až servo dojelo.
I kdyby šla informace o nastaveném úhlu z desky SSC32 získat zpátky (což myslím nejde), bude tato informace stejně irelevantní, jako kdybyste si jenom pamatoval hodnotu, kterou jste na servu nastavil – neměl byste reálný feedback o poloze serva, ale jenom domnělou hodnotu, kterou si SSC32 myslí, že servo má nastaveno.
honzakono
ÚčastníkAno, kdyz si nekam nastavim servo, tak vim kde je :))))
… tedy pokud tam skutecne doputovalo, a to je prave ten problem, co potrebuji resit.
jednim z tech duvodu proc bych potreboval zjistovat pozice servo motoru je kontrola/debugovani.
Cteni pozice serva primo z Arduino boardu je mozne a celkem snadne.
Predpokladam, ze to same by melo byt mozne i z SSC32, jinak by byl tenhle servo kontroler
dost retardovany, cemuz se mi nechce verit, uvazime-le, ze se jedna o jeden z nejpouzivanejsich.Aleš
ÚčastníkŘekl bych, že to nejde. Ale podle mne, když si někam nastavíte servo, tak ho tam máte, a víte, kam jste si ho nastavil. Nebo ne?
Dawe
ÚčastníkZdravim,
osobne bych z jednoduchosti veci nacvakl do rolety dve kovove kolecka. Jedno pro horni polohu na spodni konec rolety a jedno pro spodni polohu tak aby pri vysunute rolete bylo tesne pod zasobnikem a pouzil bych dva bezkontakni snimace ktere bych umistil primo pod zasobnik rolety vedle sebe.
Pozor kovove kolecka nesmi byt na rolete primo pod sebou, ale vzajemne posunute do strany.
Snad sem svym napadem trochu pomohl.blackshock
ÚčastníkDíky za info, že na eBay je taky poštovné z Číny zdarma. Myslel jsem, že to je jen pro čínské eshopy.
Nicméně si dovolím ještě malou poznámku k té platební kartě. Aliexpress, resp. Alibaba.com, ktera jej vlastni, ma 2x tak velky obrat nez eBay, takze obava, ze by cloveku vyluxovali ucet nebo si kazili jmeno podvody, asi fakt nehrozi :-). Takze ja bych rekl, ze je uplne fuk, jestli clovek nakoupi na ebay nebo ali…
Aleš
ÚčastníkNa AliExpressu nenakupuju, protože se mi nechce zadávat bůhvíkomu údaje o mé platební kartě. Na eBay se to dá koupit za stejnou cenu, většinou ještě levněji než na Ali. Poštovné je také na eBay většinou zdarma (čínskou poštu dotuje stát, proto si mohou dovolit prodávat za 1$ včetně poštovného). Když něco koupeného na eBay nepřijde, nebo přijde nekvalitní/poškozené, tak číňan bez řečí pošle peníze zpět. Když se cuká, tak peníze vrátí PayPal.
blackshock
ÚčastníkMyslím, že základní výhoda AliExpressu je poštovný zdarma. Nebo je to na eBay tak levné, že se to vyplatí i s poštovným? A díky nulovému poštovnému nakupuju u různých obchodníků (nemusím se snažit nakumulovat co nejvíc do jedné zásilky), takže chodí jednotlivé součástky za pár dolarů a vyhnu se tak placení cla a DPH.
Docela by mě zajímalo, jestli někomu přišlo z AliExpressu něco nefunkčního. Já jsem na něm nakoupil vyšší desítky komponent a zatím vše v pohodě. A co se týká toho, že nic nepošlou, tak mě dorazilo vždycky vše. Kámošovi cosi nepřišlo, ale bez potíží mu vrátili peníze.
Jinak jsem ještě nakupoval na DX, ale je zbytečně drahé.
Zbyšek Voda
ÚčastníkZbyšek Voda
ÚčastníkTo vypadá moc pěkně 🙂
Neplánujete i vytvořit třeba různé „tachometry“ a podobné?
Pak by se mohl z grafů a „tachometrů“ poskládat docela pěkný dashboard.Korcagin
ÚčastníkMám dotaz. Jde číst pomocí arduina data z venkovního snimače domácí meteostanice a pak je nějakou formou zpracovávat?
OK1RR
ÚčastníkNemyslím si, že by AliExpress byl kdovíjak ideální. Na eBay lze najít Arduina často levněji (jak který typ a jak kde), ale hlavně při nákupu přes eBay máte přímo od nich záruku. Pokud nakupujete od Číňana přímo, jste jim vydání na milost a když vám pošlou šunt nebo třeba taky nic, pomoci se nedovoláte. To se vám při nákupech přes eBay nestane.
BTW mám špatnou zkušenost s Banggood a vynikající s eshopy na eBay.
BlindP
ÚčastníkUpdate!
Přidal jsem čárový graf, pole zobrazující aktualní hodnotu + možnost přidání min a max hodnoty stupnice.
Nový graf vytvoříte:
Graf teplota;
nebo pro plný:GrafPlny teplota;
dále
teplota = new Graf(pozice x, pozice y, velikost x, velikost y, barva, min, max);
Pokud zadáte pro max nulu, maximální hodnota se přizpůsobí.překreslení grafu zůstalo stejné:
teplota.kresli(hodnota typu float);
B.
Attachments:
Bojkas
ÚčastníkTak to dělá pořád to stejné, jen s tím, že mi nevím proč propisuje jen polovina displaye. Pokud to vrátím na ten původní kód, tak je to zase v pořádku.
Bojkas
ÚčastníkPS: stačí, když ji deklaruji?
int rpm;
rpm = (rps*60);
lcd.clear();
lcd.print(„Vitr: „);
lcd.print(0.3142*rpm*0.06);
lcd.print(“ km/h“);Bojkas
ÚčastníkAhoj,
ach tak, to mě nenapadlo.
Aleš: zdá se, že závorek je tam dost, vzorec jsem upravil, ale píše mi to, že „rmp“ není deklarované.
exit status 1
‚rpm‘ was not declared in this scope
http://fii.cz/zxfbym// Compute the RPM of a simple DC Motor using a photomicrosensor(PMS) #include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> #define PMS_PIN A0 // Pin for signal from Photomicrosensor #define LED_PIN 13 //Using Arduino's Internal LED; just as an indicator boolean counted=false; int t1=0,t2=0; int hits=0; int rps=0; LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); void setup(){ pinMode(PMS_PIN, INPUT); pinMode(LED_PIN, OUTPUT); lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH lcd.begin(16, 2); lcd.clear(); } void loop(){ t2 = millis(); if(t2 >= (t1 + 1000)){ rps = hits; hits = 0; t1=t2; } if(digitalRead(PMS_PIN) == HIGH){ if(!counted){ counted = true; hits++; } } else { counted = false; } digitalWrite(LED_PIN, digitalRead(PMS_PIN)); rpm = (rps*60); lcd.clear(); lcd.print("Vitr: "); lcd.print(0.3142*rpm*0.06); lcd.print(" km/h"); }
BlindP
ÚčastníkAhoj, protože 1*60*0.3142*0.06 = 1.13112 (jeden puls)
B.
Bojkas
ÚčastníkVečer zkusím, děkuji.
Každopádně bych rád znal důvod, abych zjistil, kde mohla být případně chyba?
-
AutorPříspěvky