INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Witam was wszystkich bardzo serdecznie. Na początek może kilka słów o sobie. Jestem nowym użytkownikiem portalu majsterkowo.pl. Wczoraj dostałem moje pierwsze Arduino Uno, wcześniej miałem do czynienia tylko z elektroniką analogową. Nie miałem także styczności z programowaniem, więc całość kodu, którą zobaczycie w moim artykule została w całości zapożyczona. Natomiast schemat podłączeń jest mojego autorstwa :).
A więc zaczynamy.
Powyżej mamy układ połączeń naszego zegarka. Jest może odrobinę “poplątany” ale przy odrobinie precyzji dokładności spokojnie można go odczytać.
Krótkie wyjaśnienie montażu.
Jakie elementy będą nam potrzebne:
13x led
13x 220 ohm opornik
3x 2,2k ohm opornik
2x microswitch
1x przycisk bistabilny
1x arduino
A więc zaczynamy od montażu diod led, do każdej anody diody led dodajemy rezystor 220 ohm, a każdą katode dajemy do masy. Kolejno jak widać na schemacie połączeń idąc od prawej strony od dołu, łączymy rezystory przy diodach z kolejnymi wyjściami cyfrowymi począwszy od DO1 kończywszy na DO13. Na płytce stykowej najwięcej czasu zajmuje poprawne zamontowanie diod led i podłączenie ich do arduino.
Następnie nadszedł czas na 2 przyciski do sterowania ustawianiem godzin i minut jak i włącznika zegara.
Każdy microswitch podpinamy przez rezystor 2,2k ohm do +5V i do masy, a pomiędzy rezystor a microswitch wpinamy kabelek i łączymy go kolejno do A0 i A5.
Przy przełączniku bistabilnym robimy to samo tylko kabelek wpinamy do DO0.
Następnie podłączamy arduino do komputera i ładujemy do niego program, którego niestety nie wytłumaczę, ale wiem jedno, na pewno działa :)
/*
An open-source binary clock for Arduino.
Based on the code from by Rob Faludi http://www.faludi.com
Code under (cc) by Daniel Spillere Andrade, www.danielandrade.net
http://creativecommons.org/license/cc-gpl
int second=0, minute=0, hour=0; //start the time on 00:00:00
int munit,hunit,valm=0,valh=0,ledstats,i;
void setup() { //set outputs and inputs
pinMode(1, OUTPUT);pinMode(2, OUTPUT);pinMode(3, OUTPUT);pinMode(4, OUTPUT);pinMode(5, OUTPUT);
pinMode(6, OUTPUT);pinMode(7, OUTPUT);pinMode(8, OUTPUT);pinMode(9, OUTPUT);pinMode(10, OUTPUT);
pinMode(11, OUTPUT);pinMode(12, OUTPUT);pinMode(13, OUTPUT);
pinMode(0, INPUT);
}
void loop() {
static unsigned long lastTick = 0; // set up a local variable to hold the last time we moved forward one second
// (static variables are initialized once and keep their values between function calls)
// move forward one second every 1000 milliseconds
if (millis() - lastTick >= 1000) {
lastTick = millis();
second++;
}
// move forward one minute every 60 seconds
if (second >= 60) {
minute++;
second = 0; // reset seconds to zero
}
// move forward one hour every 60 minutes
if (minute >=60) {
hour++;
minute = 0; // reset minutes to zero
}
if (hour >=24) {
hour=0;
minute = 0; // reset minutes to zero
}
munit = minute%10; //sets the variable munit and hunit for the unit digits
hunit = hour%10;
ledstats = digitalRead(0); // read input value, for setting leds off, but keeping count
if (ledstats == LOW) {
for(i=1;i<=13;i++){
digitalWrite(i, LOW);}
} else {
//minutes units
if(munit == 1 || munit == 3 || munit == 5 || munit == 7 || munit == 9) { digitalWrite(1, HIGH);} else { digitalWrite(1,LOW);}
if(munit == 2 || munit == 3 || munit == 6 || munit == 7) {digitalWrite(2, HIGH);} else {digitalWrite(2,LOW);}
if(munit == 4 || munit == 5 || munit == 6 || munit == 7) {digitalWrite(3, HIGH);} else {digitalWrite(3,LOW);}
if(munit == 8 || munit == 9) {digitalWrite(4, HIGH);} else {digitalWrite(4,LOW);}
//minutes
if((minute >= 10 && minute < 20) || (minute >= 30 && minute < 40) || (minute >= 50 && minute < 60)) {digitalWrite(5, HIGH);} else {digitalWrite(5,LOW);}
if(minute >= 20 && minute < 40) {digitalWrite(6, HIGH);} else {digitalWrite(6,LOW);}
if(minute >= 40 && minute < 60) {digitalWrite(7, HIGH);} else {digitalWrite(7,LOW);}
//hour units
if(hunit == 1 || hunit == 3 || hunit == 5 || hunit == 7 || hunit == 9) {digitalWrite(8, HIGH);} else {digitalWrite(8,LOW);}
if(hunit == 2 || hunit == 3 || hunit == 6 || hunit == 7) {digitalWrite(9, HIGH);} else {digitalWrite(9,LOW);}
if(hunit == 4 || hunit == 5 || hunit == 6 || hunit == 7) {digitalWrite(10, HIGH);} else {digitalWrite(10,LOW);}
if(hunit == 8 || hunit == 9) {digitalWrite(11, HIGH);} else {digitalWrite(11,LOW);}
//hour
if(hour >= 10 && hour < 20) {digitalWrite(12, HIGH);} else {digitalWrite(12,LOW);}
if(hour >= 20 && hour < 24) {digitalWrite(13, HIGH);} else {digitalWrite(13,LOW);}
}
valm = analogRead(0); // add one minute when pressed
if(valm<800) {
minute++;
second=0;
delay(250);
}
valh = analogRead(5); // add one hour when pressed
if(valh<800) {
hour++;
second=0;
delay(250);
}
}
https://www.youtube.com/watch?v=wWQ0zq7O9iE a tutaj filmik przedstawiający działanie.
Koniec mojego pierwszego artykułu. Mam nadzieję, że przyda się początkującym takim jak ja do zrobienia czegoś fajnego co nie wymaga za dużo wiedzy.
Pozdrawiam, Wojtek.:)
Kod i projekt zaczerpnięty z http://www.danielandrade.net
INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Naucz się rysować schematy, bo wychodzą Ci potwornie słabo :)
Domyślam się, że nie wygląda ciekawie aczkolwiek tak wyszedł:) kiedyś miałem większą wprawę.
Świetny pomysł. Trzymaj tak dalej :)
No pomysł nie mój, ale wykonanie jak najbardziej przyjemne i satysfakcjonujące.
Widzę niestety, że dużo niskich ocen więc chyba jestes wyjatkiem któremu sie podobało, a to przeciez dopiero 1 post.. :(