Kruger's Zippo Remote (12 / 15 steg)
Steg 12: Kod och krets
Bifogas detta steg är filer som hör till RX-delen av detta projekt. Du måste använda en ATTiny85 eftersom det är det minsta chip som har timers för att stödja VirtualWire biblioteket.
Huvudsteg:
- Bränna rätt säkringarna på chipet. Du kommer att köra på 8 MHz
- Flytta VirtualWire till mappen Arduino bibliotek
- Ladda upp koden
- Undersöka den skärbräda/schematiskt så du vet vad du hantering.
Om du behöver information om programmering i ATTinies med Arduino, kolla här .
DETALJER OM KODEN
Om man tittar tillbaka på steg 8, förklarade jag varför en enkel kod inte fungerade.
Det fanns en massa oväsen, ATTiny45 fungerar inte, osv.
Andra att dessa problem, klockhastighet måste vara identisk med sändaren (8MHz).
Också, när VirtualWire används på ett ATTiny85, timers så upptas som fungerar som millis(); eller delay(); kan inte kallas, eller annat chip kommer att krascha (det hände mig)
För att motverka det, jag var tvungen att använda ett annat bibliotek för förseningar.
Vad denna kod i grunden gör är att kontrollera om längden du brev och meddelande tas emot, då aktivera en pin villkorligt. Mottagaren kommer inte att aktiveras av herrelösa buller nu.
/ * TSJWang 8/19/2014
Mottagare
Använd en ATTiny85 45 fungerar inte med VirtualWire
Säkringar:
-U lfuse:w:0xe2:m
-U hfuse:w:0xd4:m
-U efuse:w:0xff:m
*/
#include < VirtualWire.h > / / bibliotek behövs för kommunikation
#include < util/delay.h >
VirtualWire gillar inte det när du använder delay() eller millis(), så vi behöver detta bibliotek.
CONST int activePin = 2; Anslut LED och transistor till detta stift
CONST int RXpin = 0; PIN ansluten till RF modul
void setup()
{
pinMode (activePin, produktionen);
vw_set_ptt_inverted(true); normal inställning grejer
vw_setup(4800); 4800 bps
vw_set_rx_pin(RXpin);
vw_rx_start();
digitalWrite (activePin, låg); för säkerhets skull
}
void loop()
{
uint8_t buf [VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
om (vw_get_message (buf, och buflen))
{
om (buf [0] == 97) //ASCII tecknet "a"
{
digitalWrite (activePin, hög);
_delay_ms(125); detta försenar faktiskt 1000 sekunder.
digitalWrite (activePin, låg);
}
annat
{
digitalWrite (activePin, låg);
}
}
annat
{
digitalWrite (activePin, låg);
}
}
DETALJER OM KRETS
Denna krets är också ganska enkel.
- Återställ [1] är ansluten till en 1 k resistor, ansluten till Vcc
- A3 och A2 [2 och 3] inte är anslutna till något
- GND är ansluten till GND
- 0 [5] ansluten till DATA på RF modulen
- RF-modul är ansluten till Vcc och GND på lämpligt sätt.
- NC pin är bra, inte ansluten
- Antenn pin är ansluten till en 6.8' lång bit tråd
- Endast en Vcc eller GND pin måste anslutas. Andra kan lämnas ensam
- 1 [6] är inte ansluten till något. Jag jordad det för bra krets praxis som kommer in när det gäller radio kontrollerade kretsar
- 2 [7] är ansluten till
- 330 ohm motstånd till en ledde till GND
- 2N2222 bas pin
- 2n2222 samlaren är ansluten till Vcc
Om du vill, du kunde ha 2n2222 jordning reläet i stället för att driva. I detta fall gör det inte mycket av en skillnad - 2n2222 sändaren är ansluten till ena änden av reläspole
- Den andra änden av reläspole är jordad
- Relay switch stiften är anslutna till en skruv terminal
- 2n2222 samlaren är ansluten till Vcc
- VCC är ansluten till Vcc
- 330 ohm resistor är ansluten till Vcc och en grön LED
Vad ska hända när jag slår på kretsen är
Den gröna lysdioden ska starta omedelbart.
Resten av kretsen gör ingenting. När den TX sidan överföra ett "a", meddelandet tas emot, och relä och röd LED kommer att tändas i 4 sekunder. Efter det, om inte sänder TX, stänga relä och röda lysdioden av. Ingenting skulle hända om TX inte sänder.