Stap 3: Programma, het bord
Je moet een ICSP programmeur voor het programmeren van de Raad van bestuur en een FTDI seriële breakout board. Voor de ICSP programmeren, u kunt gebruik maken van een andere Arduino, maar ik adviseren de USBTinyISP van Adafruit. De FTDI breakout board is handig als u schrijven wilt/debug uw eigen schetsen, maar kan worden weggelaten als u zijn slechts het gebruik van mijn code.
Als u wenst te branden schetsen zonder rechte van ICSP foutopsporing, kunt u deze boards.txt descriptor, meestal ontleend aan de Arduino Pro Mini, die deze hardware lijkt op:
atmega328t.name=ATMega 328 (8 MHz) - USBTinyISP
atmega328t.upload.using=Arduino:usbtinyisp atmega328t.upload.maximum_size=32768 atmega328t.upload.speed=57600
atmega328t.bootloader.low_fuses=0xFF atmega328t.bootloader.high_fuses=0xDA atmega328t.bootloader.extended_fuses=0x05 atmega328t.bootloader.path=atmega atmega328t.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex atmega328t.bootloader.unlock_bits=0x3F atmega328t.bootloader.lock_bits=0x0F
atmega328t.build.MCU=atmega328p atmega328t.build.f_cpu=8000000L atmega328t.build.core=arduino atmega328t.build.variant=eightanaloginputs
Als u wenst te programmeren van een schets met behulp van de seriële poort, moet u de bootloader via ICSP branden. Vervolgens kunt u deze boards.txt-descriptor met een FTDI breakout board. Ik adviseer van Sparkfun; Zorg ervoor dat het brengt DTR als de eerste pin te voorzien in automatische reset.
atmega328s.name=ATMega 328 (8 MHz) - Serial
atmega328s.upload.Protocol=Arduino atmega328s.upload.maximum_size=30720 atmega328s.upload.speed=57600
atmega328s.bootloader.low_fuses=0xFF atmega328s.bootloader.high_fuses=0xDA atmega328s.bootloader.extended_fuses=0x05 atmega328s.bootloader.path=atmega atmega328s.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex atmega328s.bootloader.unlock_bits=0x3F atmega328s.bootloader.lock_bits=0x0F
atmega328s.build.MCU=atmega328p atmega328s.build.f_cpu=8000000L atmega328s.build.core=arduino atmega328s.build.variant=eightanaloginputs
Als u wenst, kunt u uitvoeren op 16 MHz in plaats van 8 MHz met behulp van een verschillende resonator en selecteren van de Arduino Pro Mini 5V 16 MHz 328 P bestuur.
De schets op github gebruikt de bibliotheken NewPing en JeeLib, om de interface met de sensor en energiebesparende slaapstand inschakelen. Ik vond dat de SR04 11 trekt mA gemeten bij de accu wanneer "nutteloos", dus het moet worden afgesloten tussen variërend van pogingen. Er is een n-kanaal MOSFET met een pulldown weerstand en een poort huidige beperkende weerstand fungeert als een schakelaar van de low-kant, om de sensor wanneer niet actief uitgeschakeld. Sommige speciale aandacht dient te worden gehouden wanneer het schakelen van de sensor; u moet verbinding verbreken met de trigger-pin door het te plaatsen als input, of het zal vinden doorheen en blijven verbruiken energie. Wanneer die terug online komen, blijft de echo-pin hoog wat resulteert in een korte lezen; een offer ping na een korte vertraging lijkt opnieuw instellen van de sensor naar een normale toestand. Er is ook een spoor aan de batterij rechtstreeks aansluiten op een analoge pin, voor het meten van de accuspanning. De schets rapporten van de spanning met behulp van een reeks van rood en groen knippert tijdens geparkeerde modus, en gaat ook naar een lage batterij-modus als de spanning daalt tot onder 2V, rood knipperen totdat het sterft.
De schets wordt momenteel gedefinieerd de rood/geel/groene trigger afstanden op 40, 150 en 500 cm. Bij het gele bereik, zal het knipperen tussen 20 millihertz tot 1 Hz met behulp van timer interrupts, het verstrekken van een visuele indicatie van hoe dicht u op rood krijgt. Deze waarden kunnen worden gewijzigd door aanpassing van de constanten die bij de bovenkant van het dossier.
De schets kan eenvoudig worden aangepast om te werken met een regelmatige Arduino, maar vervolgens niet het zeer laag energieverbruik.