Speech Recognition in Scratch 3 - turning Hello into Bonjour!
The Raspberry Pi Foundation recently released a programming activity Alien Language , with support Dale from Machine Learning for Kids , tha...PS3 Controller to move a USB Robot Arm
Guest Blogger Hiren Mistry, Nuffield Research Placement Student working at the University of Northampton. How to use a PS3 Controller to...Scratch Robot Arm
It is not physical but CBiS Education have release a free robot arm simulator for Scratch. Downloadable from their site http://w...Tinkercad and Microbit: To make a neuron
The free online CAD (and so much more) package Tinkercad https://www.tinkercad.com/ under circuits; now has microbits as part of the list ...Escape the Maze with a VR robot - Vex VR
You don't need to buy a robot to get programming a robot, now there are a range of free and relatively simple to start with robot simula...Easy, Free and no markers Augmented Reality - location based AR
For a few years, I have been a fan of Aframe and AR.js - these are fantastic tools for creating web-based Virtual and Augmented Reality. No...Coral Dev Board and Raspberry Pi
This is the second of a planned occasional series of posts on playing with some of the current AI specific add-on processors for Intenet of ...Explaining the Tinkercad microbit Neural network
In a previous post, I looked at developing a neural network in Tinkercad around the Microbit (details available here ) and the whole model ...VR robot in a maze - from Blocks to Python
Recently I produced a post about playing with Vex Robotics VexCode VR blocks and the Maze Playground. The post finished with me saying I w...4tronix Eggbit - cute and wearable - hug avoider
/ The ever-brilliant 4tronix have produced Eggbit https://shop.4tronix.co.uk/collections/microbit-accessories/products/eggbit; a cute, wear...
Robots and getting computers to work with the physical world is fun; this blog looks at my own personal experimenting and building in this area.
Friday, 31 December 2021
Top 10 viewed posts 2021 on the Robot and Physical Computing Blog
Sunday, 26 December 2021
Hug Avoider 4 - micropython, Eggbot and speech
The last of the posts on the Hug avoider and the 4Tronix's Eggbit
4Tronix's Eggbit (in fact I bought three of them https://shop.4tronix.co.uk/collections/bbc-micro-bit/products/eggbit-three-pack-special :-) recently) is a cute add-on for the microbit. In three previous posts I looked at eggbit using microcode to produce a hug avoider - warns when people at too close.
In this post using the buttons and adding (via Microbit V2 with its speaker) simple speech
1. Buttons
Pins for the buttons
- pin8 - Green button
- pin12 - Red button
- pin14 - Yellow button
- pin`6 - Blue button
if pin12.read_digital()==1:
#Red Button
blank_it()
if pin8.read_digital()==1:
#Green button
startingMessage()
if pin14.read_digital()==1:
#Yellow button
rainbow()
if pin16.read_digital()==1:
#Blue botton
display.show(Image.ASLEEP)
2. Speech
The basis on the code is take from https://microbit-micropython.readthedocs.io/en/latest/tutorials/speech.html
mess1 = [
"This is the hug avoide",
"please keep back",
]
# Take from https://microbit-micropython.readthedocs.io/en/latest/tutorials/speech.html
for line in mess1:
speech.say(line, speed=120, pitch=100, throat=100, mouth=200)
sleep(500
The speech is difficult to hear but is fun and there are possibly ways to improve this starting with the information on https://microbit-micropython.readthedocs.io/en/latest/tutorials/speech.html
3. Overall
from microbit import *
from machine import time_pulse_us
import neopixel, speech
sonar =pin15
sonar.write_digital(0)
fireled=neopixel.NeoPixel(pin13,9)
def rainbow():
fireled[0] = (255, 0, 40)
fireled[1]= (255,165,0)
#block=yellow
fireled[2] = (255,255,0)
#block=green
fireled[3] = (0,255,0)
#block=blue
fireled [4] = (0,0,255)
# block=indigo
fireled[5] = (75,0,130)
# block=violet
fireled[6] = (138,43,178)
#block=purple
fireled[7] = (255,0,255)
fireled.show()
def blank_it():
for j in range(8):
fireled[j] = (63, 0, 0)
fireled.show()
def howfar():
sonar.write_digital(1)
sonar.write_digital(0)
timeus=time_pulse_us(sonar,1)
echo=timeus/1000000
dist=(echo/2)*34300
sleep(100)
return dist
def startingMessage():
mess1 = [
"This is the hug avoide",
"please keep back",
]
# Take from https://microbit-micropython.readthedocs.io/en/latest/tutorials/speech.html
for line in mess1:
speech.say(line, speed=120, pitch=100, throat=100, mouth=200)
sleep(500)
def buttonplay():
if pin12.read_digital()==1:
#Red Button
blank_it()
if pin8.read_digital()==1:
#Green button
startingMessage()
if pin14.read_digital()==1:
#Yellow button
rainbow()
if pin16.read_digital()==1:
#Blue botton
display.show(Image.ASLEEP)
while True:
buttonplay()
dist=howfar()
if dist>30:
pin2.write_digital(1)
pin0.write_digital(0)
display.show(Image.HAPPY)
else:
pin2.write_digital(1)
pin0.write_digital(1)
blank_it()
speech.say("back away please", speed=120, pitch=100, throat=100, mouth=200)
display.show(Image.ANGRY)
Thursday, 23 December 2021
Hug Avoider 3 - experiments with Python and 4Tronix Eggbit
4Tronix's Eggbit (in fact I bought three of them https://shop.4tronix.co.uk/collections/bbc-micro-bit/products/eggbit-three-pack-special :-) recently) is a cute add-on for the microbit (see above). In two previous posts I looked at eggbit using microcode to produce a hug avoider - warns when people at too close.
This post replicates some of this, but this time using Python and shows the stages of the build
- Get the ultrasound to find the distance;
- Produce smile and surprise on the eggbit's 'mouth';
- Produce rainbow on the neopixels or all the pixels turning red;
- Bring it all together so if the person is too close, less than 30cm it reacts.
1. Ultrasonic detection
Probably the most challenging bit of this was getting the ultrasonic distance measrement working. It actually is not that difficult; especially using code from https://firialabs.com/blogs/lab-notes/ultrasonic-distance-sensor-with-python-and-the-micro-bit as the basis of the solution and pin15 does both triggering and receiving. Code sends a pulse out, picked up and processed to get the distance from the delay. The code is shown below:
from microbit import *
from machine import time_pulse_us
sonar =pin15
sonar.write_digital(0)
while True:
sonar.write_digital(1)
sonar.write_digital(0)
timeus=time_pulse_us(sonar,1)
echo=timeus/1000000
dist=(echo/2)*34300
sleep(100)
display.scroll(str(dist))
2. LEDs
To get a greater understanding of how 4Tronix's makecode extension (used in the previou posts) for the Eggbit controls the various pins the best resource was to reverse engineering the code from https://github.com/4tronix/EggBit/blob/main/eggbit.ts in their github respository for the Eggbit.
This gave the colours and the correct pin for the LEDs the code is shown below. Producing a rainbow method and a method to set the LEDs/neopixels to red.
import neopixel
fireled=neopixel.NeoPixel(pin13,9)
def rainbow():
fireled[0] = (255, 0, 40)
fireled[1]= (255,165,0)
#block=yellow
fireled[2] = (255,255,0)
#block=green
fireled[3] = (0,255,0)
#block=blue
fireled [4] = (0,0,255)
# block=indigo
fireled[5] = (75,0,130)
# block=violet
fireled[6] = (138,43,178)
#block=purple
fireled[7] = (255,0,255)
fireled.show()
def blank_it():
for j in range(8):
fireled[j] = (63, 0, 0)
fireled.show()
3. 'Face'
Eggbit has set of LEDs that represent a mouth, controlled via three pins. Only two of those are used in this example
'Smile' is pin2.write_digital(1) the 'lower' part of the mouth and turn off upper part of the mouth pin0.write_digital(0)
'Surprise' uses both parts
pin2.write_digital(1)
pin0.write_digital(1)
4. Overall
So putting this altogether
from microbit import *
from machine import time_pulse_us
import neopixel
sonar =pin15
sonar.write_digital(0)
fireled=neopixel.NeoPixel(pin13,9)
def rainbow():
fireled[0] = (255, 0, 40)
fireled[1]= (255,165,0)
#block=yellow
fireled[2] = (255,255,0)
#block=green
fireled[3] = (0,255,0)
#block=blue
fireled [4] = (0,0,255)
# block=indigo
fireled[5] = (75,0,130)
# block=violet
fireled[6] = (138,43,178)
#block=purple
fireled[7] = (255,0,255)
fireled.show()
def blank_it():
for j in range(8):
fireled[j] = (63, 0, 0)
fireled.show()
def howfar():
sonar.write_digital(1)
sonar.write_digital(0)
timeus=time_pulse_us(sonar,1)
echo=timeus/1000000
dist=(echo/2)*34300
sleep(100)
return dist
while True:
dist=howfar()
if dist>30:
pin2.write_digital(1)
pin0.write_digital(0)
rainbow()
display.show(Image.HAPPY)
else:
pin2.write_digital(1)
pin0.write_digital(1)
blank_it()
display.show(Image.ANGRY)
Tuesday, 21 December 2021
Hug Avoider 2 - #4tronix #Eggbit
In an earlier post this year ( 4tronix Eggbit - cute and wearable - hug avoider) I played with 4Tronix's Eggbit (in fact I bought three of them https://shop.4tronix.co.uk/collections/bbc-micro-bit/products/eggbit-three-pack-special :-) recently). In that one I used a microbit V1.
In this post, I am using a microbit V2 and replicating the idea but with adding a sound; when people get too close as a bit of fun and surprise for relatives at christmas.
The code written using Makecode for Microbit (https://makecode.microbit.org/) and the extension for it 4Tronix's developed (see https://4tronix.co.uk/blog/?p=2485 for more details) is shown below:
If the ultrasonic sensor picks up anyone in front; LEDS change to red, a sped-up version of one of the standard tunes in Makercode is played and the mouth changes to a surprised look.
Good fun, didn't stop anyone and my son made one with the LEDs lighting up as the person got closer.
What I want to look at is the possibility of programming it with Python - something for the new year.
All opinions in this blog are the Author's and should not in any way be seen as reflecting the views of any organisation the Author has any association with. Twitter @scottturneruon
Subscribe to:
Posts (Atom)
Remote Data Logging with V1 Microbit
In an earlier post https://robotsandphysicalcomputing.blogspot.com/2024/08/microbit-v1-datalogging.html a single microbit was used to log ...