Схема подключения
- Войдите на сайт для отправки комментариев
Втр, 17/04/2018 - 17:33
Здравствуйте, недавно наткнулся на такую статью как "Автоматическая подача звонков в уч. заведении". Нашел прошивку, ну не нашел схему подключения. Прошивка от Voodoo Doll. Очень нужна эта схема.
#include <Wire.h>
#include <DS3231.h>
#define Relay (7)
#define Green (5) // пин зеленый светодиод
#define Blue (9) // пин синий светодиод
#define Red (11) // пин красный светодиод
DS3231 Clock;
bool h12 = false;
bool PM;
bool Century;
bool preventflag=0;
unsigned long preventtime=millis(),
ringtime=millis()+8000;
void setup(){
Wire.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, HIGH);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(Red, OUTPUT);
}
void loop(){
int second, minute, hour, day;
day = Clock.getDoW();
hour = Clock.getHour(h12, PM);
minute = Clock.getMinute();
second = Clock.getSecond();
digitalWrite(Green, HIGH);
#define modemon (day >= 1 && day <= 5 && second >= 0)
#define modesat (day == 6 && second >= 0)
if (modemon && !preventflag && hour == 8 && minute == 30) relayfunc();
if (modemon && !preventflag && hour == 9 && minute == 15) relayfunc();
if (modemon && !preventflag && hour == 9 && minute == 25) relayfunc();
if (modemon && !preventflag && hour == 10 && minute == 10) relayfunc();
if (modemon && !preventflag && hour == 10 && minute == 25) relayfunc();
if (modemon && !preventflag && hour == 11 && minute == 10) relayfunc();
if (modemon && !preventflag && hour == 11 && minute == 30) relayfunc();
if (modemon && !preventflag && hour == 12 && minute == 15) relayfunc();
if (modemon && !preventflag && hour == 12 && minute == 30) relayfunc();
if (modemon && !preventflag && hour == 13 && minute == 15) relayfunc();
if (modemon && !preventflag && hour == 13 && minute == 25) relayfunc();
if (modemon && !preventflag && hour == 14 && minute == 10) relayfunc();
if (modemon && !preventflag && hour == 14 && minute == 20) relayfunc();
if (modemon && !preventflag && hour == 15 && minute == 5 ) relayfunc();
if (modemon && !preventflag && hour == 15 && minute == 25) relayfunc();
if (modemon && !preventflag && hour == 16 && minute == 10) relayfunc();
if (modemon && !preventflag && hour == 16 && minute == 30) relayfunc();
if (modemon && !preventflag && hour == 17 && minute == 15) relayfunc();
if (modemon && !preventflag && hour == 17 && minute == 25) relayfunc();
if (modemon && !preventflag && hour == 18 && minute == 10) relayfunc();
if (modemon && !preventflag && hour == 18 && minute == 20) relayfunc();
if (modemon && !preventflag && hour == 19 && minute == 05) relayfunc();
if (modesat && !preventflag && hour == 8 && minute == 30) relayfunc();
if (modesat && !preventflag && hour == 9 && minute == 15) relayfunc();
if (modesat && !preventflag && hour == 9 && minute == 50) relayfunc();
if (modesat && !preventflag && hour == 10 && minute == 10) relayfunc();
if (modesat && !preventflag && hour == 10 && minute == 20) relayfunc();
if (modesat && !preventflag && hour == 11 && minute == 05) relayfunc();
if (modesat && !preventflag && hour == 11 && minute == 15) relayfunc();
if (modesat && !preventflag && hour == 12 && minute == 0 ) relayfunc();
if (modesat && !preventflag && hour == 12 && minute == 10) relayfunc();
if (modesat && !preventflag && hour == 12 && minute == 55) relayfunc();
if (modesat && !preventflag && hour == 13 && minute == 05) relayfunc();
if (modesat && !preventflag && hour == 13 && minute == 50) relayfunc();
if (modesat && !preventflag && hour == 14 && minute == 0 ) relayfunc();
if (modesat && !preventflag && hour == 14 && minute == 45) relayfunc();
if (modesat && !preventflag && hour == 14 && minute == 55) relayfunc();
if (modesat && !preventflag && hour == 15 && minute == 40) relayfunc();
if(millis()-ringtime<=8000){
digitalWrite(Relay, LOW);
digitalWrite(Blue, HIGH);
}else{
digitalWrite(Blue, LOW);
digitalWrite(Relay, HIGH);
}
if(millis()-preventtime>=300000) preventflag=0;
}
void relayfunc(){
ringtime=millis();
preventtime=millis();
preventflag=1;
}
Так все просто. Светодиоды - см. строки 5-7, к указаным пинам. Правда красный вобще не задействован, а зеленый всегда светит. Наверно скетч такой, недоделаный, что вобщем типично для мусора найденого в инете. Реле на пин 7. Его через ключь. Можно купить на али плату реле+ключь.
DS3231.hна соответствующие i2c например A4, A5. Запитать от чего не жалко - вся схема. Но код стремный, так белые люди не пишут, я бы его не трогал.Так и подключал, ну в протеусе как-то не так работает
Здесь на форуме есть большая тема про подачу звонков. Ищите.
скетч не проверял в работе.
/**/ unsigned long mill;/*переменая для millis()*/ //-------------------------------------- const byte RelayPin = 7;/*пин реле*/ unsigned long timeOFF =/*длительность работы 1 сек*/1000; #include <Wire.h> #include <DS3231.h> DS3231 Clock; bool h12 = false; bool PM; byte state; unsigned long past; enum { sSetup = 0, sOFF, sON}; void stand(byte s) { state = s; past = mill; switch (state) { case sSetup: pinMode(RelayPin, OUTPUT); case sOFF: digitalWrite(RelayPin, LOW);/*выключить*/ break; case sON: digitalWrite(RelayPin, HIGH);/*включить*/ break; } } //-----main-------------------------------- void setup() { Wire.begin(); stand(sSetup); } void loop() { mill = millis(); unsigned long nowTime = Clock.getHour(h12, PM) * 3600 + Clock.getMinute() * 60 + Clock.getSecond(); /*задайте время включения*/ if ( state != sON && nowTime == (unsigned long) /*час*/8 * 3600/*мин*/ * 30 * 60 */*сек*/0) stand(sON); /*отработка времени работы и затем отключения*/ if (state == sON && past - mill >= timeOFF) stand(sOFF); } /*Скетч использует 2826 байт (9%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 228 байт (11%) динамической памяти, оставляя 1820 байт для локальных переменных. Максимум: 2048 байт. */В протеусе тоже как-то странно работает, либо я что-то неправильно делаю
в протеусе как-то не так работает
В протеусе тоже как-то странно работает
так, Квон, по-быстрому взял хрустальный шар и разобрался почему раньше в протеусе работало "не так", а теперь "странно". Заодно посмотри там как именно "не так" и как именно "странно" и всё поправь!
Не видишь, человеку "очень надо"! А написать толком, что ему не нравится - религия не позволяет. Вы же не собираетесь тут оскорблять религиозные чувства?
Так что рабирайтесь и по-быстрому!
мои программы и протеус не совместимы.Но вы дерзайте. :)