Autor Wątek: Kontrolery Arduino  (Przeczytany 53497 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Odp: Kontrolery Arduino
« Odpowiedź #210 dnia: Sierpnia 24, 2016, 22:19:01 »
Wspominałem o tym w którymś poście. Włączenie obsługi UART i nadanie całego pakietu znaków zajmuje sporo czasu, a nic w procesorze nie dzieje się jednocześnie. Wystarczy zakomentować linię UART_DEBUG i przebiegi powiny być płynne.

Program MegaJoystick jest przykładem użycia funkcji z biblioteki. rX i rY nie są jeszcze zaimplementowane.

Jeśli ch-ka ma być liniowa, po ustawieniu Zrot dodajemy:
Joystick.setXAxisRotation(adcFilteredData[4]<<6);
Joystick.setYAxisRotation(adcFilteredData[5]<<6);

A jeśli mają być nieliniowe:
temp16 = applyResponse16(adcFilteredData[4]<<6);
Joystick.setXAxisRotation(temp16);
temp16 = applyResponse16(adcFilteredData[5]<<6);
Joystick.setYAxisRotation(temp16);

Dziś dostałem płytki przedwzmacnaiczy do halotronów. Po pierwszych testach wszystko działa ok, chociaż wprowadziłbym parę zmian.


Odp: Kontrolery Arduino
« Odpowiedź #211 dnia: Sierpnia 25, 2016, 08:49:33 »
Dzięki za wyjaśnienie. Po zablokowaniu  sendUARTreport() przebiegi są płynne. Faktycznie gdy wprowadziłeś #include <AnalogScanner.h>  to zablokowałeś raportowanie przez PuTTy. Moje eksperymenty trochę powodują zamieszanie i zapominam co zmieniałem w MegaJoystick.

Odp: Kontrolery Arduino
« Odpowiedź #212 dnia: Sierpnia 31, 2016, 12:50:27 »
Dotarły płytki do enkoderów. Przetestowałem jedną szt. Działa w porządku.



I jeszcze film jak to wygląda w praktyce:
https://www.youtube.com/watch?v=Wu3WuwwYTMM

Odp: Kontrolery Arduino
« Odpowiedź #213 dnia: Sierpnia 31, 2016, 15:29:00 »
Wygląda to bardzo dobrze. Jak będzie widziany enkoder w MegaJoystick, czy będzie jakaś deklaracja czy jako zwykłe przyciski. 

Odp: Kontrolery Arduino
« Odpowiedź #214 dnia: Września 01, 2016, 12:06:24 »
Standard HID dla joysticków nie przewiduje jakichś specjalnych obiektów typu enkoder, a więc musimy użyć normalnych wejść przycisków.

Dojechała też paczka z tanimi enkoderami z Chin. Obracanie działa w porządku, ale ten wbudowany przycisk to totalna porażka. Działa raz na jakiś czas, chyba, że wciśnie się go bardzo mocno. Pewnie styki zaśniedziały.
Acha, moduł nie będzie działał w matrycach, gdyż wyjścia są logiczne 0-VCC. Można go przerobić, żeby działał i w matrycach przycisków, ale jedynie kosztem powiększenia PCB i dodatkowych elementów. W tej chwili nadaje się do użycia w układach z ekspanderami I2C i rejestrami szeregowymi.

Zamówiłem trochę więcej płytek, kilka szt. mogę polutować i zaprogramować, gdyby ktoś był chętny - dajcie znać na priv.

Projekt udostępnię jak tylko uda mi się napisać jakąś sensowną dokumentację.

Odp: Kontrolery Arduino
« Odpowiedź #215 dnia: Września 01, 2016, 13:01:45 »
Cytuj
Można go przerobić, żeby działał i w matrycach przycisków, ale jedynie kosztem powiększenia PCB i dodatkowych elementów. W tej chwili nadaje się do użycia w układach z ekspanderami I2C i rejestrami szeregowymi.
Nie ma sensu przerabiania, powinien działać z I2C oraz rejestrami.

Odp: Kontrolery Arduino
« Odpowiedź #216 dnia: Września 05, 2016, 16:22:54 »
Zastanawiam się, czy nie warto byłoby użyć takich magnesów :)
http://www.magnesy.eu/mp-10-x-6-x-4--n38---magnes-neodymowy-t-2301.html
Jeśli dobrze zrozumiałem opis, to kierunek magnesowania jest niewłaściwy, powinien być taki:
http://www.magnesy.eu/mp-10a-x-5-x-5--n35h---magnes-neodymowy-t-2715.html

Sprawdziłem podobne, tylko o sile ok. 700g. SS495 głupieje kompletnie, sensor chyba się przesterowywuje.
Natomiast do KMZ60 będą w porządku, zgodnie z aplikacją zresztą:

Odp: Kontrolery Arduino
« Odpowiedź #217 dnia: Września 14, 2016, 00:52:43 »
Panowie, mam takie pytanko, steruję przekaźnikiem poprzez Arduino. Przekaźnik jest sterowany stanem niski, nie posiada zworki, tak by go przestawić na sterowanie stanem wysoki. Czy mogę to zrobić w Arduino  jakoś softowo. Taki mam to zapisane, ale nie wiem co można dopisać by zmienić działanie.


/* use '#define DCSBIOS_DEFAULT_SERIAL' instead if your Arduino board
 *  does not feature an ATMega328 or ATMega2650 controller.
 */
#define DCSBIOS_IRQ_SERIAL
#include "DcsBios.h"

DcsBios::LED handleGearWarning(0x1026, 0x4000, 2);

DcsBios::LED gearLSafe(0x1026, 0x1000, 3);

DcsBios::LED gearNSafe(0x1026, 0x0800, 4);

DcsBios::LED gearRSafe(0x1026, 0x2000, 5);

DcsBios::LED lEngFire(0x10da, 0x0008, 6);

DcsBios::LED apuFire(0x10da, 0x0010, 7);

DcsBios::LED rEngFire(0x10da, 0x0020, 8 );

void setup() {
  DcsBios::setup();
}

void loop() {
  DcsBios::loop();
}
Latamy dzisiaj?

Oficer polityczny Padi-Van. (Prostak-1)

Odp: Kontrolery Arduino
« Odpowiedź #218 dnia: Września 14, 2016, 05:47:00 »
Nie prościej zastosować tranzystor?

Odp: Kontrolery Arduino
« Odpowiedź #219 dnia: Września 14, 2016, 08:52:29 »

Rb = 10k
Ra = 220R - 1k (jasność diody)
Tranzystor = BC547C lub jakiś inny NPN
Sygnał z kontrolera wchodzi na bazę tranzystora przez Rb.
VCC może być wyższe niż 5V.

Jeśli chcesz wysterować więcej LEDów z jednego wyjścia, to po prostu połącz pary LED+Ra równolegle. Ważne, żeby każdy LED miał swój rezystor Ra.
Dioda zaświeci się jeśli na wejściu pojawi się stan wysoki.
Podłączanie przekaźnika bezpośrednio do portów AVRa, jeśli tak masz to teraz podłączone, jest raczej ryzykowne i nie zalecane. Zazwyczaj robi się to z użyciem tranzystora, jak powyżej.

Programowa zmiana działania ze stanu aktywnego wysokiego na niski wymaga modyfikacji biblioteki DcsBios. Dokładniej plik LEDs.h, linie 20 i 22. Trzeba zamienić 0 na 1 i odwrotnie.
https://github.com/dcs-bios/dcs-bios-arduino-library/blob/master/Leds.h
Oczywiście spowoduje to, że wszystkie wyjścia LEDów będą działać odwrotnie.

Ja bym po prostu wziął pierwszy lepszy tranzystor NPN z szuflady i podłaczył jak na powyższym schemacie.

Odp: Kontrolery Arduino
« Odpowiedź #220 dnia: Września 14, 2016, 10:08:09 »
Dzięki wielkie, wszystko jasne. Przekaźniki mam gotowe na płytkach, takie jak te -  http://x3.cdn03.imgwykop.pl/c3201142/comment_so73n11cVYsOijG1zYuMSgCu9Kurrevz.jpg .
Ich zastosownie wymuszają  u mnie diody w 3 kontrolkach, to paski taśmy diodowej 12V  https://www.youtube.com/watch?v=RHsZz9zbtkA  .  Reszt kontrolek będzie miała
tradycyjne diody. Zakupię przekaźniczki z możlwością zmiany stanu sterowania.
Latamy dzisiaj?

Oficer polityczny Padi-Van. (Prostak-1)

Odp: Kontrolery Arduino
« Odpowiedź #221 dnia: Września 14, 2016, 11:23:52 »
Czyli są to gotowe moduły z przekaźnikami, a nie jeden "goły". Nawet z optyczną izolacją wejść. Bardzo dobrze!
Poczekaj z tym kupowaniem nowych przekaźników :).
Niestety nie mam DCSa, żeby sprawdzić działanie w praktyce, ale spróbuj wykonać poniższe operacje (dodałem obsługę stanów aktywnych dla LEDów w bibliotece):
1. Poszukaj katalogu, gdzie zainstalowała się biblioteka. Jeśli robiłeś to automatycznie z poziomu IDE Arduino to będzie chyba gdzieś w dokumentach/danych aplikacji.
2. Będzie tam plik Leds.h. Robimy na wszelki wypadek kopię zapasową i podmieniamy zawartość oryginału na poniższą:
#ifndef __DCSBIOS_LEDS_H
#define __DCSBIOS_LEDS_H

#include "Arduino.h"
#include "ExportStreamListener.h"

#define ACTIVE_LOW 0
#define ACTIVE_HIGH 1

namespace DcsBios {

class LED : public Int16Buffer {
private:
unsigned char pin;
unsigned char active;
unsigned int mask;
public:
LED(unsigned int address, unsigned int mask, char pin, char active) : Int16Buffer(address), mask(mask), pin(pin), active(ACTIVE_HIGH) {
pinMode(pin, OUTPUT);
}
virtual void loop() {
if (hasUpdatedData()) {
if (getData() & mask) {
digitalWrite(pin, active ? 1:0);
} else {
digitalWrite(pin, active ? 0:1);
}
}
}
};

}

#endif

3. Nowa wersja dodaje opcję ustawienia stanu aktywny niski lub wysoki dla poszczególnych LEDów. Dlatego w programie, przy definicji LED trzeba będzie dodać po jednym argumencie funkcji, np.:
/* use '#define DCSBIOS_DEFAULT_SERIAL' instead if your Arduino board
 *  does not feature an ATMega328 or ATMega2650 controller.
 */
#define DCSBIOS_IRQ_SERIAL
#include "DcsBios.h"

DcsBios::LED handleGearWarning(0x1026, 0x4000, 2, ACTIVE_LOW);

DcsBios::LED gearLSafe(0x1026, 0x1000, 3, ACTIVE_HIGH);

DcsBios::LED gearNSafe(0x1026, 0x0800, 4, ACTIVE_LOW);

DcsBios::LED gearRSafe(0x1026, 0x2000, 5, ACTIVE_LOW);

DcsBios::LED lEngFire(0x10da, 0x0008, 6, ACTIVE_HIGH);

DcsBios::LED apuFire(0x10da, 0x0010, 7, ACTIVE_HIGH);

DcsBios::LED rEngFire(0x10da, 0x0020, 8, ACTIVE_LOW );

void setup() {
  DcsBios::setup();
}

void loop() {
  DcsBios::loop();
}

4. Pozmieniaj sobie LOW na HIGH (ostatni parametr) wg uznania, wgraj nowy soft do procka i daj znać czy działa.

Program skompilował się poprawnie, powinno być ok.

Odp: Kontrolery Arduino
« Odpowiedź #222 dnia: Września 14, 2016, 12:56:22 »
Kurna no niestety już zamówiłem tego typu przekaźniki http://1.bp.blogspot.com/-w3lyS18L7EI/VgedGgxaSRI/AAAAAAAAP6Y/6APtm_jTS6o/s1600/IMG_2889.jpg  . No ale sprawdzę to co napisałeś. Na szczęście nie są drogie te przekaźniczki.
Latamy dzisiaj?

Oficer polityczny Padi-Van. (Prostak-1)

Odp: Kontrolery Arduino
« Odpowiedź #223 dnia: Września 14, 2016, 15:59:09 »
Jestem pod wrażeniem wiedzy 3.14ter. Może uda się znaleźć sposób na wyświetlanie alarmów w układzie Arduino - symulator BMS4. Do tego tematu muszę się przygotować i dopiero wtedy zapytać.
Teraz chciałbym wrócić do tematu enkodery z uwzględnieniem także MegaJoystick. Zrezygnowałem z testów enkodera zaprojektowanego przez 3.14ter (pcb, uP oraz reszta) z prostej przyczyny, ten projekt już jest sprawdzony. Teraz można go po prostu zamówić dla konkretnego panelu z enkoderami w kokpicie. Na podstawie moich doświadczeń z enkoderami oraz różnymi kontrolerami mogę stwierdzić, że jeśli projektujemy sterowanie na bazie MMJoy2 lub MegaJoystick to musimy zastosować projekt 3.14ter. Ma on jedną ważną zaletę nie przekłamuje. Jest to ważne np. przy precyzyjnym strojeniu częstotliwości.
W DMKeys8 można zastosować zwykły enkoder, który bardzo rzadko przekłamuje i można trochę pozmieniać parametry filtrowania. W SimIN można także zastosować enkoder, ale to wymaga układu wejściowego SimOUT oraz konwertera USB-RS232. Nie pamiętam jak było z przekłamaniami. To tyle na temat enkoderów oraz moich doświadczeń w tym temacie.

Odp: Kontrolery Arduino
« Odpowiedź #224 dnia: Września 16, 2016, 14:41:03 »
Zgodnie z zapowiedzią chciałbym przedstawić mój pomysł projektu realizującego wyświetlanie alarmów w BMS 4.33 za pomocą Arduino Leonardo. Mamy już zrealizowane różne kontrolery odczytujące układy wejściowe typu przycisk, przełącznik, enkoder. Posiadam dwa typy kontrolerów pozwalające odczytać alarmy w BMS. Jeden to układ z OpenCockpis sterowany z SIOC oraz FAST. Drugi oparty na platformie HSC codeking oraz kontrolerze SimOUT.
To drugie rozwiązanie wymaga konwertera USB - RS232 oraz układu MAX 232 do zamiany sygnałów liniowych na TTL. Zamiana uP ATTINY 2313 na Leonardo uprościłaby ten układ.
Na załączonym szkicu przedstawiłem projekt oparty na Leonardo i podobny do SimOUT (fragmentu realizującego LED). Sterownik realizuje sterowanie 48 LED wyświetlanych dynamicznie a nie statycznie. Potrzeba tylko jednego układu ULN 2803 oraz 6 złączy 10 pin i 6 rezystorów. LED pracują w układzie z wspólną anodą.



W bibliotece FlightData.h są między innymi 3 rejestry 32 bitowe o nazwie LightBits, LightBits2 oraz LightBits3. Na 32 pozycjach tych rejestrów są wskaźniki odpowiednich alarmów w BMS. Najmłodszy adres to 0x1 co odpowiada wskaźnikowi (1) na zerowej pozycji rejestru, najstarszy to 0x80000000 co odpowiada wskaźnikowi alarmu (1) na pozycji 31 rejestru.
Codeking w HSC zaprojektował tzw. moduły wejścia w tym moduł FalconData, który jest zbiorem zmiennych w BMS w tym również wspomnianych 3 rejestrów. Są też moduły wyjścia w tym SimOut.
W skrypcie do HSC dla BMS jest tylko kilka deklaracji oraz funkcji np.
variable $lightBits { module = "FalconData"; id = "lightBits"; type = int; direct = in; }
variable_changed $lightBits
$led_001_008 =  GetBitState( $lightBits , 1 )
Jak widać jest to bardzo prosto zrobione. Jest skojarzenie wyjścia SimOut z wybranym alarmem i jeśli jest zmiana stanu alarmu to zostanie to przekazane do określonego LED.
W uproszczeniu tak to można przedstawić.
Pytanie do 3.14ter czy można to zrealizować w prosty sposób w Leonardo. Dodam tylko, że codeking w module ma 3 pliki F4SharedMem.dll, FalconData.dll oraz FalconData.
W Internecie znalazłem bibliotekę dla BMS
http://www.foinikas.org/ftp/public/Falcon%20BMS/Docs/Other%20Documentation/Flight%20Data.h
Twórca FlightData.h jest lightning,  adres jego strony  https://svn2.assembla.com/svn/lightningstools/
Realizacja takiego projektu byłaby bardzo przydatna dla budowniczych paneli dla BMS.