<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=23&amp;t=13710&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-30T12:37:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=13710&amp;mode</id>
<entry>
<author><name><![CDATA[crasio]]></name></author>
<updated>2015-11-30T12:37:33+01:00</updated>
<published>2015-11-30T12:37:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146734#p146734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146734#p146734"/>
<title type="html"><![CDATA[Re: Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146734#p146734"><![CDATA[
Ok. Sam czujnik jest trochę drogi, ale sądzę że to lepszy pomysł niż porywać się na ekg którego sam do końca nie rozumiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4387">crasio</a> — 30 lis 2015, o 12:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-11-29T23:08:47+01:00</updated>
<published>2015-11-29T23:08:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146707#p146707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146707#p146707"/>
<title type="html"><![CDATA[Re: Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146707#p146707"><![CDATA[
<div class="quotetitle">crasio napisał(a):</div><div class="quotecontent"><br />Czy to mogło by być coś takiego ?<br /></div><br />tak dało by się aczkolwiek myśle że takie czujniki flex sensor były by lepsze <br />mógłbyś ruchami palców w dłoni sterować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><!-- m --><a class="postlink" href="http://botland.com.pl/czujniki-nacisku/1640-czujnik-ugiecia-55-x-63-mm-sparkfun.html" >http://botland.com.pl/czujniki-nacisku/ ... rkfun.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 29 lis 2015, o 23:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2015-11-29T22:28:44+01:00</updated>
<published>2015-11-29T22:28:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146704#p146704</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146704#p146704"/>
<title type="html"><![CDATA[Re: Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146704#p146704"><![CDATA[
Fajnie, powtórzę za SunRiverem - gratulacje za samozaparcie:-)<br />Takie tematy niby wydają się proste, ale jako początkujący wiem jak osłabia, gdy wszystko powinno działać a nie działa i koniec.<br />A do tego bez pętli i delayów, to niezła szkoła była.<br />Życzę jak najwięcej ciekawych, udanych projektów!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 29 lis 2015, o 22:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[crasio]]></name></author>
<updated>2015-11-29T19:33:04+01:00</updated>
<published>2015-11-29T19:33:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146677#p146677</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146677#p146677"/>
<title type="html"><![CDATA[Re: Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146677#p146677"><![CDATA[
Raz próbowałem robić sterowanie gestami za pomocą hallotronów zamontowanych na palcach. Na repulsorze były rozmieszczone magnesy, lecz okazało się to być nie zbyt dobrym rozwiązaniem. Musiałbym tworzyć jakieś funkcje kombinacyjne by przez przypadek nie uruchomić jakiegoś trybu ( czasem czujniki się załączały a czasem dopiero za drugim razem ). Sądzę że ten pomysł z klipsami i adc był by dobry, ale nie jestem pewien jak to zrobić (od strony programowej wiem). Znalazłem przykład na tej stronie : <!-- m --><a class="postlink" href="http://www.swharden.com/blog/2009-08-14-diy-ecg-machine-on-the-cheap/" >http://www.swharden.com/blog/2009-08-14 ... the-cheap/</a><!-- m --> . Czy to mogło by być coś takiego ? Czy dało by się operować tylko na jednej elektrodzie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4387">crasio</a> — 29 lis 2015, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-11-29T11:01:36+01:00</updated>
<published>2015-11-29T11:01:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146647#p146647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146647#p146647"/>
<title type="html"><![CDATA[Re: Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146647#p146647"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Zamiast pilota przydał by się też jakiś interface który z czytywał by myśli albo impulsy nerwowe  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /></div><br /><br />wcale nie lol, jest dostęp do szeregu sond eeg i pulsometrów które można wykorzystać do sterowania.<br />ba rejestrator impulsów nerwowych można bardzo prosto zrealizować używając taniego klipsa do ekg <br />i wzmacniając sygnał na LM358 wpuszczając na ADC można łatwo ustalić na jakie napięcie mięśni ma zadziałać <br />jak chcesz są też czujniki paskowe ruchu siły itd przez co możesz uzyć ich do budowy rękawicy sterującej gestami <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Projekt ciekawy zaiste i tu gratulacje za samozaparcie , niemniej  tematyka ironmana  do mnie nie przemawia, nigdy go nie lubiłem<br />podobnie jak hulka i spidermana, zielonej latarni czy kapitana ameryki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 29 lis 2015, o 11:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[crasio]]></name></author>
<updated>2015-11-29T14:00:34+01:00</updated>
<published>2015-11-28T17:15:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146603#p146603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146603#p146603"/>
<title type="html"><![CDATA[Iron man - Repulsor czyli ciekawy efekt LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13710&amp;p=146603#p146603"><![CDATA[
Witam. Po długim czasie szukania błędów i sprawdzania poprawności działania, chciałbym przedstawić prosty efekt led czyli repulsor z filmu Iron man  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <a href="https://obrazkiforum.atnel.pl/4387/31ac8152fa12735a2d20cc672cd6c322.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4387/31ac8152fa12735a2d20cc672cd6c322.jpg" alt="Obrazek" /></a><br /><br />Wykorzystuję tu 3 timery . Jeden do generowania programowego pwm, drugi do odmierzania czasu jako timer programowy a trzeci do odbioru podczerwieni z pilota rc5. Wykonałem specjalną okrągłą płytkę z trzema diodami niebieskimi i jedną diodą 3W białą. Do tego jest dodany kawałek plastiku żeby rozproszyć światło. Program napisany na Atmege16. Z kodem głowiłem się przez jakiś czas, bo mimo iż kompilator nie pokazywał błędów, to zawsze coś było źle. Czasem diody nie gasły do końca, a czasem tryby się zacinały przez co trzeba było resetować układ. W końcu zrobiłem sobie przerwę i po miesiącu wróciłem , przysiadłem i napisałem od nowa. W końcu po dodaniu kilku zmiennych takich jak lock do zablokowania nie pożądanej zmiany trybu, program w końcu zaczął działać jak należy. Poniżej zamieszam kod dość prosty kod, ale zaznaczam że jestem początkujący:<br /><br />[syntax=c]/*<br /> * rep_stage.h<br /> *<br /> *  Created on: 03-04-2015<br /> *      Author: Maciej<br /> */<br /> <br />#ifndef REP_STAGE_H_<br />#define REP_STAGE_H_<br /> <br />#define REPEAT 8 // liczba powtórzeń<br /> <br />#define DEFAULT_BRIGHT 100 // jasnosć repulsora w trybie spoczynku<br /> <br />#define MAX_BRIGHT 255 // największa jasnosć<br />#define MIN_BRIGHT 0 // minimalna jasnosć<br /> <br />// Czasy<br /> <br />#define PWM_TIME 8 // czas rozjasniania lub sciemniania repulsora w ms<br /> <br />#define START_TIME 8 // czas rozjasniania lub sciemniania repulsora w ms<br />#define CLOSE_TIME 24 //czas sciemniania repulsora w ms w trybie standby<br />#define FLIGHT_CYCLE_TIME 2 //czas rozjasniania lub sciemniania repulsora w ms tryb lotu<br /> <br />//tryb battle mode<br /> <br />#define BATTLE_PWM 3 // czas rozjasniania lub sciemniania repulsora w ms<br /> <br />#define BATTLE_START 4 // czas rozjasniania bo włączeniu repulsora<br />#define BATTLE_CLOSE 10 //czas sciemniania repulsora w ms w trybie standby<br /> <br />//////////////// rozkazy //////////////////////////<br /> <br />#define TURN_ON 1<br />#define TURN_OFF 2<br />#define CHARG 3<br />#define FIRE 4<br />#define DISCHARG 5<br />#define FLY 6<br /> <br />extern volatile uint8_t light;<br />void repulsor( uint8_t keyz, uint8_t battle_mode );<br /> <br />#endif /* REP_STAGE_H_ */[/syntax]<br /><br /><br />[syntax=c]/*<br /> * rep_stage.c<br /> *<br /> *  Created on: 03-04-2015<br /> *      Author: Maciej<br /> */<br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;rep_stage.h&quot;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;../REPULSOR/Soft_Tim.h&quot;<br /> <br />#include &quot;../comm.h&quot;<br /> <br />volatile uint8_t light; // wypełnienie pwm<br /> <br /> <br />static uint8_t charging( void ) // ładowanie<br />{<br /> <br />    if( light &lt; MAX_BRIGHT ) light++; // jesli pwm mniejszy od wartosci max to zwiększaj o 1<br />    else return 1; // jesli pwm jest równy 255 to zwróć rezultat funkcji jako 1<br /> <br />    return 0; // domyslnie zwróć 0<br />}<br /> <br /> <br />static uint8_t discharge( uint8_t bright )<br />{<br /> <br />    if(light &gt; bright ) light--; // sciemnianie<br />    else return 1;<br /> <br />        return 0; // domyslnie zwróć 0<br /> <br />}<br /> <br />static uint8_t charg_discharg( uint8_t bright, uint8_t * ctr) // ładowanie i rozładowanie w jednym<br />{<br /> <br />        if( !( *ctr ) &amp;&amp; charging() ) *ctr = 1;// jeśli funcja ładowania zakończy się do przejdź do rozładowania<br /> <br />        if( ( *ctr ) &amp;&amp; discharge( bright) ) return 1; // jeśli rozładowanie zakończy się to zwróć 1<br /> <br />        return 0; // domyślnie zwróć 0<br />}<br /> <br />static uint8_t firee( void ) // strzał<br />{<br />        static uint8_t cnt = 0; // licznik<br />        static uint8_t loop = 0; // ilosc powtórzeń<br /> <br />        if( loop &gt;= REPEAT ) // jeśli loop jest większe lub równe ilości powtórzeń<br />        {<br />                loop = 0; // zerowanie licznika powtórzeń<br />                return 1; // zakończ funkcję zwracając 1<br />        }<br /> <br />    if(cnt) light = 0, Timer4 = 80; // minimalne wypełnienie wraz z czasem swiecenia diody led<br />    else light = 255, loop ++, Timer4 = 20; // maksymalne wypełnienie<br />    // loop zwiększa się o 1 przy maksymalnej jasności ponieważ gdy funkcja zwraca 1 to repulsor powinien się świecić z maksymalną jasnością<br /> <br /> <br />    // zwiększaj licznik strzałów<br />        cnt ^=1;<br /> <br />        return 0; // domyślnie zwróć 0<br />}<br /> <br />void repulsor( uint8_t keyz, uint8_t battle_mode ) // do funkcji przezkazuję zmienną klawiszy i zmienną która określa tryb działania repulsora<br />{<br />        static uint8_t ctrl, order, lock, dis;<br /> <br />        enum repulsor_phase { turn_off, standby, ready }; // typ enum dla przejrzystości<br />        static enum repulsor_phase select = turn_off; // repulsor wyłączony<br /> <br />    /////////////////////////////////////////////////////////////////////////////////////////////////////////<br /> <br /> <br />        /* Klawisz 1 aktywuje tryb uspienia<br />     * Klawisz 2 aktywuje tryb czuwania<br />         * Klawisz 3 Ładowanie Repulsora<br />     * Klawisz 4 Strzał<br />     * Klawisz 5 Rozładowanie Repulsora<br />         * Klawisz 6 Symulator lotu<br />         */<br /> <br />         if(!lock) // zapobiegnięcie zmianie rozkazu podczas trwania innego<br />         {<br />                 if(keyz == 1) order = TURN_OFF;<br />                 if(keyz == 2) order = TURN_ON;<br />                 if(keyz == 3) order = CHARG;<br />                 if(keyz == 4) order = FIRE;<br />                 if(keyz == 5) order = DISCHARG;<br />                 if(keyz == 6) order = FLY;<br /> <br />         }<br /> <br />         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /> <br />         if( select == turn_off ) // tryb wyłączenia<br />         {<br /> <br />                 if( !Timer3 )<br />                 {<br />                    if( order == TURN_ON ) // jesli padł rozkaz włączenia<br />                    {<br />                        if(!battle_mode) Timer3 = START_TIME;<br />                        else Timer3 = BATTLE_START;<br /> <br />                        lock = 1; // ustaw blokadę na czas trwania funkcji<br /> <br />                        if( charg_discharg( DEFAULT_BRIGHT, &amp;ctrl) ) lock = 0, select = standby; // jesli funkcja rozjasniania i sciemniania zakończy się to przejdź w tryb spoczynku<br />                        }<br />                    else light = 0;<br />                        }<br />         }<br />///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /> <br />         if( select == standby ) // tryb spoczynku i oczekiwanie na rozkazy<br />         {<br />                 if( !Timer3 )<br />                 {<br />                         if( order == TURN_OFF )<br />                         {<br /> <br />                             if(!battle_mode) Timer3 = CLOSE_TIME;<br />                             else Timer3 = BATTLE_CLOSE;<br /> <br />                                 lock = 1; // ustaw blokadę na czas trwania funkcji<br />                                 if( discharge( MIN_BRIGHT ) ) select = turn_off, ctrl = 0, lock = 0; // jesli funkcja zwróci 1 ( ściemnianie zakończone ) to wyłącz<br />                         }<br /> <br />                     if( order == CHARG )<br />                         {<br />                             if(!battle_mode) Timer3 = PWM_TIME;<br />                             else Timer3 = BATTLE_PWM;<br /> <br />                                 lock = 1; // ustaw blokadę na czas trwania funkcji<br />                                 if( charging() ) select = ready, lock = 0; // jesli funkcja zwróci 1 ( rozjaśnianie zakończone ) to czekaj na dalsze rozkazy w trybie gotowości<br />                         }<br /> <br />                 }<br /> <br />         }<br />/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br /> <br />         if(select == ready) // czekaj na dalsze rozkazy<br />         {<br />                 if( order == FIRE &amp;&amp; !dis ) // jeśli rozkaz strzału<br />                 {<br />                         lock = 1; // ustaw blokadę na czas trwania funkcji<br /> <br />                         if( !Timer4 )<br />                         {<br />                                 if( firee() ) dis = 1, lock = 0; // po zakończeniu funkcji, rozładuj i zwolnij blokadę<br />                         }<br />             }<br /> <br />                 if( order == DISCHARG || dis ) // jeśli rozkaz rozładowania lub funkcja strzału zakończyła się<br />                 {<br />                          lock = 1; // ustaw blokadę na czas trwania funkcji<br /> <br />                          if( !Timer3 )<br />                          {<br />                                  if(!battle_mode) Timer3 = PWM_TIME;<br />                                  else Timer3 = BATTLE_PWM;<br /> <br />                                  if( discharge( DEFAULT_BRIGHT ) ) select = standby, dis = 0, lock = 0; // powrót do spoczynku i zwolnienie blokady<br />                          }<br />                 }<br /> <br />                 if( order == FLY ) // rozkaz lotu<br />                 {<br />                         if( !Timer3 )<br />                         {<br />                                 Timer3 = FLIGHT_CYCLE_TIME; // przypisanie zdefiniowanego czasu dla timer3<br />                                 if( charg_discharg( 120, &amp;ctrl) ) ctrl = 0; // jesli funkcja zwróci 1 ( cykl zakończony ) to powtórz cykl od nowa<br />                         }<br />                 }<br /> <br />                 if( order == TURN_OFF ) // rozkaz wyłączenia<br />                 {<br />                         lock = 1; // ustaw blokadę na czas trwania funkcji<br /> <br />                         if( !Timer3 )<br />                         {<br />                             if(!battle_mode) Timer3 = CLOSE_TIME; // czas domyślny<br />                             else Timer3 = BATTLE_CLOSE; // czas battle mode<br />                                 if( discharge( MIN_BRIGHT ) ) select = turn_off, ctrl = 0, lock = 0; // jesli funkcja zwróci 1 ( ściemnianie zakończone ) to wyłącz<br />                         }<br />                 }<br /> <br />     }<br />}[/syntax]<br /><br /><br />Przed main należy dać <br /><br />[syntax=c]#include &quot;REPULSOR/Soft_Tim.h&quot; // plik z timerem programowym<br />#include &quot;REPULSOR/rep_stage.h&quot; // plik z funkcjami repulsora<br />#include &quot;comm.h&quot; // plik z tablicami korekcji gamma<br /> <br />uint8_t klawisz, tryb; // zmienne potrzebne do funkcji repulsor[/syntax]<br /><br /><br />Natomiast w pętli głównej należy dać<br />[syntax=c]repulsor(klawisz, tryb);<br />pwm1 = GAMMAR(light);[/syntax]<br /><br /><br />w których pwm1 to kanał programowego pwm, klawisz to naciśnięty klawisz z pilota oraz wybór trybu ( 0- normalny, 1- battle mode czyli tryb przyśpieszony )<br /><br />Jak widać główne założenia projektu to:<br />- Korekcja gamma<br />- żadnych delayów<br />- żadnych pętli<br /><br />Większość kodu opiera się na ćwiczeniach z blue i greenbooka. Do sterowania repulsorem używany jest pilot rc5 ( moim zdaniem lepszy niż używając mikro switchów ) wraz z biblioteką IR_UNI. Timery programowe są tak samo przepisane z książki.<br />Sam efekt bardzo mi się podoba choć brakuje jeszcze charakterystycznego dźwięku nad którym kiedyś popracuję. Zamiast pilota przydał by się też jakiś interface który z czytywał by myśli albo impulsy nerwowe  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />Poniżej filmik przedstawiający działanie:<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br /><br />widać że kamerka w telefonie wychwytuje impulsy pwm.<br /><br />Dokładny filmik przedstawiający każdy tryb:<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br /><br />Taktowanie procka wynosi 12Mhz. Programowy pwm działa z częstotliwością ok. 470 Hz.<br /><br />Wszelkie uwagi i propozycje mile widziane  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />I ty możesz zostać Iron man'em<br /><br /><a href="https://obrazkiforum.atnel.pl/4387/05005ef7ad4345783404585b10995d26.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4387/05005ef7ad4345783404585b10995d26.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4387">crasio</a> — 28 lis 2015, o 17:15</p><hr />
]]></content>
</entry>
</feed>