Nimbus
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirka
Účastníkdíky
posjirka
Účastníktrochu se zpožděním ale přeci:
// náhodné říze 3 serv // v1 // místo serv bude řešením výpis stavu 3 proměnných na seriový port. // by JP 2016 // int servo1 = 0; // uhel natočeníserva 1 int servo2 = 0; // uhel natočeníserva 2 int servo3 = 0; // uhel natočeníserva 3 int uhel = 0; // novz uhel natočení int pauza = 0; // doba pauzy před další změnou int vyber = 0; // pomocná promměná pro výběr , které servo se bude měnit void setup() { Serial.begin(9600); // inicializace seriove komunikace randomSeed(analogRead(A0)); // generátor náhodných čísel začne od čísla == aktuální hodnota na portu A0 } void loop() { // generovaní náhodných hodnot //---------------------------- // novy uhel natočení serv uhel = random(0, 180); // výběr serv pro změnu vyber = random(0, 127); // délka pauzy v ms pauza = random(200, 1000); // uprava hodnot natočení serv //---------------------------- // když 0. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo1" if (bitRead(vyber,0) == 1) { servo1 = uhel; } // když 1. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo2" if (bitRead(vyber,1) == 1) { servo2 = uhel; } // když 2. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo3" if (bitRead(vyber,2) == 1) { servo3 = uhel; } // výpis proměnných a stavu serv //------------------------------ Serial.print("Servo 1 : "); Serial.print(servo1); Serial.println(" st."); Serial.print("Servo 2 : "); Serial.print(servo2); Serial.println(" st."); Serial.print("Servo 3 : "); Serial.print(servo3); Serial.println(" st."); Serial.print("Vyber : "); Serial.print(vyber); Serial.print(" = "); Serial.println(vyber, BIN); Serial.print("Pauza : "); Serial.print(pauza); Serial.println(" ms"); // oddělovač //---------- Serial.println("****************************"); delay(pauza); // čekání na další změnu }
Zbyšek Voda
ÚčastníkVkládám slíbený obrázek od posjirka.
posjirka
Účastníkomlouvat se nemusíš. každý něják začínal. spíš je důležitější že jsi našel řešení a podělil se o něj s námi.
DíkySoci
ÚčastníkZa málo informací se omlouvám, nicméně se mi mezitím podařilo najít správný návod. Pokud by někdo měl stejný problém přikládám odkaz díky kterému jsem to rozchodil, stačilo se jen zbavit částí ovládající servo.
http://www.arduinoecia.com.br/2014/12/controle-de-acesso-modulo-rfid-rc522.html
Zbyšek Voda
ÚčastníkZatím je bohužel pro uživatele možné vložit obrázek pouze z externího zdroje.
Když mi ho ale pošlete na mail zbysekvoda@gmail.com, dám ho sem.posjirka
Účastníkjojo přesně tak, chtěl jsem jej využít jako předřadný odpor pro měření teploty pomocí NTC čidla a zjistil jsem, že se hodnoty těchto odporů na ATMEGA328p na 2 analogových pinech výrazně lišila. Pokud si dobře vzpomínám tak to bylo cca 12k Ohm a 18kOhm (měřeno jako úbytek napětí na stejném odporu proti vstupu a zemi).
Na hrubší věci super, pro něco intenzivnějšího to není. Navíc to má tuším max.0,125W/pin(odpor)
posjirka
Účastníkobrázek je správně, jen blog si jej zablokoval pro extrení využití. Je nějáká varianta jak sem vložit obrázek?
Google Drive mám, ale používat nebudu, zbytečně bych si zanášel místo na disku a až budu dělat pravidelnou čístku smažu i toto a nebude mít nikdo nic. Na netu oceňuji že jsou informace dostupné i o několik let později a stále mohou pomoci….piticko
ÚčastníkJo tak. Jsem nechápal moc ten první bit. Budu muset někde nastudovat… Ta možnost sepnutí náhodného počtu serv je teď mimo mne. Ale pokud bys měl energii spáchat jednoduchý prográmek např. s LEDkama, budu rád (možná nejen já).
piticko
ÚčastníkSuper, takže využití je ideálni pro tlačítka a jiné „hrubší“ činnosti. 🙂 Díky!
Zbyšek Voda
ÚčastníkRozčilujete se zbytečně. To, že se zobrazil jiný obrázek, než jste chtěl… za to může váš blog. Co zkusit třeba Google Drive, Dropbox…?
posjirka
Účastníknechápu dotaz. Jak jsem psal vygeneruj náhodnou proměnnou a urči si např. že 1, bit bude aktivita serva 1. 2. bit aktivace serva 2, 3. bit aktivace serva 3.
V kodu je to ještě jednodušší#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;int random1 = 0; // promenna kam se ulozi nahodne cislo – cislo serva
int random2 = 0; // promenna kam se ulozi nahodne cislo – novz uhel
int random3 = 0; // promenna kam se ulozi nahodne cislo – prodleva…. nastaveni pinu atd.
random1 = random(0, 16); // vzgeneruj noahodne cislo pro pocet serv
random2 = random(0, 180); // vzgeneruj noahodne cislo pro uhel serva
random3 = random(200, 1000); // vzgeneruj noahodne cislo pro delay
if (bitRead(random1, 1) == 1 )
{
servo1.write(random2);// uprav stav serva 1
}
…
delay(random3); // pauyaposjirka
Účastníkobávám se že ani to není přesné. Hodnota interního pull up drporu u AVR kolísá mezi 10 a 50 kOhm.
posjirka
Účastníktak já nakreslím lepší schéma, přidám ho k sobě do obrázku pro blog (pouze souborově bez zobrazení) a ani to sem nemůžu vložit. Tak kam mám do….le vkládat obrazky admine????????????
Aleš
ÚčastníkV podstatě ano. Jenom s tím rozdílem, že vnitřní pull-up není 10k ale 50k, což někdy nemusí stačit.
piticko
Účastníknějak se tu stránky zastavily?
odpovím za fiam…
zobrazí se mi úvodní stránka, s tím, že je tam:
ZDARMA: Průvodce světem Arduina (reklama na knihu)
další je:
Nejnovější články (pusto prázdno)
a nakonec po scrollování dolu:
Co je arduino (se základním popisem)
.Jo a přihlášení funguje jen z úvodní stránky, na jiných to hodí:
No posts found.
piticko
Účastník…a teď ještě vyřešit to, aby se pohybovaly i dvě serva najednou…jak na to?
piticko
Účastníkposjirka: někde se asi stala chyba… co se to objevilo za hlášku, místo obrázku? 😉
posjirka
Účastník
tak jsem to dal na uložiště blogu….Attachments:
posjirka
Účastníks tím ti nikdo nepomůže protože netušíme na co se ptáš.
Pokud potřebuješ pomoct musíš nám dát co možná nejvíc informací.
Z výsledku kodu „xy“ nic nevyčeteme.
Dej sem původní kod, nebo odkus jsi to stáhnul, dej sen schéma zapojení a co vlastně má to zapojení dělat a můžeme se na to vrhnout.posjirka
Účastníkjá bych použil 3 generované random proměnné.
1. by mi určovala které serva mají reagovat (1.bit bylo servo 1, 2 bit servo 2, 3bit servo 3)
2. proměnná by mi řešila nastavení (úhel) pro tyto serva
3. proměnná by mi generovala délku prodlevy k dalšímu kroku.piticko
Účastníkco vymyslet nějaký takový kód:
vygeneruj náhodné číslo z pinu A1 od 0 do 1023
čekej vygenerovaný čas A1 (pro delší čas si lze pomoct matikou)
vygeneruj náhodné číslo z pinu A0 od 1 do 3
když bude číslo 1->udělej něco se servem1
když bude číslo 2->udělej něco se servem2
když bude číslo 3->udělej něco se servem3
…a znovapiticko
ÚčastníkTak jsem spáchal první verzi tak, aby byla funkční…
int tln; int tl=0; void setup() { for (int x=2;x<=6;x++){ pinMode(x,INPUT_PULLUP); } for (int i=8;i<=12;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH); delay(100); digitalWrite(i,LOW); } delay(2000); randomSeed(analogRead(0)); tln = random(2,7); } void loop() { if(tln==2){ digitalWrite(8,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==3){ digitalWrite(9,HIGH); digitalWrite(8,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==4){ digitalWrite(10,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==5){ digitalWrite(11,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(12,LOW); } else if(tln==6){ digitalWrite(12,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); } tl=digitalRead(tln); if (tl==LOW){ tln=random(2,7); } else{} }
I jsem tedy zkoušel na výstup PULLUP 5V připojit OV a měl jsem asi štěstí, výstup přežil a i reagoval na těch 0V, jak poprvé psal Zbyšek.
posjirka, nastuduji tvůj „obrázek“ a rád bych samozřejmě využil co nejméně pinů…poněvač, pokud budu chtít více tlačítek, tímto způsobem, co jsem spáchal, je k dispozici jen jedno. 🙂Krystof
ÚčastníkMnohokrát děkuji,
hned v pondělí to vyzkouším.posjirka
ÚčastníkVždyť nikde nemáš paralelu mezi vzdáleností a intenzitou, pouze stále dokola rozsvěcíš a zhasínaš LED.
Zkus toto, ale píšu to jen od PC nemám Arduino u sebe:
#include <ultrasonicranging.h>
#define ECHO_PIN 7 // ECHO pin of HC-SR04
#define TRIG_PIN 6 // Trigger pin of HC-SR04
#define LED_OUT 11 // Drive LED (Base pin of TIP120void setup()
{
pinMode(TRIG_PIN, OUTPUT); // trigger pin of US range finder
pinMode(ECHO_PIN, INPUT); // Echo pin of US range finder
pinMode(LED_OUT, OUTPUT); // base of TIP120 to drive LED
analogWrite(LED_OUT, 0);
}void loop()
{
int distance = GetDistanceInCm(TRIG_PIN, ECHO_PIN);
if (distance > 254 ) {
distance = 254;
}
analogWrite(LED_OUT, distance);
delay(500);
}posjirka
ÚčastníkSamozřejmě že jde použít 1 pin jak pro tlačítko tak pro LED.
śkoda, že sem nejde vkládat obrázky přímo … .R1 TL1 R2 LED
+5V -[330R]–/ —*—[330R]—|>|— GND
|
D1 —————|V podstatě žekáš na log.1 na pinu a když příjde tak jí zapíšeš a začneš se zajímat o jiný pin /LED/ .
Odpor R1 chrání vstup před přímým připojením na +5V.Programově to můžeš udělat jako nahodile přiřazení pinu do pole a po stisku správného tlačítka bys šel o pozici doprava dokud nenarazíš na konec.
Zbyšek Voda
ÚčastníkKdyž se na to teď dívám s odstupem, vidím v tom zásadní problém… v momentu, kdy je zmáčknuté tlačítko a na výstupu je nastaveno HIGH je připojeno + přímo na GND a to se Arduinu líbit nebude.
Toto tedy nebude správná cesta.
Omlouvám se, že jsem si toho nevšiml dřív.Asi bych šel cestou nějakého toho multiplexingu.
Mirda
ÚčastníkNo – chcete toho celkem dost. Asi budete muset vydržet, než dorazej posily ze Sahary a z Persie. Pak to zde určitě bude samej robotik,elektronik a programátor s velkýma zkušenostma s programovánim AI…
piticko
ÚčastníkZbyšku díky,
kouknu na ten PULLUP. Pro mne je to novinka 🙂Nemám potřebu při tomto projektu šetřit pinama, ale pokud to půjde tak, jak jsi nakreslil, bude to fajn.
jdu si hrát…
Zbyšek Voda
ÚčastníkDobrý den,
když nad tím tak přemýšlím, možná by šlo použít něco jako toto:
Je potřeba to ale vyzkoušet. Nemám u sebe teď Arduino.Potom by ovládání probíhalo tak, že byste přepínal mezi
pinMode(pin, OUTPUT);
a
pinMode(pin, INPUT_PULLUP);
společně s rozsvěcením LED, čtení stavu…
Použití 2×5 pinů by bylo rozhodně nejjednodušší.
Pokud ale chcete ušetřit piny, najdou se i další způsoby, které piny ušetří ještě o trochu více.
Použitím nějakého multiplexingu se dá ovládat mnohonásobně více LED, než je pinů (počet roste i exponenciálně). Například při použití Charlieplexingu je možné pomocí tří pinů ovládat až šest LED (obecně je počet LED dán vztahem n^2-n, kde n je počet použitých pinů). Více o Charlieplexingu zde.
Druhou kategorií je ovládání tlačítek. Těch je možné na jeden pin připojit teoreticky až 1023 (respektive rozsah analogového převodníku – 1). V praxi je počet menší, ale vašich potřebných pět tlačítek je OK. Všechny tlačítka jsou připojena paralelně k jednomu pinu v sérii s resistory různých hodnot. Stisknutím dvou tlačítek tak vznikne paralelní kombinace více resistorů. Pokud vyberete správné hodnoty odporů, budete schopný vyčíst všechny možné kombinace stisků tlačítek. Více tlačítek připojených k jednomu Arduino pinu je popsán zde.
S využitím těchto dvou způsobů tedy použijete pouze čtyři piny! 🙂
-
AutorPříspěvky