Throwduino Basic - ljus-Sensing blinkande Throwie med 1 extra del - nu med Morsealfabetet (3 / 7 steg)

Steg 3: Programmera Chip




Detta är den ursprungliga skissen - för morsekod skiss, se steg 7

Har ställt in din programmerare i det sista steget, ladda Throwduino grundläggande skissen till IDE. Det finns inklippt nedan och också bifogat.

Redigera - det kan finnas ett fel i koden:

tröskel = (totalt >> 5); Ställ in tröskelvärdet i genomsnitt punkt (klyftan totala av 128).

bör nog vara:

tröskel = (totalt >> 7); Ställ in tröskelvärdet i genomsnitt punkt (klyftan totala av 128).

Det har fungerat för mig eftersom det var men detta kan orsaka problem med den lätta avkänning. Jag kommer att kontrollera och korrigera om det behövs.

Om du vill ändra flash-sekvensen av din thowie så är nu dags. Se till att din kod kommer att passa i minnet av chip du har. Det är inte sannolikt att vara en fråga för något större än en ATtiny25. Skissen nedan tar inte mycket mer än 1K. Koden nedan visar den välkända "1-4-3" flash sekvens. Detta, naturligtvis, kanske inte din sak, så hacka-away.

Flash sekvensen hålls i matrisen och helt enkelt har en lista med flash tal. Dessa spelas med en kort paus mellan varje, följt av en paus på 2 sekunder innan du upprepar. Till exempel för:

Throwie blinkar en gång, pausa, flash 4 gånger, pausa, flash 3 gånger, pausa i 2 sekunder och upprepa.

När skissen är klar, Välj ATtiny85 1Mz (eller beroende på vilken ATtiny du använder) från listan styrelser i IDE. Om du inte väljer rätt styrelsen du får ett kompileringsfel (XXXX inte definieras i detta scope). Om detta, kontrollera att du har valt en ATtinyX5.

Hit "ladda upp" i IDE. Arduino Tiny använder Arduino ISP som standard. Du bör se pin13 ledde på din Arduino flimmer som skissen överförs.

Hur fungerar skissen?

Vi har några funktioner definieras som gör bra saker och kanske du vill använda i hacking:

void flash(byte) - blinkar LED "byte" gånger.
int lightLevel() - returnerar ett heltal som innehåller ljus nivå mätningen från LED mot 2.56v inre ref.
void setup_watchdog(int) - ställer watchdog timer värdet "int". Det finns 10 inställningar från 0 till 9 motsvarar 16, 32, 64, 128, 250, 500, 1000, 2000, 4000 & 8000 ms.
void system_sleep() - sätter systemet att sova för den tidpunkt som angetts i inställningen för watchdog.

För att starta peta vi på några register att ställa saker och minimera slöseri makt. Sedan i setup vi flash 3 gånger och 148 mätningar av ljusnivån. Vi kasta bort de första 20 och genomsnittlig återstående 128. Detta anger den beloppsgräns som vi kommer att bedöma när det är mörkt. Vi flash LED tröskel numret innan. Detta är mer för felsökning än något användbart.

I det viktigaste kretsar vi mäter ljusnivån och jämför med tröskelvärdet. Om dess under värdet sedan vi flash LED av våra förinställda mönster. Om ljusnivån är hög då vi sover i åtta sekunder (den längsta vi kan) före testet igen.

Tack till InsideGadgets för denna artikel som utgjorde startpunkten för sömn koden. Det är värt att notera om du använder detta som du vill återställa avbrott Aktivera flaggan varje gång WDT timeout eller chip återställs nästa gång.

Skiss (detta bör sammanställa till omkring 1262 byte):

Throwduino grundläggande
Ugi 2012
MIT license
Skrivit att köra på ATtiny25/45/85 med Arduino Tiny core - http://code.google.com/p/arduino-tiny/
Kommer inte kompilera för andra Arduinos (ATMega168, ATMega328 etc)
Se till att du väljer rätt styrelsen innan du kompilera.

För Ref:
ADC stift:
ADC1 = PB2
ADC2 = PB4
ADC3 = PB3

Om du bara vill ändra flash mönster, göra det här.
standard är:
//
CONST byte flashSeq [3] = {1,4,3}. Blixt mönster
//
Detta ger 1 flash, paus, fyra blinkar, paus, tre blixtar, paus.
Om du bara vill ha en längre paus, Använd 0 för varje 500ms.
Efter sekvensen vänta vi på 2s innan du upprepar.

CONST byte flashSeq [3] = {1,4,3}. Blixt mönster. Redigera den här.

Hur många poster i det blixt mönstret.
CONST byte seqLength = sizeof(flashSeq);

Nu låt oss göra en throwie för att ordna...

CONST int LEDpin = 4; Även om detta i en konstant, finns det en hel del direkt port tillgång
Jag skulle inte försöka ändra på detta utan gå throu "hela koden.

unsigned int tröskel = 10; Vi ska ställa detta ordentligt under installationen

Detta sätter upp några libs och definitioner för användning med insomningstimern
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef cbi
#define cbi (sfr, lite) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef sbi
#define sbi (sfr, lite) (_SFR_BYTE(sfr) | = _BV(bit))
#endif

ISR(WDT_vect) {WDTCR| = B01000000;} / / reset Watchdog Timer till avbrottsläge varje gång.

Röra om med några register till inaktivera grejer & Ange referenser.
void setup() {
ADCSRB & = B10111111; Inaktivera comparitor
ACSR | = B10000000; Stäng av strömmen till comparitor
ADCSRA | = B10000000; / / slå på ADC
DDRB & = B11100000; Ange alla att mata in
DDRB| = B00011010; Ange 1,3 och 4
PORTB & = B11110111; Ställ in PB3 låg - detta var för testfasen. Förmodligen kan släppas nu.
PRR & = B11111110; tydlig ADC disable bit i makt minskade Reg
analogReference(6); inre 2.56v referera med ingen bypass - INTERNAL2v56NB-

Visa vi är vakna:
Flash(3); Tre blixtar - vi är igång.

Ställ in tröskelvärdet för ljus sensing under första 40 sekunder.
Vi tar 148 mätningar, bin de första 20 och sedan genomsnittlig nästa 128.
unsigned int totala = 0;
för (byte rep = 0; rep < 148; rep ++) {
int value=lightLevel();
int värde = 10;
IF(rep>19) {
totala += värde; tatke totalt 128 avläsningar
}
Flash(Value);

DDRB & = B11100000; Ange alla att mata in
setup_watchdog(4);
system_sleep(); / / sova för kvartalet andra
DDRB| = B00011010; Ange 1, 3 och 4
PORTB & = B1110000; Allt låg
}
tröskel = (totalt >> 7); Ställ in tröskelvärdet i genomsnitt punkt (klyftan totala av 128).

Flash(Threshold); Detta är mest för felsökning ändamål.
}

Huvudloop
Vi mäter ljusnivån. Om den är låg blinkar vi våra sekvensen sedan sömn för 2s.
Om ljus nivå hög, vi sover för 8s.
void loop() {
analogReference(6); inre 2.56v referera med ingen bypass

Mäter ljusnivån och om det är tillräckligt låg, visar vår flash sekvens
om (lightLevel() < tröskel) {
för (byten ordningsföljd = 0; sekvens < seqLength; sekvens ++)
Flash(flashSeq[Sequence]);
Om vi blinkar, sova vi nu för 2s
DDRB & = B11100000; Ange alla att mata in
setup_watchdog(7);
system_sleep(); / / sova i två sekunder
DDRB| = B00011010; Ange 1,3 och 4
PORTB & = B11110111; PB3 låg.
}
annat {
Om vi inte blinkar då sover vi för 8s
DDRB & = B11100000; Ange alla att mata in
setup_watchdog(9);
system_sleep(); / / sova i två sekunder
DDRB| = B00011010; Ange 1,3 och 4
PORTB & = B11110111; PB3 låg.
}

} / / end huvudloop

Mät ljuset genom att titta på spänning genereras av LED ansluten till D4 (A2) å pin 3 chip.
Ställa in produktionen och låg att börja att släppa ut någon avgift för mycket - inte säker på om vi behöver detta
int lightLevel() {
pinMode (LEDpin, OUTPUT);
digitalWrite (LEDpin, låg);
delayMicroseconds(50);
pinMode (LEDpin, indata);
delayMicroseconds(100); Låt det stabilisera som indata igen
unsigned int värde = analogRead(A2);
returnera värdet;
}

Flash rutin - 70ms, 250 ms off
Upprepa visst antal gånger och sedan Pausa 500ms
void flash(byte No) {
pinMode (LEDpin, OUTPUT);

IF (!. Nej) {/ / om vi får en nolla, bara pausa.
DDRB & = B11100000; Ange alla att mata in
setup_watchdog(5);
system_sleep(); / / sova för 500 ms
DDRB| = B00011010; Ange 1,3 och 4
PORTB & = B11110111; PB3 låg.
}

Om vi hade ett noll antal blixtar, gör vi dem nu
för (byte rep = 0; rep < nej; rep ++) {
DDRB| = B00011010; Ange 1,3 och 4
PORTB & = B11110111; PB3 låg.
PORTB| = B00010000; PB4 hög
digitalWrite (LEDpin, hög);
Delay(70);
PORTB & = B11101111; PB4 låg.
DDRB & = B11100000; Ange alla att mata in
digitalWrite(LEDpin,LOW);
setup_watchdog(4); WDT 3 = 128MS
system_sleep();
}

Paus (sova)
DDRB & = B11100000; Ange alla att mata in
setup_watchdog(5); WDT 5 = 500MS
system_sleep(); / / sova
DDRB| = B00011010; Ange 1 och 3
PORTB & = B11110111; PB3 låg.
}

Watchdog timer setup
Detta är specifikt för den ATTiny85 (+ tiny45 & tiny25) och kommer inte att kompilera för ATMega328 etc.
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms
6 = 1 SEK, 7 = 2 sek, 8 = 4 SEK, 9 = 8 SEK
void setup_watchdog (int period) {

bytevärdet;
om (period > 9) period = 9.
värde = period & B111;
om (period > 7) value| = (1 << 5);
Value| = (1 << WDCE);

MCUSR & = ~ (1 << WDRF);
Start 4-klockcykel tt sekvens
WDTCR | = (1 << WDCE) | (1 << Mimmi);
Ange nya watchdog timeout-värde
WDTCR = värde;
WDTCR | = _BV(WDIE);
}

ställa in systemet i lågeffektläge enligt
systemet vaknar upp när wtchdog är timeout
void system_sleep() {
CBI(ADCSRA,ADEN); Växla Analog till Digitalconverter av

set_sleep_mode(SLEEP_MODE_PWR_DOWN); viloläge är inställd här
sleep_enable();

sleep_mode(); Systemet sover här

sleep_disable(); Systemet fortsätter utförande här när watchdog timeout
SBI(ADCSRA,ADEN); Växla Analog till Digitalconverter på
PRR & = B11111110; tydlig ADC disable bit i makt minskade Reg
}

Se Steg
Relaterade Ämnen

Ljus intensitet mätning med hjälp av BH1715 och Raspberry Pi

Igår arbetade vi på LCD-skärmen visar, och samtidigt arbetar över dem vi insåg vikten av ljusintensiteten uträkning. Ljusintensiteten är inte bara viktigt i fysisk domän i denna värld men det har dess bra sagt roll i biologiska domän också. Korrekt u...

Ljus Sensing LED ficklampa

Varje dag, massor och massor av el och energi slösas bort från människor som oavsiktligt lämnar elektronik på, eller ficklampor. Denna uppfinning är den perfekta lösningen på det problemet. Ficklampan bara startar när den känner av att rummet är till...

Ljus intensitet uträkning med hjälp av BH1715 och partikel Photon

Igår arbetade vi på LCD-skärmen visar, och samtidigt arbetar över dem vi insåg vikten av ljusintensiteten uträkning. Ljusintensiteten är inte bara viktigt i fysisk domän i denna värld men det har dess bra sagt roll i biologiska domän också. Korrekt u...

Ljus intensitet uträkning med hjälp av BH1715 och Arduino Nano

Igår arbetade vi på LCD-skärmen visar, och samtidigt arbetar över dem vi insåg vikten av ljusintensiteten uträkning. Ljusintensiteten är inte bara viktigt i fysisk domän i denna värld men det har dess bra sagt roll i biologiska domän också. Korrekt u...

Kontrollera alla ljus eller elektrisk apparat med du Tablet PC eller smartphone (wifi)

Kontrollera alla ljus eller elektrisk apparat med du Tablet PC eller smartphone (wifi) med hjälp av arduino, blynk och en wemos / ESP8266 styrelsenI den här guiden kommer vi att göra något jag kallar en wifi kontrollerad ac switch. (Men den fungerar...

Telefon ljus till UV-ljus hacka! (Fungerar med andra lampor också!)

Hej Youtubes och Instructaganders det är jag TrollFaceTheMan, och idag ska jag visa ett snyggt trick att hacka nästan alla strandsatta LED ljus in i en primitiv UV ljus. Också i den här videon ska jag prova med en glödlampa och se hur den jämför.Förs...

Blinkande LED med 555 Timer

jag försöker sätta i en video men det fungerade inte för mig, så här är en länk till YouTube http://www.youtube.com/watch?v=9rS9nFG8xdIDet här är en detaljerad instruktion visar hur man bygger en blinkande LED med 555 Timer.Det finns ingen kunskap om...

LabVIEW Tutorials - att skapa en blinkande ledde med olika On/Off tider

I tidigare instructable här såg du hur skall skapa blinkande LED med samma ON/OFF tider. I denna tutorial, kan du se om hur du kan skapa en blinkande ledde med olika ON/OFF tider....

LabVIEW Tutorials - att skapa en blinkande Text med olika On/Off tider

I en av de tidigare instructables här såg du om hur du kan skapa en blinkande ledde med olika/på invandrarministrar labview. Och i en annan instructable du såg här om hur man skapar en blinkande text i labview. Båda kan vi skapa en blinkande text med...

AUTOMATISK ljus på/av kontroll med hjälp av TIMER

KOMPONENTLISTAAT89C2051LM7805DIODRELAYKRISTALLOSCILLATORGEMENSAM ANOD SJU SEGMENT DISPLAYTRANSFORMATORBC547 TRANSISTORBC557 TRANSISTORPROJEKTSPECIFIKATION4 siffriga 7 Segment 24 timmar Clock Timer är användning för kontroll valfri tillämpning. Du kan...

RGB snabbt och långsamt blinkande Throwies

här är det! En snabb eller långsam blinkar ledde Throwie som kommer att lysa upp vilket rum som helst! De är så ljusa och kommer att vara perfekt för alla projekt med barnen. Vi testade dem i vårt labb och de kommer sist i veckor (utan uppehåll) med...

Krets för blinkande lampor med musik

ÖVERSIKT:•These instruktioner kommer att visa dig hur man bygger en enkel krets som styr alla typer av lampor (som kopplar in i väggen) och blinkar dem tillsammans med i takt med musik•Endast enkel lödning färdigheter och en bit av elektroniska kunsk...

Fancy blinkande lysdioder med arduino

Detta är fancy ljus generator som är byggt med Arduino. Detta projekt använder fyra lysdioder och kontrolleras med hjälp av en microswitch(button switch) som utlöser dem till glöd lysdioder i olika sekvens och mönster...Uno är en i serien av USB Ardu...

Ljus Sensing lysdioder

jag var nyligen reserching på lysdioder och jag snubblade över denna sida när jag läste det jag hittade att lysdioderna inte bara används för att avge ljus men den har också förmågan att känsla ljus. Första använda LED som ljussensor låter komplicera...

Batteridriven gameboy ljus: ett annat projekt med SUGRU

vi älskar dem, vi spel med dem och de står som en av de största mobila konsoler av all tid. Men du fortfarande inte kan spela dem i mörkret. jagn detta projekt jag fixa en av Gameboy colour mest irriterande brister utan användning av det opålitligt,...

Ljus aktiveras blinkande lysdioder

i detta Instructable jag kommer att visa dig hur man sätter ihop en blinkande LED krets som startar när du vinkar handen över det, blinkar för en sekund eller två, och sedan tonas ut.Jag fick schematiskt för blinkande kretsen från steven123654's inst...

Ljus/mörk detektor med en op-förstärkare

Detta är en enkel demonstration visar hur du använder en op-förstärkare och en fotocell för att förnimma ljus eller mörker.Du behöver:LM741 Op-amp Digikey del #LM741CNNS/NOPB-ND10 kΩ 1/4 Watt resistor Digikey del #CF14JT10K0CT-ND470 Ω 1/4 Watt Resist...

Ljus/mörk sensor med hjälp av integrerade ljus

Inledning: ledde sänder ut ljus när spänning läggs med korrekt polaritet ström genom ledde kan kontrolleras av light.now dagar många elektriska apparater kontrolleras med hjälp av light.when ljus är närvarande enheter fungerar annars de kommer att st...

Blinkande lysdiod med Arduino Nano

Hej vänner,Att se en blinkande lysdiod är så roligt, men när du gör en liknande det själv då roligt är ännu mer. ^_^Låt roligt börjar,I detta instructable, har jag visat om hur blinka en LED med Arduino Nano.Obs: jag inte använde motstånd i detta ins...