Throwduino Basic - détection de lumière clignotant Throwie avec 1 partie ajoutée - maintenant avec le Code Morse (3 / 7 étapes)

Étape 3: Programmer la puce

C’est le croquis original - croquis de Morse Code, reportez-vous à l’étape 7

Ayant mis en place votre programmeur dans la dernière étape, charger le croquis de base Throwduino pour l’IDE. Il a collé ci-dessous et également joint.

Edit - il y a une erreur dans le code :

seuil = (total >> 5) ; la valeur seuil de point (fracture totale de 128) moyen.

devrait probablement être :

seuil = (total >> 7) ; la valeur seuil de point (fracture totale de 128) moyen.

Il a travaillé pour moi car c’était, mais cela pourrait causer des problèmes avec la détection de lumière.  Je vais vérifier et corriger si nécessaire.

Si vous souhaitez modifier la séquence-flash de votre thowie alors maintenant est le temps.  Assurez-vous que votre code s’adaptera dans la mémoire de la puce que vous avez.  Il n’est pas susceptible d’être un problème pour quoi que ce soit plus grand qu’un ATtiny25.  Le croquis ci-dessous ne prend pas plus de 1K.  Le code ci-dessous affiche le bien connu "1-4-3" séquence flash.  Ceci, bien sûr, peut-être pas votre truc, tellement hack-loin.

La séquence flash se tient dans le tableau et détient tout simplement une liste de numéros de flash.  Ceux-ci sont joués avec une courte pause entre chacun, suivis par une pause de 2 secondes avant de répéter.  Par exemple, pour :

Le throwie se met à clignoter une fois, mettre en pause, flash 4 fois, mettre en pause, clignoter 3 fois, pause de 2 secondes et répéter.

Une fois l’esquisse est prêt, sélectionnez ATtiny85 1Mz (ou n’importe quel ATtiny vous utilisez) dans la liste de conseils dans l’IDE.  Si vous ne sélectionnez pas le bon conseil, vous pouvez obtenir une erreur de compilation (XXXX pas définie dans cette étendue).  Si vous obtenez ceci, vérifiez que vous avez sélectionné un ATtinyX5.

Appuyez sur « upload » dans l’IDE.  Par défaut, le Arduino Tiny utilise l’ISP de l’Arduino.  Vous devriez voir le pin13 conduit sur votre scintillement Arduino comme l’esquisse est transférée.

Comment fonctionne l’esquisse ?

Nous avons quelques fonctions définies qui font des choses utiles et vous pouvez utiliser dans le piratage :

flash(byte) Sub - émet les clignotements de la LED "byte".
int lightLevel() - retourne un entier contenant la mesure de niveau la lumière de la LED contre la 2.56v Réf interne.
Sub setup_watchdog(int) - définit le temporisateur à valeur "int". Il y a 10 graduations allant de 0 à 9 correspondant à 16, 32, 64, 128, 250, 500, 1000, 2000, 4000 et 8000 ms.
system_sleep() Sub - met le système à dormir pendant le délai prévu dans le programme d’installation de chien de garde.

Pour commencer, nous pousser à quelques registres pour configurer les choses et de minimiser le gaspillage d’énergie.  Puis dans la configuration, nous clignoter 3 fois et prenons 148 mesures de l’intensité lumineuse.  Nous jeter les 20 premiers et les 128 restant en moyenne.  Cela définit le seuil de laquelle nous jugerons quand il fait sombre.  Nous clignoter la LED ce nombre seuil avant exerçant son activité.  Il s’agit plus pour le débogage que quelque chose d’utile.

Dans la boucle principale nous mesurer le niveau de lumière et comparer à la valeur de seuil.  Si son inférieur à la valeur puis nous clignoter la LED par notre modèle prédéterminé.  Si le niveau de luminosité est élevé alors que nous dormons pendant 8 secondes (la plus longue que nous pouvons) avant de tester à nouveau.

Merci à InsideGadgets pour cet article qui faisait le point de départ pour le code de sommeil.  Il est à noter si vous utilisez ce que vous devez réinitialiser l’indicateur d’activer interruption chaque fois que la WDT arrive à expiration ou la puce se réinitialisera la prochaine fois.

Sketch (cela devrait compiler à environ 1262 octets) :

Throwduino base
UGI 2012
Licence MIT
Écrit pour fonctionner sur ATtiny25/45/85 en utilisant Arduino Tiny core - http://code.google.com/p/arduino-tiny/
Ne compilera pas pour autres Arduinos (ATMega168, ATMega328 etc.)
Assurez-vous de que sélectionner le bon conseil avant de compiler.

Ref :
Broches de l’ADC :
ADC1 = PB2
ADC2 = PB4
ADC3 = PB3

Si vous voulez juste changer la séquence de clignotement, faites-le ici.
valeur par défaut est :
//
const byte flashSeq [3] = {1,4,3} ;  Séquence de clignotement
//
Cela donne 1 flash, pause, quatre clignotements, pause, trois clignotements, pause.
Si vous voulez juste une pause plus longue, utilisez 0 pour chaque 500ms.
Après la séquence, nous attendons pendant 2 secondes avant de répéter.

const byte flashSeq [3] = {1,4,3} ;  Séquence de clignotement.  Modifier cela.

le nombre d’entrées dans la séquence de clignotement.
const byte seqLength = sizeof(flashSeq) ;

Maintenant nous allons faire un throwie pour cette séquence...

const int LEDpin = 4 ; Bien que ce soit dans une constante, il y a beaucoup d’accès direct au port
Je n’essaierais pas de changer cela sans aller throu' la totalité du code.

unsigned int seuil = 10 ; Nous allons définir cela correctement pendant l’installation

Cela met en place des bibliothèques et des définitions utilisées avec la fonction Sleep
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef DRAS
#define DRAS (sfr, bit) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE(sfr) | = _BV(bit))
#endif

ISR(WDT_vect) {WDTCR| = B01000000;} / / reset Watchdog Timer Interrupt mode chaque fois.

Déconner avec certains registres à éteindre trucs et définissez des références.
void setup() {}
ADCSRB & = B10111111 ; désactiver comparitor
ACSR | = B10000000 ; Mettez hors tension comparitor
ADCSRA | = B10000000; / / mettez le ADC
DDRB & = B11100000 ; Mettez les à l’entrée
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B11110111 ; Set PB3 faible - il s’agissait pour la phase de test.  Peut sans doute être supprimé maintenant.
PRR & = B11111110 ; claire ADC disable bit en puissance réduction Reg
analogReference(6) ; 2.56v interne de référence avec aucune déviation - INTERNAL2v56NB-

Montrer que nous sommes éveillés :
Flash(3) ;  Trois clignotements - nous sommes en cours d’exécution.


Définissez le seuil de détection lumineuse durant les premières 40 secondes.
Nous prenons 148 Mensurations, bin les 20 premiers et puis moyenne la prochaine 128.
total unsigned int = 0 ;
pour (rep octets = 0; rep < 148 ; rep ++) {}
int value=lightLevel() ;
int valeur = 10 ;
if(REP>19) {}
valeur total += ; Teyssandier au total 128 lectures
}
Flash(value) ;

DDRB & = B11100000 ; Mettez les à l’entrée
setup_watchdog(4) ;
system_sleep(); / / sommeil deuxième trimestre
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B1110000 ; Tout bas
}
seuil = (total >> 7) ; la valeur seuil de point (fracture totale de 128) moyen.

Flash(THRESHOLD) ; C’est principalement pour des fins de débogage.
}

Boucle principale
On mesure le niveau de lumière.  S’il est faible alors nous flash notre séquence puis le sommeil pendant 2 secondes.
Si la lumière niveau élevé, nous dormons pour 8 s.
void loop() {}
analogReference(6) ; 2.56v interne de référence avec aucune dérivation

Mesurer le niveau de lumière et si elle est assez basse, afficher notre séquence flash
Si (lightLevel() < seuil) {}
pour (séquence d’octets = 0; séquence < seqLength ; séquence ++)
Flash(flashSeq[Sequence]) ;
Si nous étions clignotant, nous dormons maintenant pendant 2 secondes
DDRB & = B11100000 ; Mettez les à l’entrée
setup_watchdog(7) ;
system_sleep(); / / sommeil pendant deux secondes
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B11110111 ; PB3 faible.
}
else {}
Si nous n’étions pas clignote puis nous dormons pour 8 s
DDRB & = B11100000 ; Mettez les à l’entrée
setup_watchdog(9) ;
system_sleep(); / / sommeil pendant deux secondes
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B11110111 ; PB3 faible.
}

} / / fin de boucle principale

Mesurer le niveau de luminosité en regardant la tension générée par LED connecté à D4 (A2) en broche 3 de la puce.
Sortie et faible pour commencer à s’acquitter de toute accumulation de charge - ne sais pas si nous en avons besoin
int lightLevel() {}
pinMode (LEDpin, sortie) ;
digitalWrite (LEDpin, basse) ;
delayMicroseconds(50) ;
pinMode (entrée, LEDpin) ;
delayMicroseconds(100) ; Laissez-le se stabiliser en tant qu’entrée à nouveau
unsigned int valeur = analogRead(A2) ;
retourne la valeur ;
}

Flash de routine - 70ms, 250 ms désactivé
Répéter certain nombre de fois et ensuite une pause 500ms
void flash(byte No) {}
pinMode (LEDpin, sortie) ;

if (!. Non) {/ / si nous recevons un zéro, juste faire une pause.
DDRB & = B11100000 ; Mettez les à l’entrée
setup_watchdog(5) ;
system_sleep(); / / sommeil pendant 500 ms
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B11110111 ; PB3 faible.
}

Si nous avions un nombre différent de zéro, des bouffées de chaleur, nous les ferons maintenant
pour (rep octets = 0; rep < non ; rep ++) {}
DDRB| = B00011010 ; La valeur 1, 3 et 4 en sortie
PORTB & = B11110111 ; PB3 faible.
PORTB| = B00010000 ; PB4 haute
digitalWrite (LEDpin, élevé) ;
Delay(70) ;
PORTB & = B11101111 ; PB4 faible.
DDRB & = B11100000 ; Mettez les à l’entrée
digitalWrite(LEDpin,LOW) ;
setup_watchdog(4) ; WDT 3 = 128MS
system_sleep() ;
}

Faire une pause (sleep)
DDRB & = B11100000 ; Mettez les à l’entrée
setup_watchdog(5) ; WDT 5 = 500MS
system_sleep(); / / sommeil
DDRB| = B00011010 ; La valeur 1 et 3 en sortie
PORTB & = B11110111 ; PB3 faible.
}

Réglage timer chien de garde
C’est spécifique à la ATTiny85 (+ tiny45, & tiny25) et ne sera pas compiler pour ATMega328 etc..
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250 ms, 5 = 500ms
6 = 1 sec, 7 = 2 sec, 8 = 4 s, 9 = 8sec
void setup_watchdog (int période) {}

valeur d’octet ;
Si période (période > 9) = 9 ;
valeur = période & B111 ;
Si value| (période > 7) = (1 << 5) ;
value| = (1 << WDCE) ;

MCUSR & = ~ (1 << WDRF) ;
démarrer le cycle d’horloge-4-séquence chronométrée
WDTCR | = (1 << WDCE) | (1 << WDE) ;
Définissez la nouvelle valeur de délai d’attente de chien de garde
WDTCR = valeur ;
WDTCR | = _BV(WDIE) ;
}

mettre le système en état de veille
système se réveille wtchdog est expiré
void system_sleep() {}
CBI(ADCSRA,Aden) ;                    commutateur analogique/Digitalconverter OFF

set_sleep_mode(SLEEP_MODE_PWR_DOWN) ; mode "veille" est défini ici
sleep_enable() ;

sleep_mode() ;                        Système dort ici

sleep_disable() ;                     Système continue l’exécution ici watchdog expiré
SBI(ADCSRA,Aden) ;                    commutateur analogique-Digitalconverter ON
PRR & = B11111110 ; claire ADC disable bit en puissance réduction Reg
}

Articles Liés

Clignotant le Code Morse

Clignotant le Code Morse

Il s'agit d'un projet qui a été créé durant une nuit de construire Instructables avec RaspberryPi et Adafruit.Ce projet utilise Python, RaspberryPi, une LEDet le Kit de cordonnier Adafruit Pi.Le code Morse utilisé tente de cligner des yeux « HELLO WO
Programme un chapelet de lumières de Noël à clignoter le code morse avec Arduino & Snap Circuits

Programme un chapelet de lumières de Noël à clignoter le code morse avec Arduino & Snap Circuits

c'est un projet de mon fils Dylan (9) et j'ai mis ensemble en utilisant une platine Arduino, un ensemble de Circuit Snap et un chapelet de lumières de Noël.Ce que vous devez :Un Arduino : Un Arduino est un ordinateur sur un circuit unique que vous po
Lilypad Arduino pull de Noël avec musique et lumières clignotant

Lilypad Arduino pull de Noël avec musique et lumières clignotant

je prends un cours de ce semestre appelé la jeunesse et la technologie dans les bibliothèques, dans lequel j'ai été chargé de concevoir quelque chose à l'aide d'une carte de développement Lilypad.  Dans les étapes suivantes je vous guidera dans Comme
Lumière clignotante

Lumière clignotante

lorsque http://lhc.net.br a été approché d'avoir une électronique construire nuit je suis immédiatement venu avec un projet : une led qui cligna des yeux LHC en code morse. N'ayant jamais construit un circuit dans ma vie j'ai demandé l'aide de mes co
Puissance LED - lumière plus simple avec le circuit de courant constant

Puissance LED - lumière plus simple avec le circuit de courant constant

Voici un circuit de pilote de LED (1$) très simple et peu coûteux. Le circuit est une « source de courant constant », ce qui signifie qu'elle conserve la luminosité LED constant n'importe quelle alimentation vous utilisez ou des conditions ambiantes
Chemin de fer de LED clignotants fait avec minuterie 555

Chemin de fer de LED clignotants fait avec minuterie 555

Hé là, c'est un petit circuit que j'ai mis en place avec une minuterie 555, quelques diodes, des résistances et des condensateurs.Check it out, générez-le et me dire si cela fonctionne.Merci !Etape 1: Obtenir les pièces!! 1 Un mot d'avertissement :Ce
Petit solaire rechargeable led lumière instantanée avec aucun panneau solaire/cellule. (utilise la led pour recharger!)

Petit solaire rechargeable led lumière instantanée avec aucun panneau solaire/cellule. (utilise la led pour recharger!)

Leds, nous voyons partout. que font-ils ? ils s'allument. Eh bien oui, c'est leur but principal, mais pas beaucoup de gens savent que, si vous les exposez aux rayons du soleil, elle peutproduire une petite quantité de tension. Sorte de manière, il pe
LabVIEW tutoriels - créer un clignotant LED avec différents On/Off fois

LabVIEW tutoriels - créer un clignotant LED avec différents On/Off fois

Le précédent instructable ici, vous avez vu sur la façon de créer une LED clignotante aurait même ON/OFF fois. Dans ce tutoriel, vous pouvez voir quant à comment vous pouvez créer qu'un clignotant LED avec différents ON/OFF fois.
Un traducteur de Code Morse (lumière-> texte & texte-> lumière)

Un traducteur de Code Morse (lumière-> texte & texte-> lumière)

C'est pour mon entrée dans le concours de l'automatisation, je voulais essayer quelque chose qui a un peu de code dedans.le projet est divisé en deux États principaux (lumière lire et écrire lumière) qui sont transitionable par un bouton1-conversion
LED lumière clignotante avec Arduino

LED lumière clignotante avec Arduino

vous devez d'abord installer Arduino sur votre ordinateur et avoir le starter kit.Étape 1: matériaux Arduino UNOCordon USBFilResistance 300 ohmLumière LEDCarte de prototypageÉtape 2: l'Assemblée Branchez la clé USB à votre ordinateurObtenir la carte
Courier Bag lumière clignotante

Courier Bag lumière clignotante

cette lumière LED simple peut remplacer les étiquettes volantes réflecteur que tout le monde perd de leur sac de messager timbuk 2.Il utilise un timer 555 à clignoter alternativement chaque ensemble de 9 LEDs, pour 18 clignotant LED de la bonté.Étape
Circuit de détection de lumière micro

Circuit de détection de lumière micro

ce petit circuit 10 x 10 mm de hauteur et est probablement l'un de la lumière plus petite et le plus élémentaire, détecter les circuits autour.Vous pouvez utiliser le circuit pour détecter les niveaux de lumière et activer par exemple une LED s'allum
$0,1 dusk to Dawn commuter faible coût simple crépuscule à l’aube interrupteur détection sombre lumière automatique feux

$0,1 dusk to Dawn commuter faible coût simple crépuscule à l’aube interrupteur détection sombre lumière automatique feux

Allumer votre éclairage de sécurité ou l'éclairage de tâche et éteindre automatiquement chaque nuit avec ce circuit. Il est facile à installer.Étape 1: Liste des composants1. TRIAC BT136 ou BTA162. LDR3. 104 (0.1uF) condensateur4. 1K Ohms résistance
Artemis & Apollo : Dancing with Arduino et détection de lumière

Artemis & Apollo : Dancing with Arduino et détection de lumière

selon la mythologie grecque, Artémis et Apollon ont été immortel jumeaux nés il y a sur un îlot rocheux en mer Egée. Artemis, sa chasse bow pieds posées et flottes rembourrage la couverture morte, régnèrent en tant que déesse de la lune. Son frère ju