Cuore
Vytvořené odpovědi
-
AutorPříspěvky
-
CuoreÚčastník
Obávám se, že encoder je cesta do pekel. Budeš tam mít spoustu mechanických vůli a čím dáš encoder blíž k motoru, tím bude proměřování větší. Takže zbytečná práce. V průmyslu se na tyto aplikace používají tzv. Lankové snímače což je kombinace encoderu a lankového bubnu. Konec lanka připevníš na spodní lištu žaluzií a měříš přesnou polohu.
CuoreÚčastníkBliknutí jsem předělal
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
nic lepšího mě nenapadlo. Jinak projekt je to spíš pro Raspi než arduino, proto jsem to tady nějak moc nezaplevelil. Na raspberry je napsaný celý program pro backend NASu a řízení disků a na HTPi je zase frontend pro komunikaci s NAS pak obsluha displaye, zápis dat na display, komunikace s Arduinem. Další frontendy jsou s klikacím GUI pro běžné PC, kde je možnost si yažádat o připojení do sítě, pro konkrétní disk. Arduino se stará jen o prvotní spuštění HTPi.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.
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
}
} -
AutorPříspěvky