BLE Light Switch with Feather nrf52840 and Crickit

Similar documents
Trash Panda. Created by Dano Wall. Last updated on :30:46 AM UTC

Stumble-Bot. Created by Dano Wall. Last updated on :04:06 AM UTC

Feather Weather Lamp. Created by Ruiz Brothers. Last updated on :54:26 PM UTC

Slider Crank Mechanism -- from Cardboard and Craft Sticks

Portable Apple Watch Charger

3D Printed Google AIY Voice Kit

Crickit Dancing Marionette Kit Created by Dano Wall. Last updated on :03:11 PM UTC

PyPortal View Master Created by Ruiz Brothers. Last updated on :51:28 AM UTC

Crickit Carnival Bumper Bot

NeoPixel Bike Light. Created by Ruiz Brothers. Last updated on :43:46 PM UTC

Neon LED Signs. Created by John Park. Last updated on :11:09 PM UTC

Crawling Baby Sea Turtle Robot

Android GBoard Morse Code Control with Circuit Playground Express

Bluetooth Controlled NeoPixel Headphones

Pushrod Garage. Created by John Park. Last updated on :07:30 PM UTC

3D Printed Case for Adafruit Feather

Milk Jug Glow Skull. Created by John Park. Last updated on :28:36 PM UTC

Ping Pong Ball Launcher

Adafruit VL53L0X Time of Flight Micro-LIDAR Distance Sensor Breakout

PyPortal NeoPixel Color Picker Created by Kattni Rembor. Last updated on :42:41 PM UTC

Paper Airplane Launcher

Crickit Powered Mini Chair Swing Ride!

Circuit Playground Yoyo

Webcam Cover-Up Lego brick with Adabot Mini Fig

7 Portable Multitouch Raspberry Pi Tablet

LED Eyes. Created by Ruiz Brothers. Last updated on :50:55 AM UTC

Joy Featherwing. Created by Dean Miller. Last updated on :03:07 PM UTC

CircuitPython Media Dial

The Scream: Interactive Screaming Painting

Snake Charmer Box. Created by Dano Wall. Last updated on :07:25 PM UTC

Circuit Playground Express Head-Tilt Ears

Bunny Ears with MakeCode

Solder Dispenser Adabot Head

Adabot Operation Game

Trellis 3D Printed Enclosure

3D Printed 20w Amplifier Box

3D Printed Camera Tripod Adapter for Telescope

Crawling Animatronic Hand

Adafruit DRV2605 Haptic Controller Breakout

Zelda Thunder Helm. Created by Ruiz Brothers. Last updated on :46:52 PM UTC

Adafruit Capacitive Touch Sensor Breakouts

Guardian Shield+ Zelda Breath of the Wild

Hammer Time Mini Golf Hazard with Crickit

Boomy The Boombox. Created by Ruiz Brothers. Last updated on :52:13 PM UTC

Sino:bit with Arduino

HalloWing Jump Scare Trap

Clockwork Goggles. Created by John Park. Last updated on :03:10 PM UTC

Mini Golf Course with Circuit Playground and Crickit

Adafruit DRV2605 Haptic Controller Breakout

Reindeer Mask with Animated Eyes

Simple LED Unicorn Horn

'Sup Brows. Created by Kate Hartman. Last updated on :52:04 PM UTC

Adafruit APDS9960 breakout

Adafruit MCP9808 Precision I2C Temperature Sensor Guide

Fiddy - the FTDI Clip

Circuit Playground Combadge

7" Portable HDMI Monitor

Desktop Fume Extractor

Spinning Disc Step Sequencer

Adafruit MMA8451 Accelerometer Breakout

Adafruit Si7021 Temperature + Humidity Sensor

Datalogging Hat with FLORA BLE

FPV Mini Display. Created by Ruiz Brothers. Last updated on :00:18 PM UTC

Adafruit MMA8451 Accelerometer Breakout

Prophet 600 GliGli mod

i2c/spi LCD Backpack Created by lady ada Last updated on :11:04 PM UTC

Crickit Powered Holiday Diorama

3D Printed 20w Amplifier Box

3D Printing Guide: MakerBot Replicator 2X

Adafruit PowerBoost 500 Shield

Mystical LED Halloween Hood

MCP Bit DAC Tutorial

3D Printed Camera LED Ring

3D Printed LED Goggles

UFO Flying Saucer with Circuit Playground Express

1. Charging. 2. In-app Setup. 3. Physical Installation. 4. Features. 5. Troubleshooting. Home Security Begins at the Front Door.

Adafruit GPS Hat in Windows IoT Core

Adafruit 7-Segment LED FeatherWings

Trinket NeoPixel LED Longboard

Naughty or Nice Machine

Solar Boost Bag. Created by Becky Stern. Last updated on :44:55 PM UTC

Fiddy - the FTDI Clip

Adafruit Prototyping Pi Plate. Created by Ladyada

New Years Eve Ball Drop Created by Ruiz Brothers. Last updated on :22:24 PM UTC

Adafruit GPIO Expander Bonnet for Raspberry Pi Created by Kattni Rembor. Last updated on :12:47 PM UTC

Mad Science Test Tube Rack

Bluetooth LE MIDI Controller

DIY Circuit Playground Shields

FeatherWing Proto, Doubler and Tripler

NeoPixie Dust Bag with Circuit Playground Express

Adafruit 8x16 LED Matrix FeatherWing

Adafruit AM2320 Sensor

Data Logging with Feather and CircuitPython

Magnetic shoelaces. Created by Ruiz Brothers. Last updated on :31:02 PM UTC

Adafruit PCF8523 Real Time Clock

No-Sew LED Wristband. Created by Kathy Ceceri. Last updated on :23:40 PM UTC

Adafruit LED Sequins. Created by Becky Stern. Last updated on :02:00 AM UTC

Mini Mac Pi. Created by Ruiz Brothers. Last updated on :43:27 PM UTC

Tent Lantern. Created by Timothy Reese. Last updated on :17:25 AM UTC

Adafruit Mini TFT " 160x80

Transcription:

BLE Light Switch with Feather nrf52840 and Crickit Created by John Park Last updated on 2019-02-15 07:06:19 PM UTC

Guide Contents Guide Contents Overview Parts Adafruit Feather nrf52840 Express Adafruit CRICKIT FeatherWing for any Feather Micro servo 5V 2A (2000mA) switching power supply - UL Listed Black Nylon Screw and Stand-off Set M2.5 Thread Materials and Tools Build the Switch Bracket Download STL Model Files Slicing in CURA Prep the Feather and Crickit Threaded Inserts Mount the Crickit into the Bracket Servo Arm Servo Connection Code with CircuitPython Feather and Crickit Prep Libraries CircuitPython Code How the Program Works Servo Motion Control the Light Switch with the Bluefruit LE Connect App Download the App Connect to Feather Troubleshooting Device Menu Controller Menu Move the Servo Arm Mount and Use the Remote Switch Mounting Cover 2 3 3 3 4 4 4 4 5 6 6 6 7 8 10 11 14 15 15 15 16 17 17 17 17 18 18 18 19 20 22 23 25 Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 2 of 26

Overview Build your own Bluetooth, remote-controlled robotic light switch to turn on and off the lights! Using CircuitPython running on the Feather nrf52840 Express and Crickit FeatherWing to flip the switch with a servo motor, you can avoid all of the complexities and dangers of high voltage mains wiring! The 3D printed actuator, mount, and case makes it reliable and tidy. And the Adafruit Bluefruit app running on your ios or Android device makes it fun and easy! Parts Adafruit Feather nrf52840 Express $24.95 OUT OF STOCK OUT OF STOCK Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 3 of 26

Adafruit CRICKIT FeatherWing for any Feather $29.95 IN STOCK ADD TO CART Micro servo $5.95 IN STOCK ADD TO CART 5V 2A (2000mA) switching power supply - UL Listed $7.95 IN STOCK ADD TO CART Black Nylon Screw and Stand-off Set M2.5 Thread $16.95 IN STOCK ADD TO CART Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 4 of 26

Materials and Tools In addition to the parts above you'll also need: 8 ea. Heat-set, M2.5 x 0.45mm threaded inserts (https://adafru.it/dr9) Soldering iron Small Philips screwdriver Slotted screwdriver 3D printer and PLA filament Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 5 of 26

Build the Switch Bracket The 3D printed parts are a mashup of a remix! I started with this Smart light switch with a servo (https://adafru.it/dra) by Thingiverse user pulsar123 (https://adafru.it/drb) (which is a remix of Servo Switch Plate Mount (https://adafru.it/drc) by carjo3000 (https://adafru.it/drd)). I combined it with the excellent Mount for Crickit (https://adafru.it/bxu) by the Ruiz Brothers. I also modeled a cover for the Cricket that can be screwed in place once everything is set up. Download STL Model Files You'll need to download these three STL files to 3D print the mount, servo arm, and cover. Click the button below to download the files. https://adafru.it/drf https://adafru.it/drf Slicing in CURA These settings were used to print the three pieces (not all at once as shown here!): 0.4mm Nozzle 0.2mm Layer Height 0.38 Line Width 2 Wall line count 70mm/s printing speed 10% infill Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 6 of 26

Print the three parts and then get ready to add the electronics! Prep the Feather and Crickit Next, solder the plain male header pins into place on the Feather so that it can be mounted onto the Crickit. You can follow this guide for instructions (https://adafru.it/dri). Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 7 of 26

Then, mount the Feather onto the Crickit's header sockets. Threaded Inserts In order to screw the Crickit in place, as well as the standoffs for the cover, we'll add heat-set threaded inserts to the bracket. Place the tapered smaller end of an insert into an opening and then use the soldering iron to heat and press the brass insert into place. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 8 of 26

Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 9 of 26

Mount the Crickit into the Bracket Use four of the M2.5 x 6mm screws in to fasten the Crickit to the top two and bottom two threaded inserts. Then, screw in four stacks of paired M-F standoffs. Each pair will consist of a 6mm and 12mm standoff to get the proper clearance needed for the cover. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 10 of 26

Servo Arm The servo arm would have a hard time turning the switch on it's own, so we'll add the 3D printed extension. It has a curved guide with stops that allow it to flip the traditional light switch easily. Fit the 3D printed arm over the small servo horn Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 11 of 26

supplied with the micro servo. Place the horn onto the spline shaft of the servo, then turn it to find the range of motion. Turn the servo to roughly its middle position and then remove and re-seat the arm so it is oriented as shown so that it will be able to flip the switch when mounted. Use the supplied screw to secure the arm and horn to the shaft. Secure the servo to the mount with the two small screws. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 12 of 26

Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 13 of 26

Servo Connection The servo motor uses three pins -- power, ground, and signal. Plug the servo header into the Crickit Servo 1 port with the yellow signal wire facing out as shown. Next, we'll program the Feather using CircuitPython and test it before mounting it to the switch plate. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 14 of 26

Code with CircuitPython Feather and Crickit Prep We'll be using CircuitPython for this project. Are you new to using CircuitPython? No worries, there is a full getting started guide here (https://adafru.it/cpy-welcome). For more info on the Feather nrf52840 Express, check out this guide (https://adafru.it/dli). Adafruit suggests using the Mu editor to edit your code and have an interactive REPL in CircuitPython. You can learn about Mu and its installation in this tutorial (https://adafru.it/ano). Follow this guide for instructions on installing the latest release version of CircuitPython for the Feather nrf52840 Express: Libraries https://adafru.it/amd https://adafru.it/amd You'll also need to add the following libraries for this project. Follow this guide (https://adafru.it/cqa) on adding libraries. Plug your nrf Feather board into your computer via a USB cable. Please be sure the cable is a good power+data cable so the computer can talk to the board. A new disk should appear in your computer's file explorer/finder called CIRCUITPY. This is the place we'll copy the code and code library. If you can only get a drive named FTHR840BOOT, load CircuitPython per the guide above. Download the latest CircuitPython libraries to your computer using the green button below. Match the library you get to the version of CircuitPython you are using. Save to your computer's hard drive where you can find it. Note: This project uses the Bluetooth functionality available in CircuitPython 4.0.0-beta.1 and later, on nrf52840 boards such as the Feather nrf52840 Express. Make sure you are using that version or later. https://adafru.it/y8e https://adafru.it/y8e With your file explorer/finder, browse to the bundle and open it up. Copy the following folders and files from the library bundle to your CIRCUITPY lib directory you made earlier: The ones you'll need are: Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 15 of 26

adafruit_ble (folder) adafruit_bluefruit_connect (folder) adafruit_bus_device (folder) adafruit_crickit.mpy (file) adafruit_motor (folder) adafruit_seesaw (folder) All of the other necessary code is baked into CircuitPython! CircuitPython Code Copy the program below and paste it into a new document in Mu. Then, save it from Mu onto your CIRCUITPY flash drive as code.py. As soon as CircuitPython restarts, the servo arm will move into its neutral position and await your Bluetooth connection! # BLE Crickit Light Switch # Use with the Adafruit BlueFruit LE Connect app # Works with CircuitPython 4.0.0-beta.1 and later # running on an nrf52840 Feather board and Crickit FeatherWing # micro servo, 3D printed switch actuator import time import board import digitalio from adafruit_crickit import crickit from adafruit_ble.uart import UARTServer from adafruit_bluefruit_connect.packet import Packet # Only the packet classes that are imported will be known to Packet. from adafruit_bluefruit_connect.button_packet import ButtonPacket # Prep the status LEDs on the Feather blue_led = digitalio.digitalinout(board.blue_led) red_led = digitalio.digitalinout(board.red_led) blue_led.direction = digitalio.direction.output red_led.direction = digitalio.direction.output uart_server = UARTServer() UP_ANGLE = 180 NEUTRAL_ANGLE = 120 DOWN_ANGLE = 60 crickit.servo_1.angle = NEUTRAL_ANGLE angle = NEUTRAL_ANGLE # use to track state print("ble Light Switch") print("use Adafruit Bluefruit app to connect") while True: blue_led.value = False uart_server.start_advertising() while not uart_server.connected: # Wait for a connection. pass Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 16 of 26

pass blue_led.value = True # turn on blue LED when connected while uart_server.connected: if uart_server.in_waiting: # Packet is arriving. red_led.value = False # turn off red LED packet = Packet.from_stream(uart_server) if isinstance(packet, ButtonPacket) and packet.pressed: red_led.value = True # blink to show a packet has been received if packet.button == ButtonPacket.UP and angle!= UP_ANGLE: # UP button pressed angle = NEUTRAL_ANGLE - 45 # set anticipation angle, opposite of goal angle for a in range(angle, UP_ANGLE+1, 1): # anticipation angle, ramp to goal angle crickit.servo_1.angle = a time.sleep(0.1) # wait a moment crickit.servo_1.angle = NEUTRAL_ANGLE # then return to neutral angle angle = UP_ANGLE # set state to prevent redundant hits elif packet.button == ButtonPacket.DOWN and angle!= DOWN_ANGLE: # DOWN button angle = NEUTRAL_ANGLE + 45 for a in range(angle, DOWN_ANGLE-1, -1): crickit.servo_1.angle = a time.sleep(0.1) # wait a moment crickit.servo_1.angle = NEUTRAL_ANGLE # then return to neutral angle angle = DOWN_ANGLE # set state to prevent redundant hits How the Program Works The first part of the program sets up a UARTServer, which is a BLE service that wirelessly sends streams of characters between a BLE device and a client computer (which could be a phone or tablet). The program then starts advertising its UART service to anyone listening. The client computer receives the advertisement, and tells the user it's available. The user can then choose to connect as a client of the service. One a connection is established, the program code waits for incoming command packets from the client, specifically a ButtonPacket. When one arrives, the program either adjusts sees which button has been pressed: up-arrow or downarrow. Servo Motion The servo will initially go to a neutral, half-way position of 120. In order to create a nice motion with the servo arm that can stylishly flip the switch, and still allow manual use of it, we'll do a few things when the button packet is received. First, we'll anticipate the motion. This means that if the goal is to move the switch up, first the arm will swing back 45 away from the neutral position of 120, sort of like pulling your arm back before a throw, or squatting down before a jump. Then, we'll rotate to the goal angle of 180 for up or 60 for down. Rather than jump immediately to the goal value, the code moves the servo one degree at a time in the specified direction, until it hits the numerical limit. This gives us a slower, smoother motion. Once the goal angle is reached, we pause for a brief moment and then return the arm to the neutral angle. Control the Light Switch with the Bluefruit LE Connect App Download the App Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 17 of 26

To control the servo and NeoPixels from a client device (phone or tablet), you use the Adafruit Bluefruit LE Connect App (https://adafru.it/ici). Install it from the Apple App Store (https://adafru.it/byj) or Google Play App Store (https://adafru.it/f4g). Connect to Feather With the Crickit plugged into DC power and turned on with its on-board power switch, the Feather will also get power and automatically start running your code. Then start up the Bluefruit LE Connect app, and make sure it's in Central Mode (left button on the bottom). When you start the app, you should see a device named CIRCU or CIRCUITPY. If there's a long list of devices, you can shorten it by turning on the "Must have UART Service" switch. To connect to the Light Switch, touch the Connect button. You should see "Connecting" and then "Discovering Services". Troubleshooting If you don't see CIRCU or CIRCUITPY right away, try pulling down to refresh. If that doesn't work, try turning Bluetooth off and back on on your phone or tablet and restarting the app. Device Menu After you connect, you'll see a menu of how you can interact with the device. Choose Controller. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 18 of 26

Controller Menu After you choose Controller, you'll see another screen with more choices. Control Pad is used for this project. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 19 of 26

Move the Servo Arm Here's the Control Pad screen. Use the Up and Down buttons to move the servo arm up and down. Later, we'll use this to flip the lights on and off! You should see the arm start in a neutral center position, and then when you press the up button, the arm will travel down a bit and then fully up to the top of the range chosen in the code, finally returning to its neutral position. The same motion pattern applies in reverse for the down button. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 20 of 26

Next, we'll hook it up to the actual light switch plate! Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 21 of 26

Mount and Use the Remote Switch Now, we'll mount the remote to the light switch plate and put it to use! Try to avoid actually taking the switch plate off (just take out the screws). This way you will avoid the high voltage mains wiring behind the plate. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 22 of 26

Mounting Unscrew the two screws from the switchplate. Place the mount over the plate and screw back in. Plug the 5V 2A power supply into the wall and then into Crickit's DC power port. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 23 of 26

It's ready for testing! Use the Adafruit Bluefruit app to connect to the device, then, use the up and down buttons in the control section to turn the servo up and down. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 24 of 26

Cover Once it's working to your satisfaction, you can neaten up the servo wiring and screw the cover into place. Adafruit Industries https://learn.adafruit.com/bluetooth-light-switch-with-crickit-and-nrf52840 Page 25 of 26

Adafruit Industries Last Updated: 2019-02-15 07:06:18 PM UTC Page 26 of 26