Forum modelarskie RC , projektowanie CAD

forum.aerodesignworks.eu
Dzisiaj jest 27 kwie 2024, o 08:57

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 1 ] 
Autor Wiadomość
Post: 21 wrz 2017, o 19:03 
Offline
Administrator
Awatar użytkownika

Rejestracja: 12 lip 2014, o 07:56
Posty: 1703
Lokalizacja: Gdańsk
Ostatnio by urozmaicić dzieciakom zabawę zrobiłem im sygnalizatory LED.
Zabawa autami nabrała nowego znaczenia a przy okazji dzieciaki się uczą rozpoznawać światła i zachowania na drodze 8-) :lol:
Wyszło tak:
Załącznik:
WP_20170918_17_44_35_Pro.jpg
WP_20170918_17_44_35_Pro.jpg [ 385.31 KiB | Przeglądany 112 razy ]


Załącznik:
WP_20170918_17_44_54_Pro.jpg
WP_20170918_17_44_54_Pro.jpg [ 1.96 MiB | Przeglądany 112 razy ]


Płytka sterowania:
Załącznik:
WP_20170915_17_29_49_Pro.jpg
WP_20170915_17_29_49_Pro.jpg [ 2.22 MiB | Przeglądany 112 razy ]


Całość oparte o mikrokontroler ATTiny13V - wersja na niskie napięcie zasilania.
Jako zasilanie służy bateria CR2032.

Schemat banalny, złącze programowania uC i połączenie do diod.
Załącznik:
schemat.png
schemat.png [ 74.5 KiB | Przeglądany 112 razy ]


Program sterujący napisany w C, skompilowany w darmowym Atmel Studio 7.:
Sygnalizator posiada dwa tryby pracy które włączają się na przemiennie przed startem.
* tryb 1: uszkodzenie - ciągle migające pomarańczowe
* tryb 2: Normalna praca - pełen cykl
Kod:
/*
 * Sygnalizator.c
 *
 * Created: 2017-09-13 16:13:43
 * Author : mgr
 */

#ifndef F_CPU
#define F_CPU 1200000
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>

enum Power
{
   On = 0,
   Off
} Power;


enum Led
{
   Green,
   Yellow,
   Red
} Led;

void ChangeState(enum Led led, enum Power power)
{
   int pin =0;
   switch(led)
   {
      case Green:
         pin = (1 << PINB2);
         break;
      case Yellow:
         pin = (1 << PINB4);
         break;
      case Red:
         pin = (1 << PINB3);
         break;
   }

   if(power == On)
   {
      PORTB &= ~pin;
   }
   else
   {
      PORTB |= pin;
   }
}

void normal()
{
   //Setup Green
   ChangeState(Red, Off);
   ChangeState(Yellow, Off);
   ChangeState(Green, On);
   _delay_ms(7000);

   ChangeState(Green, Off);
   ChangeState(Yellow, On);
   _delay_ms(2000);
   ChangeState(Yellow, Off);
   ChangeState(Red, On);
   _delay_ms(7000);
   ChangeState(Yellow, On);
   _delay_ms(2000);
}

void error()
{
   ChangeState(Yellow, On);
   _delay_ms(1000);
   ChangeState(Yellow, Off);
   _delay_ms(1000);
}

int main(void)
{
   DDRB = 0xFF;

   ChangeState(Green, Off);
   ChangeState(Red, Off);
   ChangeState(Yellow, Off);

   int mode = eeprom_read_byte(0x00);
   if(mode == 0xFF)
   {
      eeprom_write_byte(0x00, 0x00);
      mode = 0x00;
   }
   eeprom_write_byte(0x00, mode ^ 1);
    while (1)
    {
      if(mode == 0)
      {
         normal();
      }
      else
      {
         error();
      }
    }
}




W załączniku pełne pliki projektu w Eagle.
Załącznik:
Sygnalizator.zip [789.72 KiB]
Pobrany 7 razy

_________________
Nic tak nie cieszy, jak własny szybowiec :D
____________SAM 18-025_____________
https://gliders.pl


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 1 ] 

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Technologię dostarcza phpBB® Forum Software © phpBB Group