Stap 12: Code en circuit
Gekoppeld aan deze stap zijn bestanden die betrekking hebben op de RX-gedeelte van dit project. Want het is de kleinste chip die de timers heeft ter ondersteuning van de VirtualWire-bibliotheek, moet u een ATTiny85 gebruiken.
Belangrijkste stappen:
- Branden de juiste zekeringen op de chip. U zal worden uitgevoerd op 8 MHz
- VirtualWire naar de Arduino Bibliotheken map verplaatsen
- Uploaden van de code
- Onderzoeken het breadboard/schema, zodat u weet wat u aan het verwerken bent.
Als u informatie over het programmeren van ATTinies met Arduino nodig, Controleer Dit .
DETAILS OVER DE CODE
Als je kijkt terug op stap 8, ik heb uitgelegd waarom een eenvoudige code werkte niet.
Er was veel lawaai, de ATTiny45 werkt niet, enzovoort.
Andere dat die problemen, de kloksnelheid identiek zijn aan de zender (8MHz moet).
Ook, wanneer VirtualWire op een ATTiny85 wordt gebruikt, de timers zijn dus bezet dat functioneert als millis(); of delay(); kan niet worden genoemd, of anders de chip zal verpletteren (het gebeurde aan me)
Om de teller dat, moest ik gebruik maken van een andere bibliotheek voor vertragingen.
Wat deze code eigenlijk doet, is controleren of de juiste lengte van de brief en het bericht is ontvangen, activeer dan een pin voorwaardelijk. De ontvanger zal niet worden geactiveerd door verdwaalde ruis nu.
/*TSJWang 8/19/2014 Receiver Use an ATTiny85 45 will not work with VirtualWire Fuses: -U lfuse:w:0xe2:m -U hfuse:w:0xd4:m -U efuse:w:0xff:m */ #include <VirtualWire.h> // Library needed for communication #include <util/delay.h> // VirtualWire doesn't like it when you use delay() or millis(), so we need this library. const int activePin = 2; // Connect LED and transistor to this pin const int RXpin = 0; // Pin connected to RF module void setup() { pinMode(activePin, OUTPUT); vw_set_ptt_inverted(true); // normal setup stuff vw_setup(4800); // 4800 bps vw_set_rx_pin(RXpin); vw_rx_start(); digitalWrite(activePin, LOW); // for safety sake } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { if (buf[0] == 97) //ASCII character 'a' { digitalWrite(activePin, HIGH); _delay_ms(125); //this actually delays for 1000 seconds. digitalWrite(activePin, LOW); } else { digitalWrite(activePin, LOW); } } else { digitalWrite(activePin, LOW); } }
DETAILS OVER CIRCUIT
Dit circuit is ook vrij eenvoudig.
- RESET [1] is verbonden met een 1 k weerstand, aangesloten op Vcc
- A3 en A2 [2 en 3] zijn niet verbonden met om het even wat
- GND is GND aangesloten
- 0 [5] is gekoppeld aan gegevens op de RF-module
- De RF-module is op de juiste wijze aangesloten op Vcc en GND.
- NC pin is goed, niet verbonden
- Pin van de antenne is aangesloten op een 6.8' lang stuk draad
- Slechts één Vcc of GND pin moet worden aangesloten. Anderen kunnen zijn verlaten alleen
- 1 [6] is niet verbonden met om het even wat. Ik sloeg het voor goede circuit-praktijk die wordt geleverd in als het gaat om radio gecontroleerde schakelingen
- 2 [7] is aangesloten op
- de weerstand van 330 ohm op een LED met GND
- 2N2222 basis pin
- De 2n2222 verzamelaar is aangesloten op Vcc
Als u wilt, u zou kunnen hebben de 2n2222 aarding van de estafette in plaats van stroom wordt voorzien. In dit geval maakt het niet veel van een verschil - De 2n2222 emitter is aangesloten op één uiteinde van de relais spoel
- Het andere uiteinde van de relais spoel is geaard
- De relay switch pinnen zijn aangesloten op een kroonsteen
- De 2n2222 verzamelaar is aangesloten op Vcc
- VCC is aangesloten op Vcc
- weerstand van 330 ohm is aangesloten op Vcc en op een groene LED
Wat er moet gebeuren wanneer ik op het circuit overschakelen is
De groene LED moet overschakelen op onmiddellijk.
De rest van het circuit, gebeurt er niets. Als de TX kant verzenden is een "a", het bericht zal worden ontvangen, en de relais en rode LED zal worden ingeschakeld voor ongeveer 4 seconden. Na dat, als de TX niet overbrengen is, uitschakelen de relais en rode LED. Niets moet gebeuren als de TX is niet verzenden.