niedziela, 17 listopada 2019

RoboAnalyzer®

RoboAnalyzer® to oprogramowanie oparte na modelu 3D, którego można używać do nauczania i uczenia się pojęć robotyki. Jest to rozwijający się produkt opracowany w Mechatronics Lab, Departament Inżynierii Mechanicznej w IIT Delhi, New Delhi, Indie.

Jego rozwój rozpoczął się pod kierunkiem prof. SK Saha w celu wsparcia nauki / nauczania tematów zawartych w jego książce „ Wprowadzenie do robotyki ” wydanej przez Tata McGraw Hill, New Delhi (pierwsze wydanie w 2008 r. I drugie wydanie w 2014 r.) a także wydane w Meksyku (2009 w języku hiszpańskim), Chinach (2010) i Singapurze (2010).

Moduł wirtualnego robota, będący częścią RoboAnalyzer, został opracowany jako aplikacja o ruchu wspólnym i kartezjańskim. Został również wykonany jako serwer COM, za pomocą którego można zintegrować VRM z MATLAB, MS Excel i innymi aplikacjami, które mają interfejs COM. Został również zintegrowany z Robotics Toolbox dla MATLAB przez prof. Petera Corke z QUT, Australia. Więcej informacji tutaj .

Przygotowaliśmy również zestaw Wirtualnych Eksperymentów za pomocą RoboAnalyzer, które można wykorzystać do uzupełnienia kursów z robotyki. Więcej informacji tutaj .

Podobnie jak RoboAnalyzer, inne oprogramowanie opracowane przez nas do nauczania i uczenia się Mechanizmy nosi nazwę MechAnalyzer ® . Więcej szczegółów MechAnalyzer .
Matematyka zajmująca się badaniem robotyki, np. Kinematyka postępowa i odwrotna itp., Jest początkowo trudna do zrozumienia dla uczniów i tak samo jest w przypadku nauczyciela, aby przekazać uczniom istotę matematyki. Wynika to z faktu, że na przykład kinematyka do przodu i do tyłu obejmuje transformacje 3D itp. Należy również zauważyć, że roboty przemysłowe są reprezentowane przy użyciu parametrów Denavita i Hartenberga (DH), które są trudne do zauważenia i wizualizacji w 3D. RoboAnalyzer ma na celu złagodzenie powyższych trudności dla uczniów i nauczycieli. Zasadniczo ucz się / nauczaj fizyki robotyki z radością z animacji RoboAnalyzer, zanim spróbujesz nauczyć się matematyki robotów, jak opisano w książkach Robotyki, na przykład „ Wprowadzenie do robotyki ” SKSaha.
Opracowaliśmy również listę praktycznych zadań / zadań opartych na RoboAnalyzer, które można wykorzystać jako uzupełnienie kursu robotyki. Można go pobrać z tej strony .
Picture


Manipulator 3R


Tutorial 


cechy

  • Seryjny manipulator z przegubami pryzmatycznymi i obrotowymi
  • Parametry DH jako dane wejściowe
  • Model 3D wygenerowany na podstawie parametrów DH
  • Wizualizuj parametry DH
  • Przekaż kinematykę
  • Odwrotna kinematyka
  • Odwrotna dynamika ( na podstawie algorytmu ReDySim )
  • Dynamika przekazywania ( na podstawie algorytmu ReDySim )
  • Animacja ze śladem efektora końcowego
  • Wykresy wykresów
  • Moduł wirtualnego robota (ponad 17 modeli CAD robotów przemysłowych)
1. Bieganie na wspólnym poziomie
2. Bieganie na poziomie kartezjańskim
3. Kartezjański ruch linii prostej
4. Integracja z MATLAB (Robotics Toolbox) i
MS Excel
  • Zapisz i otwórz modele robotów
  • Więcej funkcji ...
Nieustannie pracujemy nad ulepszeniem RoboAnalyzer poprzez dodawanie kolejnych modułów i zwiększanie efektywności jego używania i nauki. Wypróbuj RoboAnalyzer, pobierając tutaj . Samouczki wideo można znaleźć tutaj .

Chcielibyśmy usłyszeć wasze cenne opinie na temat ulepszania RoboAnalyzer.

Jeśli masz jakieś sugestie, skorzystaj z tego formularza online lub wyślij go do nas .
Picture
Robot KUKA KR5

Wykresy

poniedziałek, 4 listopada 2019

Arduino

Arduino  w mechatronice

Podzespoły startowe

1. Panel  przekaźników SSR 4 kanałowy
http://www.jarzebski.pl/arduino/komponenty/przekazniki-elektromagnetyczne.html
2. Klon Arduino LEONARDO R3 Atmel
















Projekt inteligentnych domków został zakończony. Zamiast domów, są małe domki "Makiety"
W sali nr 27 można oglądać makiety podpięte do sterownika włączającego oświetlenie domków. Oświetlenie jest uruchamiane po zbliżeniu się osoby na odległość 50 cm. Opcjonalnie oświetlenie jest włączane z użyciem pilota do projektora :)





Płytka posłuży nam do skonstruowania prostych sterowników zasilaniem światła.
Instrukcje do wykonania układu.
==========================================================

a). Pobieramy program od Arduino https://www.arduino.cc/en/Main/Software
b) Zapoznajemy się z językiem programowania http://www.plociennik.info/index.php/podstawy-jezyka
c). Tworzymy pierwszy projekt.

Każdy kurs programowania rozpoczyna się od programu "Hello World!", czyli najprostszego z możliwych, który możemy napisać, uruchomić i cieszyć się efektem. W systemach wbudowanych, bo do takich można zaliczyć ARDUINO najprostszym programem będzie taki, który umożliwi naprzemienne włączenie i wyłączenie diody. Zanim jednak przejdziemy do połączenia elementów i zaprogramowania układu zapoznamy się z podstawową strukturą programu pisanego w ArduinoIDE.
Cały projekt ARDUINO powstał jako podstawa do szybkiego i prostego tworzenia i testowania różnych projektów informatyczno - elektronicznych. Typowy system wbudowany pracuje od włączenia zasilania do jego wyłączenia. Po włączeniu zasilania ustawiane są parametry startowe, a następnie uklad wykonuje program w pętli nieskończonej. ArduinoIDE upraszcza pisanie programu dla systemu wbudowanego tworząc domyślnie dwie wymagane funkcje:
  • setup(),
  • loop().
Zgodnie z ich nazwami pierwsza umożliwia definicję parametrów początkowych (startowych), w drugiej natomiast znajduje się kod programu wykonywanego cyklicznie.
1
2
3
4
5
6
7
8
9
void setup()
   {
       //ustawienia początkowe programu
   }
void loop()
   {
      //właściwy kod programu wykonywanego w pętli nieskończonej
   }
Powyższy kod to najprostszy program, który można napisać, skompilować i uruchomić za pomocą ArduinoIDE. Układ nie będzie robił nic, ale pozwoli się zaprogramować.

Przejdźmy teraz do zasadniczej części artykułu. Do testu potrzebne będą: ARDUINO, płytka stykowa, dioda LED, rezystor ograniczający prąd oraz przewody połączeniowe. Całość łączymy wg pokazanego schematu. Możliwe jest podłączenie diody i rezystora bez płytki stykowej oraz przewodów połączeniowych, lecz pokazane rozwiązanie jest bardziej uniwersalne i eleganckie. Jak widać wykorzystaliśmy dwa złącza układu. Pierwsze z nich pin13 będzie służył do sterowania diodą, drugie to masa układu. Należy zwrócić uwagę na biegunowość diody LED. Anoda (+) diody ma dłuższą nóżkę i należy ją podłączyć poprzez rezystor do pinu13. Katodę (-) podłączamy do masy układu. Po sprawdzeniu poprawności połączeń możemy przejść do napisania naszego pierwszego programu. Program umożliwi naprzemienne zapalenie i zgaszenie diody LED. Częstotliwość zapalania diody wyniesie ok. 1Hz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int ledPin =  13;      // numer pinu LED
void setup()
   {
      pinMode(ledPin, OUTPUT);
   }
void loop()
   {
      digitalWrite(ledPin, HIGH);     //stan wysoki
      delay(500);                         //czekaj 0,5s (500ms)
      digitalWrite(ledPin, LOW);     //stan niski
      delay(500);                        //czekaj 0,5s (500ms)
   }
Program rozpoczynamy od deklaracji numeru wykorzystywanego pinu. Od tego momentu wszędzie, gdzie będziemy się odwoływać do "ledPin" będzie to odwołanie do pinu13 zestawu ARDUINO. Następnie w funkcji setup() określamy, że nasz pin13 będzie wykorzystywany jako wyjście. Funkcja pinMode(numer_pinu,rodzaj) umożliwia zdefiniowanie, czy nasz pin bedzie wykorzystywany jako wejście, czy jako wyjście. Pierwszy parametr funkcji określa numer pinu, drugi może przyjąć predefiniowaną wartość INPUT lub OUTPUT. Podczas określania wykorzystania poszczególnych pinów można posłużyć się bezpośrednio numerami pinów, lecz rozwiązanie podane w przykładzie jest rozwiązaniem zdecydowanie lepszym z punktu widzenia czytelności naszego programu.
Funkcja loop() zawiera właściwy kod programu wykonywanego w nieskończonej pętli. Polecenie digitalWrite(numer_pinu,stan) umożliwia zmianę stanu poszczególnych pinów układu. Cyfrowe wyjścia mogą przyjąć stan niski lub stan wysoki. Określenie odpowedniego stanu umożliwiają argumenty LOW (logiczne zero, elektrycznie zwarte do masy) i HIGH (logiczna jedynka, elektrycznie zazwyczaj ok. 5V dla układów zasilanych tym napięciem). Numer portu w funkcji digitalWrite() może być podany jako konkretna liczba, ale stosuje się zasadę taką jak przy pinMode().
Ostatnim elementem programu jest funkcja delay(czas) umożliwiająca zatrzymanie wykonywania programu na określony czas. Czas podajemy w milisekundach. Jedna sekunda to 1000ms.
Znając poszczególne funkcje programu możemy omówić jego działanie:
Pin13 ARDUINO zostaje ustawiony jako wyjście. Kolejnym krokiem jest ustawienie stanu wysokiego na pinie13 i zawieszenie wykonywania dalszego kodu na 0,5s. Następnie stan pinu13 ustawiany jest jako niski i wykonywanie programu zostaje zawieszone na 0,5s. Zgodnie z filozofią pisania programów w ArduinoIDE funkcja loop() wykonywana jest cyklicznie, co spowoduje wizualne mruganie diody LED.
Po wpisaniu programu należy go skompilować i przesłać do ARDUINO. Jeżeli wszystkie czynności zostały wykonane poprawnie dioda LED powinna zacząć mrugać z częstotliwością ok. 1Hz. W przypadku braku pozytywnego wyniku należy sprawdzić poprawność połączeń oraz kod programu.
------------------------------------------------------------------------------------------------------------------------

2. ARDUINO -czujnik zbliżeniowy


d) Czujnik zbliżeniowy











--------------------------------------

3. ARDUINO -sterowanie pilotem


--------------------------------------

 Sterowanie pilotem

Jak sterować dowolnym urządzeniem w domu za pomocą pilota od TV i Arduino?
http://majsterkowo.pl/jak-sterowac-dowolnym-urzadzeniem-za-pomoca-pilota-i-arduino/




Wersja bez płytki własnej, konieczność podłączenia rezystora  na VCC
Opis wyjść i wejść modułu IR

3a) Zczytuje kod przycisku pilota
Jak sterować dowolnym urządzeniem w domu za pomocą pilota od TV i Arduino?

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;

void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();
}

void loop() {
   if (irrecv.decode(&results)) {
      Serial.print("0x");
      Serial.println(results.value, HEX);
      delay(250);
      irrecv.resume();
      }
}


3b) Wczytaj kod sterowania jasnością diody. Pamiętaj podepnij diodę do wyjścia z oznaczeniem PWM ~

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;

#define diodaPin 3
int jasnosc = 0;

void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();

    pinMode(diodaPin, OUTPUT);
}

void loop() {
   if (irrecv.decode(&results)) {

       switch (results.value) {
         case 0xE0984BB6:
            if(jasnosc < 255) {jasnosc = jasnosc+5;}
            Serial.println(jasnosc);
            analogWrite(diodaPin, jasnosc);
            break;

         case 0x371A3C86:
            if(jasnosc > 0) {jasnosc = jasnosc-5;}
            Serial.println(jasnosc);
            analogWrite(diodaPin, jasnosc);
            break;
         }
   irrecv.resume();
   }


Do projektu  użyj gotowej płytki IRD
Jak sterować dowolnym urządzeniem w domu za pomocą pilota od TV i Arduino?

https://botland.com.pl/pl/odbiorniki-podczerwieni/12508-modul-odbiornika-podczerwieni-1838-38khz-iduino-st1089-5903351241137.html
Moduł odbiornika podczerwieni 1838 - 38kHz - Iduino ST1089
Jeśli stosujemy oddzielny moduł
Odbiornik podczerwieni CHQ1838 - 38kHz
Stosujemy rezystor Podłączenie

Poniższy rysunek przedstawia schemat podłączenia czujnika zaczerpnięty z dokumentacji. Producent nakazuje ograniczenie prądu za pomocą rezystora 47 Om oraz użycia kondensatora filtrującego pomiędzy nóżkami zasilania o pojemności 47uF.

 https://botland.com.pl/img/art/inne/12528_3.jpg


===================== WYKONANIE STEROWNIKA CZASU RZECZYWISTEGO===

Wykonanie sterownika 4TB Energia odnawialna

Co jest potrzebne

  • Zegarek RTC DS1307 (tylko z akumulatorem nie z baterią! )
Zegarek RTC

  • Panel ośmiu przekaźników SSR. Ostatecznie może być 4 kanałowy (jest tańszy)
ssr-male
Przekaźniki mechaniczne nie nadają się! Przy obciążeniu indukcyjnym resetują arduino. Próbowałem je obstawić kondensatorami, diodami, dławikami i zawsze w końcu trafiał się restart. Przy akwarium za kilka tysiaków raczej niedopuszczalne jest żeby zacięła się pompa dozująca.
  • Microswitche, trzy do manualnej obsługi timerów i jeden do obsługi funkcji karmienia
  • Dioda LED z rezystorem stosownym do koloru i oczekiwanej mocy świecenia.
  • Buzer 5V z generatorem
  • Zasilacz do Arduino
  • Przewody (męsko  żeńskie i żeńsko żeńskie)
  • Biblioteki http://magu.pl/aqma_files/time.ziphttp://magu.pl/aqma_files/DS1307RTC.zip
  • Jakaś obudowa
  • Moduł do płytek stykowych ze złączem ARK4
  • Płytka prototypowa stykowa 400pól arduino bascom
  • Wyświetlacz LCD 1602 2x16 HD44780 blue dla ARDUINO 
  • Chęci!!!
----------------
Gdzie tego szukać?
http://allegro.pl/klon-arduino-mega2560-r3-atmel-atmega2560-avr-usb-i5747071215.html
http://allegro.pl/modul-4-kanalowy-przekaznik-5v-10a-avr-arm-arduino-i5152899977.html
http://allegro.pl/modul-czasu-rtc-ds1307-24c32-arduino-avr-pic-i4876947652.html
http://allegro.pl/plytka-prototypowa-stykowa-400pol-arduino-bascom-i5242806245.html
----
Inna oferta na stronie plus doradztwo.


http://botland.com.pl/wyswietlacze-alfanumeryczne/224-wyswietlacz-lcd-2x16-znakow-niebieski.html
===========================================
3. Sterowanie czasem
A teraz baaaardzo prosty kod z komentami:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int whitePotValue = 0; //analogowa wartość na potencjometrze kanału białego
int bluePotValue = 0; //analogowa wartość na potencjometrze kanału niebiekiego
int bluePWMValue = 0; //cyfrowa wartość PWM podawana na driver niebieskich
int whitePWMValue = 0; //cyfrowa wartość PWM podawana na driver białych

bool dzien = true; //wartość logiczna określająca czy jest dzień czy noc

void setup() {
// te 4 linijki ponizej dotycza podlaczenia RTC do arduino
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
digitalWrite(16, LOW);
digitalWrite(17, HIGH);

Wire.begin();
RTC.begin();
}

// the loop routine runs over and over again forever:
void loop() {
DateTime now = RTC.now();
//tutaj ustawiam godzine/minute/sekunde wschodu
if(now.hour()==10 && now.minute()==0 && now.second()==0 && dzien!=true)
{
dzien = true;
}
//tutaj ustawiam godzine/minute/sekunde zachodu
if(now.hour()==20 && now.minute()==0 && now.second()==0 && dzien==true)
{
dzien = false;
}

//odczytuje wartośc z potencjometrów
int bluePotValue = analogRead(A0);
int whitePotValue = analogRead(A1);

//mapuje wartość analogowe z potencjometrów do wartości PWM
bluePWMValue = map(bluePotValue, 0, 1023, 0, 255);
whitePWMValue = map(whitePotValue, 0, 1023, 0, 255);

//jeśli jest dzień to wysyłam sygnały PWM do driverów
if(dzien)
{
analogWrite(9, bluePWMValue);
analogWrite(10, whitePWMValue);
}
//jeśli jest noc na kanal biały wysylam wartość 0 - nie swieci
// i na kanał niebieski wysylam wartość 10 czyli słabe swiatło symulujące księżycc
else
{
analogWrite(9, 10);
analogWrite(10, 0);
}
delay(100);
======

STEROWANIE