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

Komentarze