Wstęp:
Do skonstruowania tego schematu potrzebujemy dowolnego servo oraz jakiegokolwiek potencjometru.
Nie musimy także pobierać żadnej nowej biblioteki do obsługi projektu, ponieważ wszystkie komendy są już wgrane w Arduino IDE co dodatkowo upraszcza sprawę.
Zasada działania:
1. Arduino odbiera analogową wartość podłączonego do pinu (A0) potencjometru (0 - 1023)
2. Wartość z potencjometru jest przeliczana na kąt obrotu servomechanizmu (0-180 stopni)
3. Obracając gałką potencjometru zmieniamy wskazania na pinie (A0) i tym samym obracamy servem.
Kod programu do servo:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
poniedziałek, 14 kwietnia 2014
niedziela, 13 kwietnia 2014
Arduino ultradźwiękowy miernik odległości HC-SR04
Wstęp:
Kod do tego urządzenia nie należy do mnie. Szukałem na internecie najprostszego szkicu do sprawdzenia tego układu i znalazłem go na następującej stronie http://electronut.in/tag/arduino-2/ mimo wszystko pozwoliłem sobie zamieścić ten kod na tej stronie żeby w razie potrzeby móc szybko go znaleźć.
Zasada działania:
1. Czujnik HC-SR04 mierzy falami odległość do przeszkody.
2. Zmierzoną odległość (w cm) czujnik pokazuje nam na ekranie serial monitora.
Kod programu dla ultradźwiękowego miernika odległości HC-SR04
#include "Arduino.h"
int pinTrigger = 2;
int pinEcho = 4;
void setup()
{
// initialize serial comms
Serial.begin(9600);
// set pins
pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);
}
void loop()
{
// send a 10us+ pulse
digitalWrite(pinTrigger, LOW);
delayMicroseconds(20);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
delayMicroseconds(20);
// read duration of echo
int duration = pulseIn(pinEcho, HIGH);
if(duration > 0) {
// dist = duration * speed of sound * 1/2
// dist in cm = duration in us * 1 x 10^{-6} * 340.26 * 100 * 1/2
// = 0.017*duration
float dist = 0.017 * duration;
Serial.println(dist);
}
// wait
delay(200);
}
Kod do tego urządzenia nie należy do mnie. Szukałem na internecie najprostszego szkicu do sprawdzenia tego układu i znalazłem go na następującej stronie http://electronut.in/tag/arduino-2/ mimo wszystko pozwoliłem sobie zamieścić ten kod na tej stronie żeby w razie potrzeby móc szybko go znaleźć.
Zasada działania:
1. Czujnik HC-SR04 mierzy falami odległość do przeszkody.
2. Zmierzoną odległość (w cm) czujnik pokazuje nam na ekranie serial monitora.
Kod programu dla ultradźwiękowego miernika odległości HC-SR04
#include "Arduino.h"
int pinTrigger = 2;
int pinEcho = 4;
void setup()
{
// initialize serial comms
Serial.begin(9600);
// set pins
pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);
}
void loop()
{
// send a 10us+ pulse
digitalWrite(pinTrigger, LOW);
delayMicroseconds(20);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
delayMicroseconds(20);
// read duration of echo
int duration = pulseIn(pinEcho, HIGH);
if(duration > 0) {
// dist = duration * speed of sound * 1/2
// dist in cm = duration in us * 1 x 10^{-6} * 340.26 * 100 * 1/2
// = 0.017*duration
float dist = 0.017 * duration;
Serial.println(dist);
}
// wait
delay(200);
}
poniedziałek, 7 kwietnia 2014
Arduino miernik wilgotności podłoża
Wstęp:
Jako dodatkową informację chciałem powiedzieć o małym potencjometrze zamontowanym na płytce włączonej do układu.
Mianowicie potencjometr ten steruje dwoma diodami znajdującymi się na płytce, jego zadaniem jest zaświecenie diody w zależności od poziomu zawilgocenia płytki.
Np. można ustawić żeby dioda zaświeciła się w momencie jeśli na płytce znajdzie się choć jedna kropla wody, lub ustawić aby dioda zaświeciła się dopiero w momencie całkowitego zawilgocenia płytki.
Zasada działania:
1. Przez włożenie widełek do wody/gruntu następuje połączenie obu nóżek przez co nasze arduino odbiera na pinie analogowym (A0) wartości pomiędzy ok 300 a 1023 informując nas o tym jak wilgotno jest w miejscu w którym znajdują się widełki.
2. Jeśli widełki są całkowicie zanurzone np. w wodzie otrzymamy wartość 300 natomiast jeśli wyjmiemy widełki z wody wartość rośnie do 1023. Nie testowałem jeszcze widełek w gruncie ale podejrzewam że będą działać równie sprawnie.
Kod programu dla miernika wilgotności podłoża:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(2000);
}
Jako dodatkową informację chciałem powiedzieć o małym potencjometrze zamontowanym na płytce włączonej do układu.
Mianowicie potencjometr ten steruje dwoma diodami znajdującymi się na płytce, jego zadaniem jest zaświecenie diody w zależności od poziomu zawilgocenia płytki.
Np. można ustawić żeby dioda zaświeciła się w momencie jeśli na płytce znajdzie się choć jedna kropla wody, lub ustawić aby dioda zaświeciła się dopiero w momencie całkowitego zawilgocenia płytki.
Zasada działania:
1. Przez włożenie widełek do wody/gruntu następuje połączenie obu nóżek przez co nasze arduino odbiera na pinie analogowym (A0) wartości pomiędzy ok 300 a 1023 informując nas o tym jak wilgotno jest w miejscu w którym znajdują się widełki.
2. Jeśli widełki są całkowicie zanurzone np. w wodzie otrzymamy wartość 300 natomiast jeśli wyjmiemy widełki z wody wartość rośnie do 1023. Nie testowałem jeszcze widełek w gruncie ale podejrzewam że będą działać równie sprawnie.
Kod programu dla miernika wilgotności podłoża:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(2000);
}
Arduino czujnik deszczu
Wstęp:
Jako dodatkową informację chciałem powiedzieć o małym potencjometrze zamontowanym na płytce włączonej do układu.
Mianowicie potencjometr ten steruje dwoma diodami znajdującymi się na płytce, jego zadaniem jest zaświecenie diody w zależności od poziomu zawilgocenia płytki.
Np. można ustawić żeby dioda zaświeciła się w momencie jeśli na płytce znajdzie się choć jedna kropla wody, lub ustawić aby dioda zaświeciła się dopiero w momencie całkowitego zawilgocenia płytki.
Zasada działania:
1. Padająca na czujnik wilgotności woda powoduje połączenie na czujniku przez co nasze arduino odbiera na pinie analogowym (A0) wartości pomiędzy ok 300 a 1023 informując nas ile wody znajduje się na płytce.
2. Jeśli płytka jest całkowicie mokra otrzymujemy wartość 300 a jeśli całkowicie sucha to 1023, nie trzeba chyba tłumaczyć że w zależności od ilości wody można uzyskać wartości pośrednie np. częściowo zawilgacając płytkę można otrzymać np. 524 , 663 , 720 dzięki czemu mamy do dyspozycji bardzo profesjonalny czujnik deszczu.
Kod programu dla czujnika wilgoci:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(2000);
}
Jako dodatkową informację chciałem powiedzieć o małym potencjometrze zamontowanym na płytce włączonej do układu.
Mianowicie potencjometr ten steruje dwoma diodami znajdującymi się na płytce, jego zadaniem jest zaświecenie diody w zależności od poziomu zawilgocenia płytki.
Np. można ustawić żeby dioda zaświeciła się w momencie jeśli na płytce znajdzie się choć jedna kropla wody, lub ustawić aby dioda zaświeciła się dopiero w momencie całkowitego zawilgocenia płytki.
Zasada działania:
1. Padająca na czujnik wilgotności woda powoduje połączenie na czujniku przez co nasze arduino odbiera na pinie analogowym (A0) wartości pomiędzy ok 300 a 1023 informując nas ile wody znajduje się na płytce.
2. Jeśli płytka jest całkowicie mokra otrzymujemy wartość 300 a jeśli całkowicie sucha to 1023, nie trzeba chyba tłumaczyć że w zależności od ilości wody można uzyskać wartości pośrednie np. częściowo zawilgacając płytkę można otrzymać np. 524 , 663 , 720 dzięki czemu mamy do dyspozycji bardzo profesjonalny czujnik deszczu.
Kod programu dla czujnika wilgoci:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(2000);
}
sobota, 29 marca 2014
Arduino sensor wilgoci i temperatury DHT11
Wstęp:
W celu prawidłowego działania sensora i kodu musimy pobrać i zainstalować bibliotekę obsługującą sensor DHT11 (biblioteka DHT11).
Poniżej przedstawiony kod jest identyczny z przykładem znajdującym się w tej bibliotece poza jedną zmianą, zmieniłem int pin = 4; na int pin = A1 aby pinem odczytującym wartości układu był analogowy pin A1.
Zasada działania:
1. Miernik wilgoci i temperatury DHT11 wysyła sygnał pomiary tych dwóch wielkości.
2. Monitor seryjny pokazuje wartości pomiaru wilgoci i temperatury.
Kod programu dla sensora DHT11:
#include <DHT11.h>
int pin=A1;
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
}
void loop()
{
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0)
{
Serial.print("temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
}
else
{
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(DHT11_RETRY_DELAY); //delay for reread
}
W celu prawidłowego działania sensora i kodu musimy pobrać i zainstalować bibliotekę obsługującą sensor DHT11 (biblioteka DHT11).
Poniżej przedstawiony kod jest identyczny z przykładem znajdującym się w tej bibliotece poza jedną zmianą, zmieniłem int pin = 4; na int pin = A1 aby pinem odczytującym wartości układu był analogowy pin A1.
Zasada działania:
1. Miernik wilgoci i temperatury DHT11 wysyła sygnał pomiary tych dwóch wielkości.
2. Monitor seryjny pokazuje wartości pomiaru wilgoci i temperatury.
Kod programu dla sensora DHT11:
#include <DHT11.h>
int pin=A1;
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
}
void loop()
{
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0)
{
Serial.print("temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
}
else
{
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(DHT11_RETRY_DELAY); //delay for reread
}
wtorek, 4 marca 2014
Arduino nadajnik-odbiornik 433MHz RF
Wstęp:
Tytułem wstępu. Schemat łączenia zaczerpnąłem od Pana Elektro Maras z Youtuba a stronę stworzyłem aby nie zapomnieć jak to podłączyć i mieć to zawsze pod ręką. Polecam zajrzeć też na Youtuba.
http://www.youtube.com/watch?v=3rRlp79qHIs
Na uwagę zasługuje także projekt ze skrzynką pocztową wykorzystujący połaczenie RF
http://majsterkowo.pl/prosty-system-powiadamiania-o-nowych-listach-znajdujacych-sie-w-skrzynce-pocztowej/
Zasada działania:
1. Nadajnik wysyła sygnał z arduino sygnalizując wysyłanie miganiem diody L (sprzężonej z pinem 13).
2. Odbiornik z drugiego arduino odbiera sygnał potwierdzając odbiór miganiem diody L, oraz wyświetla pobierany sygnał na monitorze połączenia.
3. W celu prawidłowego działania systemu należy pobrać ze strony arduino bibliotekę VirtualWire.
Kod programu dla nadajnika:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_ptt_inverted(true);
vw_setup(2000);
}
void loop()
{
const char *msg = "hello";
digitalWrite(13, true);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
digitalWrite(13, false);
delay(200);
}
Kod programu dla odbiornika:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
digitalWrite(13, true);
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(13, false);
}
}
Tytułem wstępu. Schemat łączenia zaczerpnąłem od Pana Elektro Maras z Youtuba a stronę stworzyłem aby nie zapomnieć jak to podłączyć i mieć to zawsze pod ręką. Polecam zajrzeć też na Youtuba.
http://www.youtube.com/watch?v=3rRlp79qHIs
Na uwagę zasługuje także projekt ze skrzynką pocztową wykorzystujący połaczenie RF
http://majsterkowo.pl/prosty-system-powiadamiania-o-nowych-listach-znajdujacych-sie-w-skrzynce-pocztowej/
Zasada działania:
1. Nadajnik wysyła sygnał z arduino sygnalizując wysyłanie miganiem diody L (sprzężonej z pinem 13).
2. Odbiornik z drugiego arduino odbiera sygnał potwierdzając odbiór miganiem diody L, oraz wyświetla pobierany sygnał na monitorze połączenia.
3. W celu prawidłowego działania systemu należy pobrać ze strony arduino bibliotekę VirtualWire.
Kod programu dla nadajnika:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_ptt_inverted(true);
vw_setup(2000);
}
void loop()
{
const char *msg = "hello";
digitalWrite(13, true);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
digitalWrite(13, false);
delay(200);
}
Kod programu dla odbiornika:
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
digitalWrite(13, true);
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(13, false);
}
}
środa, 12 lutego 2014
Arduino przycisk wielofunkcyjny
Zasada działania:
1. Ilość kliknięć wybiera nam numer programu który ma się uruchomić i mamy tu 3 programy:
a) 1 kliknięcie - zaświeca się dioda czerwona a na ekranie widnieje napis "Wybrana funkcja nr 1"
b) 2 kliknięcia - zaświeca się dioda żółta a na ekranie widnieje napis "Wybrana funkcja nr 2"
c) 3 kliknięcia - zaświeca się dioda zielona a na ekranie widnieje napis "Wybrana funkcja nr 3"
2. W układzie zamontowano 4 diodę (zieloną a opcjonalnie może to być brzęczek) która informuje nam mrugnięciem o wciśnięciu przycisku co daje nam możliwość policzenia ile razy nacisnęliśmy przycisk.
3. Po wciśnięciu przycisku (np 2 razy), program odczekuje 3 sekundy a następnie włącza program 2 opisany powyżej.
Wady:
1. nie dopisałem jeszcze funkcji odpowiedzialnej za przekroczenie ilości wciśnięć przycisku dlatego kiedy przekroczy się liczbę 3 klinknięć to arduino się zapętla i konieczny jest reset.
Kod programu:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int licznik;
int klikacz = 1;
int red = 10;
int yellow = 9;
int green = 8;
int info = 7;
int funkcja;
long czas;
void setup()
{
Serial.begin(9600);
pinMode(klikacz, INPUT_PULLUP);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(info, OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Wybrana funkcja");
}
void loop()
{
if(digitalRead(klikacz) == LOW)
{
delay(20);
licznik = licznik++;
Serial.println(licznik);
digitalWrite(info, HIGH);
while(digitalRead(klikacz) == LOW);
delay(20);
digitalWrite(info, LOW);
czas = millis()/1000;
}
if(millis()/1000-czas > 3 && funkcja < 4)
{
funkcja = licznik;
licznik = 0;
}
switch(funkcja)
{
case 1:
{
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 1");
break;
}
case 2:
{
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 2");
break;
}
case 3:
{
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
lcd.setCursor(0,1);
lcd.print("Nr 3");
break;
}
}
}
1. Ilość kliknięć wybiera nam numer programu który ma się uruchomić i mamy tu 3 programy:
a) 1 kliknięcie - zaświeca się dioda czerwona a na ekranie widnieje napis "Wybrana funkcja nr 1"
b) 2 kliknięcia - zaświeca się dioda żółta a na ekranie widnieje napis "Wybrana funkcja nr 2"
c) 3 kliknięcia - zaświeca się dioda zielona a na ekranie widnieje napis "Wybrana funkcja nr 3"
2. W układzie zamontowano 4 diodę (zieloną a opcjonalnie może to być brzęczek) która informuje nam mrugnięciem o wciśnięciu przycisku co daje nam możliwość policzenia ile razy nacisnęliśmy przycisk.
3. Po wciśnięciu przycisku (np 2 razy), program odczekuje 3 sekundy a następnie włącza program 2 opisany powyżej.
Wady:
1. nie dopisałem jeszcze funkcji odpowiedzialnej za przekroczenie ilości wciśnięć przycisku dlatego kiedy przekroczy się liczbę 3 klinknięć to arduino się zapętla i konieczny jest reset.
Kod programu:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int licznik;
int klikacz = 1;
int red = 10;
int yellow = 9;
int green = 8;
int info = 7;
int funkcja;
long czas;
void setup()
{
Serial.begin(9600);
pinMode(klikacz, INPUT_PULLUP);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(info, OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Wybrana funkcja");
}
void loop()
{
if(digitalRead(klikacz) == LOW)
{
delay(20);
licznik = licznik++;
Serial.println(licznik);
digitalWrite(info, HIGH);
while(digitalRead(klikacz) == LOW);
delay(20);
digitalWrite(info, LOW);
czas = millis()/1000;
}
if(millis()/1000-czas > 3 && funkcja < 4)
{
funkcja = licznik;
licznik = 0;
}
switch(funkcja)
{
case 1:
{
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 1");
break;
}
case 2:
{
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 2");
break;
}
case 3:
{
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
lcd.setCursor(0,1);
lcd.print("Nr 3");
break;
}
}
}
Subskrybuj:
Posty (Atom)