Serwisy partnerskie:
Close icon
Serwisy partnerskie

Stwórz swój własny komunikator grupowy

Article Image
Elmax
Często komunikujemy się w ramach swojej grupy z biura lub przyjaciół używając krótkich słów kluczowych lub fraz. Ten komunikator grupowy może być przydatny dla takich małych grup, dla których słowo kluczowe jest wystarczające do zrozumienia wiadomości. Wyświetlacz domyślnie pokazuje aktualną datę i czas, gdy nie ma wiadomości i służy jako element dekoracyjny na stole roboczym.

Komunikator ten może pomieścić do dziesięciu wiadomości. Po otrzymaniu jedenastej wiadomości najstarsza wiadomość jest usuwana, a najnowsza dodawana do listy wiadomości, zgodnie z zasadą FIFO (first-in-first-out - pierwszy na wejściu, pierwszy na wyjściu). Może być używany przez maksymalnie osiem osób do komunikowania się między sobą za pomocą słów kluczowych.

Obwód i działanie

Schemat ideowy komunikatora grupowego jest przedstawiony na rysunku 1. Składa się on z 40-pinowego mikrokontrolera AVR (ATmega32), bezprzewodowego nadajnika dalekiego zasięgu (HC-12), układu scalonego RTC (DS1307) oraz układu scalonego stabilizatora 5 V (7805). Do zasilania układu można użyć zasilacza 9 V lub 12 V DC albo baterii. Wszystkie przełączniki od ES1 do ES5 oraz od SS1 do SS8 są połączone z rezystorem 470-omowym (R28), aby uniknąć przepływu prądu przez dowolny pin portu mikrokontrolera.

Rysunek 1. Schemat połączeń komunikatora grupowego

ATmega32A posiada wszystkie cechy wymagane dla tego projektu. Posiada 32 kB pamięci Flash do przechowywania pliku hex, 1 kB EEPROM do przechowywania nazw użytkowników, 2 kB wewnętrznej pamięci SRAM do uruchamiania programu i przechowywania wartości zmiennych/buforów, dwuprzewodowy interfejs szeregowy dla interfejsu RTC IC DS1307, programowalny, szeregowy USART dla bezprzewodowego nadajnika HC-12, oraz 32 programowalne linie I/O dla różnych przełączników i innych wyjść/wskaźników.

HC-12 jest 5-pinowym, niewielkim (ok. 28×15×4 mm) bezprzewodowym nadajnikiem z anteną. Wykorzystuje port USART do komunikacji z mikrokontrolerem (MCU). Posiada pasmo przenoszenia od 433,4 MHz do 473,0 MHz z możliwością ustawienia wielu kanałów, łącznie 100 kanałów z krokiem co 400 kHz, domyślnie pracuje na częstotliwości 433,4 MHz. Maksymalna moc nadawcza modułu wynosi 100 mW (20 dBm). Karta katalogowa wskazuje, że może komunikować się na odległość do 1000 metrów przy szybkości transmisji 1200 i do 600 metrów przy szybkości transmisji 9600 (domyślnie), gdy nadajnik i odbiornik są umieszczone bez żadnych przeszkód pomiędzy nimi i są dla siebie widoczne.

Wbudowany MCU realizuje komunikację z urządzeniem zewnętrznym i nie jest wymagane żadne programowanie lub konfiguracja do podstawowego wykorzystania modułu. Aby zmienić jakiekolwiek parametry, należy podłączyć pin SET do stanu niskiego i użyć komend AT. Domyślnie wbudowany rezystor podciągający powoduje, że pin SET jest w stanie wysokim i transmituje oraz odbiera dane bezprzewodowe (nawet bez podłączenia do pinu SET).

DS1307 jest popularnym układem zegara czasu rzeczywistego (RTC) z wbudowanym formatem daty i czasu oraz kalendarzem. Wykorzystuje on kwarc o częstotliwości 32,768 kHz do generowania dokładnego impulsu zegarowego i komunikuje się za pomocą dwuprzewodowego interfejsu (TWI, zwanego też I2C) z mikrokontrolerem. Układ musi być na stałe zasilany z baterii 3 V, aby wewnętrznie uruchamiać datę i czas. Do odczytu lub zapisu daty i czasu z układu wymagane jest zasilanie 5 V DC.

Wstępna konfiguracja

Po zmontowaniu układu na płytce drukowanej należy umieścić mikrokontroler, moduł HC-12 oraz układ scalony RTC w odpowiednich miejscach. Włóż baterię 3 V do podstawki i podłącz LCD1. Zworami SJ1, SJ2 i SJ3 ustaw numer identyfikacyjny płytki. Po podłączeniu zasilacza 9 V lub 12 V DC włączyć zasilanie przełącznikiem S1. Zaczną świecić diody LED1, LED4 oraz podświetlenie wyświetlacza LCD1.

Następnie należy wgrać plik GroupMessenger.hex do mikrokontrolera za pomocą odpowiedniego programatora AVR przez port ISP. Po zapisaniu programu do mikrokontrolera, odłącz programator. Użyj zworki (patrz tabela) aby ustawić numer ID dla każdej płytki. Należy to zrobić tylko raz podczas wstępnej konfiguracji, a następnie pozostawić bez zmian.

Program przechodzi przez autotest i sprawdza połączenia z modułami zewnętrznymi. Sekwencja testowania jest jak poniżej, przy czym dioda LED2 miga dla sprawdzenia każdego elementu:

  1. LCD1 pokazuje przez chwilę komunikat 'Group Messenger'.
  2. Program sprawdza wewnętrzną pamięć EEPROM i zapisuje domyślne nazwy użytkowników w przypadku nowego mikrokontrolera. Następnie odczytuje zapisane nazwy z pamięci EEPROM.
  3. Sprawdza i wyświetla numer ID (1 do 8) oraz nazwę zgodnie z ustawieniami zworek SJ1 do SJ3.
  4. Na chwilę zapala się dioda LED3 z nowym komunikatem.
  5. Rozlega się krótki sygnał dźwiękowy emitowany przez brzęczyk piezoelektryczny (PZ1).
  6. Ustawia USART na prędkość 9600 bodów i wyświetla to samo na LCD1.
  7. Sprawdza poprawność połączeń z modułem HC-12 i wyświetla komunikat OK/ERROR.
  8. Sprawdza status układu RTC i resetuje do wartości domyślnych, jeśli jest to wymagane. Sekundowa dioda LED4 zaczyna teraz migać, w przeciwnym razie wyświetla komunikat Error, jeśli połączenia nie są prawidłowe.
  9. Wchodzi do pętli głównej programu i wyświetla w sposób ciągły datę i czas.

Aby zmienić nazwę ID lub datę i czas przy pierwszym użyciu, naciśnij przycisk ES5 (Setting). Aktualna nazwa użytkownika jest wyświetlana na wyświetlaczu LCD1, a kursor miga, umożliwiając edycję nazwy. Użyj ES1 (przesuń kursor do następnej pozycji), ES2 (przesuń kursor do poprzedniej pozycji), ES3 (następny znak ASCII) i ES4 (poprzedni znak ASCII), aby edytować żądaną nazwę użytkownika. Jeśli żaden przycisk nie zostanie naciśnięty przez dłużej niż pięć sekund, to edytowana/nowa nazwa użytkownika zostanie zapisana do pamięci EEPROM mikrokontrolera. Następnie na wyświetlaczu LCD1 wraz z kursorem wyświetlana jest aktualna data i czas. Użyj ES1 (przesuń kursor do następnej pozycji) i ES3 (inkrementuj i zapętlaj liczbę), aby ustawić aktualną datę i czas. Jeżeli przez ponad pięć sekund nie zostanie naciśnięty żaden przycisk, to edytowana/aktualna data i czas zostanie zapisana do układu RTC DS1307.

Do wysyłania i odbierania wiadomości w projekcie potrzebne są co najmniej dwa takie moduły (PCB). Do komunikacji między sobą można wykorzystać maksymalnie osiem modułów.

Budowa i testowanie

Rozkład płytki drukowanej komunikatora grupowego w rzeczywistych wymiarach pokazano na rysunku 2, a rozkład elementów na rysunku 3. Zmontować układ na płytce drukowanej. Podłączyć zasilanie 9 V lub 12 V DC przez CON1 oraz baterię 3 V przez BATT.1. Przed włożeniem MCU do płytki, nie zapomnij wgrać do niego pliku GroupMessenger.hex.

Rysunek 2. Układ płytki drukowanej dla komunikatora grupowego
Rysunek 3. Układ elementów na płytce drukowanej

Użyj co najmniej dwóch modułów do testowania; jeden (Moduł1) jako nadajnik i drugi (Moduł2) jako odbiornik. Zaproponowany przez autora panel dla komunikatora grupowego jest pokazany na rysunku 4.

Rysunek 4. Proponowany panel dla komunikatora grupowego

Wysyłanie wiadomości

Przyciski od SS1 do SS8 są przyciskami wyboru kolejno nazwy użytkownika, pierwszego zestawu wiadomości oraz drugiego zestawu wiadomości. Te same osiem przycisków służy do wyboru nazwy użytkownika i dwóch rodzajów wiadomości przypisanych do każdego przycisku. Każdy przycisk jest używany dla jednej nazwy użytkownika i dwóch wiadomości, które są wybierane przez naciśnięcie kolejny raz tego samego przycisku.

Aby wysłać wiadomość należy najpierw wybrać nazwę użytkownika (aktualny numer ID użytkownika SET2 lub odbiornika) naciskając jeden z przycisków wyboru od SS1 do SS8. Wybrana nazwa zostanie wyświetlona na wyświetlaczu LCD1. Ponowne naciśnięcie tego samego przycisku spowoduje wysłanie żądanej wiadomości.

Nazwa użytkownika i ID wyświetlane są w pierwszym wierszu wyświetlacza LCD. Po naciśnięciu tego samego przycisku w celu wybrania wiadomości (np. Contact me), pojawi się ona w drugim rzędzie wyświetlacza LCD. Teraz należy nacisnąć ES1 (przycisk wysyłania), aby wysłać wiadomość. Potwierdzenie wysłania wiadomości pojawi się na wyświetlaczu LCD wraz z godziną i datą.

Format pakietów danych wysyłanych przez Moduł1 to: Ascii27+receiver_id_no+sender_id_no+sender_user_name+space+time+ascii22+the_message_string+ascii26+null

Odbieranie wiadomości

Moduł2, który ma ID_NO użytkownika wybranego przez Moduł1 do wysłania, odbiera dane, przetwarza je i wyświetla na ekranie LCD w sposób ciągły, aż do naciśnięcia przez użytkownika dowolnego przycisku (SS1 do SS8 lub ES1 do ES5). Ponadto dioda LED3 nowej wiadomości świeci się i rozlega się sygnał dźwiękowy za każdym razem, gdy odbierana jest nowa wiadomość. Inne zestawy, które nie pasują do ID_NO, odrzucają wiadomość.

Nazwa użytkownika i czas (w formacie GG:MM) dostępne w Module1 są również wyświetlane w pierwszym wierszu wyświetlacza LCD w Module2, a aktualnie odebrana wiadomość jest wyświetlana w drugim wierszu wyświetlacza LCD. Nazwa użytkownika modułu1 zostanie zapisana w pamięci EEPROM (mikrokontrolera) modułu2. W każdym module może być zapisanych do dziesięciu takich odebranych wiadomości. Ale tylko ostatnia wiadomość odebrana przez każdy moduł jest wyświetlana na wyświetlaczu LCD.

Aby przejrzeć wszystkie odebrane i zapamiętane komunikaty, należy nacisnąć przyciski ES3 (dla następnego odebranego komunikatu) i ES4 (dla poprzedniego odebranego komunikatu). Aby skasować dowolną wiadomość po jej odczytaniu, należy nacisnąć przycisk ES2. Po naciśnięciu przycisków ES3 i ES4, po osiągnięciu końca wiadomości, słyszalny jest krótki sygnał dźwiękowy.

Definicje użytkownika

Następujące nazwy użytkowników i wiadomości są zdefiniowane w kodzie (GroupMessenger.C). Możesz je zmienić zgodnie z Twoimi wymaganiami. Następnie skompiluj kod używając AVR Studio 4 (lub wyższej) i zapisz nowy plik GroupMessenger.hex do mikrokontrolera.

Nazwy użytkowników

W poniższej definicji można użyć każdej nazwy użytkownika składającej się z dziesięciu znaków (użyj spacji, jeśli jest mniejsza niż dziesięć znaków).

char USER_NAMES[8][11] = { "UserName01",
"UserName02",
"UserName03", "UserName04", "UserName05",
"UserName06", "UserName07", "UserName08"
};

Wiadomości

W kodzie zdefiniowane są następujące komunikaty. Długość komunikatu nie powinna przekraczać szesnastu znaków, w przeciwnym razie komunikat zostanie obcięty na wyświetlaczu LCD odbiorcy.

char *USER_MESSAGES[] = { “Send e-mail”,
“Attend Meeting”, “Contact Me”, “Call
Back”, “Job Status ?”, “OK / Done”, “I am
Leaving”,”On Leave Tomorrow”, “Bring File”,
“Contact Client”, “Contact Head”,”Get
Application”, “Ready.”, “In Progress…”,
”Waiting…”,”Logged In”};

Uwagi

  1. Mikrokontroler może przejść do pętli nieskończonej podczas otrzymywania potwierdzenia z układu RTC w przypadku jakiegokolwiek błędu, uszkodzenia lub braku DS1307.
  2. Wysłana wiadomość nigdy nie zostanie odebrana przez moduł odbiornika, jeśli jest on wyłączony.
  3. Jako zasilanie można zastosować akumulator Li-ion 11,1 V, 2200 mAh.
  4. Układ został przetestowany do odbioru na odległość do 50 metrów przez ściany i płyty i uzyskał zadowalające wyniki.
Wykaz elementów
Ilość
Symbol
Nazwa/opis/gdzie kupić
16
R1-R5, R7-R9, R18-R25
4,7 kΩ
4
R6, R10, R11, R14
2,2 kΩ
3
R12, R16, R17
10 kΩ
2
R13, R15
1 kΩ
1
R26
3,3 kΩ
1
R27
47 kΩ
1
R28
470 Ω
1
C2
47 uF
5
C3-C7
100 nF
2
D1, D2
1N4007
4
LED1-LED4
Dioda LED 5mm
1
IC1
7805
1
IC3
DS1307
1
T1
BC548
13
SS1-SS8, ES1-ES5, S2
Przycisk mikroswitch
42
SJ1-SJ3, PZ1, BATT.1, VR1, S1, CON2, CON3, LCD1
Szpilki goldpin
Do pobrania
Download icon Stwórz swój własny komunikator grupowy - kod źródłowy Download icon Stwórz swój własny komunikator grupowy - schemat montażowy i PCB
Firma:
Tematyka materiału: Engineering Projects For You, 1001+ Electronics Projects For You, Intermediate Projects
AUTOR
Źródło
www.electronicsforu.com
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Edukacja
1/10 Jak działa rezystor LDR?
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"